summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-06-14 20:23:16 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-06-14 20:23:16 +0000
commitd7e8206b58c0a5a6427fa75df734e71692eb31a4 (patch)
tree98888ebf864dd4a70ce30414f3716d64e42d86db /llvm/lib/Analysis
parentf8b91f8336e6850e0e7107414d61ff99baff57bd (diff)
downloadbcm5719-llvm-d7e8206b58c0a5a6427fa75df734e71692eb31a4.tar.gz
bcm5719-llvm-d7e8206b58c0a5a6427fa75df734e71692eb31a4.zip
[ValueTracking] Calls to @llvm.assume always return
This change teaches llvm::isGuaranteedToTransferExecutionToSuccessor that calls to @llvm.assume always terminate. Most other relevant intrinsics should be covered by the "CS.onlyReadsMemory() || CS.onlyAccessesArgMemory()" bit but we were missing @llvm.assumes because we state that it clobbers memory. Added an LICM test case, but this change is not specific to LICM. llvm-svn: 272703
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 7e09ec74bef..7109ff84b8e 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -3478,7 +3478,8 @@ bool llvm::isGuaranteedToTransferExecutionToSuccessor(const Instruction *I) {
// but it's consistent with other passes. See http://llvm.org/PR965 .
// FIXME: This isn't aggressive enough; a call which only writes to a
// global is guaranteed to return.
- return CS.onlyReadsMemory() || CS.onlyAccessesArgMemory();
+ return CS.onlyReadsMemory() || CS.onlyAccessesArgMemory() ||
+ match(I, m_Intrinsic<Intrinsic::assume>());
}
// Other instructions return normally.
OpenPOWER on IntegriCloud