diff options
author | Sebastian Pop <sebpop@gmail.com> | 2017-03-08 01:54:50 +0000 |
---|---|---|
committer | Sebastian Pop <sebpop@gmail.com> | 2017-03-08 01:54:50 +0000 |
commit | 4a4d245b194d56b74bbb9012d25b44aaba753e36 (patch) | |
tree | a1edb8844aaa364b5002538e3707129b162ba5e2 /llvm/lib/Analysis/ValueTracking.cpp | |
parent | b6ddd7a437567143b95b7ffbbf221548d52cb599 (diff) | |
download | bcm5719-llvm-4a4d245b194d56b74bbb9012d25b44aaba753e36.tar.gz bcm5719-llvm-4a4d245b194d56b74bbb9012d25b44aaba753e36.zip |
Handle UnreachableInst in isGuaranteedToTransferExecutionToSuccessor
A block with an UnreachableInst does not transfer execution to a successor.
The problem was exposed by GVN-hoist. This patch fixes bug 32153.
Patch by Aditya Kumar.
Differential Revision: https://reviews.llvm.org/D30667
llvm-svn: 297254
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r-- | llvm/lib/Analysis/ValueTracking.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 70fab29087f..1761dac269d 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -3781,6 +3781,8 @@ bool llvm::isGuaranteedToTransferExecutionToSuccessor(const Instruction *I) { return false; if (isa<ReturnInst>(I)) return false; + if (isa<UnreachableInst>(I)) + return false; // Calls can throw, or contain an infinite loop, or kill the process. if (auto CS = ImmutableCallSite(I)) { |