summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Lebar <jlebar@google.com>2016-02-12 21:01:31 +0000
committerJustin Lebar <jlebar@google.com>2016-02-12 21:01:31 +0000
commit144c5a6c154b3d639709c59892a41139aadc5032 (patch)
tree2e29fcd8d1c5cdfb97c54849cd6a13315d525e9f
parent531b24b53a90928e6d9e628c1b2ba3871fa5dd74 (diff)
downloadbcm5719-llvm-144c5a6c154b3d639709c59892a41139aadc5032.tar.gz
bcm5719-llvm-144c5a6c154b3d639709c59892a41139aadc5032.zip
Add convergent property to CodeMetrics.
Summary: No functional changes. Reviewers: jingyue, arsenm Subscribers: arsenm, llvm-commits Differential Revision: http://reviews.llvm.org/D17126 llvm-svn: 260728
-rw-r--r--llvm/include/llvm/Analysis/CodeMetrics.h3
-rw-r--r--llvm/lib/Analysis/CodeMetrics.cpp5
2 files changed, 7 insertions, 1 deletions
diff --git a/llvm/include/llvm/Analysis/CodeMetrics.h b/llvm/include/llvm/Analysis/CodeMetrics.h
index 5f6b0586c24..f512aca5786 100644
--- a/llvm/include/llvm/Analysis/CodeMetrics.h
+++ b/llvm/include/llvm/Analysis/CodeMetrics.h
@@ -53,6 +53,9 @@ struct CodeMetrics {
/// one or more 'noduplicate' instructions.
bool notDuplicatable = false;
+ /// \brief True if this function contains a call to a convergent function.
+ bool convergent = false;
+
/// \brief True if this function calls alloca (in the C sense).
bool usesDynamicAlloca = false;
diff --git a/llvm/lib/Analysis/CodeMetrics.cpp b/llvm/lib/Analysis/CodeMetrics.cpp
index 4090b4cd752..035717aa613 100644
--- a/llvm/lib/Analysis/CodeMetrics.cpp
+++ b/llvm/lib/Analysis/CodeMetrics.cpp
@@ -152,9 +152,12 @@ void CodeMetrics::analyzeBasicBlock(const BasicBlock *BB,
if (II->getType()->isTokenTy() && II->isUsedOutsideOfBlock(BB))
notDuplicatable = true;
- if (const CallInst *CI = dyn_cast<CallInst>(II))
+ if (const CallInst *CI = dyn_cast<CallInst>(II)) {
if (CI->cannotDuplicate())
notDuplicatable = true;
+ if (CI->isConvergent())
+ convergent = true;
+ }
if (const InvokeInst *InvI = dyn_cast<InvokeInst>(II))
if (InvI->cannotDuplicate())
OpenPOWER on IntegriCloud