aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ScalarEvolution.cpp
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2016-08-05 18:34:14 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2016-08-05 18:34:14 +0000
commitb0b4e86215fe2815ffed9e70c810b08c0ca4e47f (patch)
tree281f44e4923cb317a1c205a76e98de8f05b716d9 /llvm/lib/Analysis/ScalarEvolution.cpp
parent2a04a99ce677cf8fbc8b9fc0c36693e44f147c5d (diff)
downloadllvm-b0b4e86215fe2815ffed9e70c810b08c0ca4e47f.zip
llvm-b0b4e86215fe2815ffed9e70c810b08c0ca4e47f.tar.gz
llvm-b0b4e86215fe2815ffed9e70c810b08c0ca4e47f.tar.bz2
[SCEV] Don't infinitely recurse on unreachable code
llvm-svn: 277848
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r--llvm/lib/Analysis/ScalarEvolution.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index 482d3a6..d3d85b1 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -4168,7 +4168,9 @@ static bool BrPHIToSelect(DominatorTree &DT, BranchInst *BI, PHINode *Merge,
}
const SCEV *ScalarEvolution::createNodeFromSelectLikePHI(PHINode *PN) {
- if (PN->getNumIncomingValues() == 2) {
+ auto IsReachable =
+ [&](BasicBlock *BB) { return DT.isReachableFromEntry(BB); };
+ if (PN->getNumIncomingValues() == 2 && all_of(PN->blocks(), IsReachable)) {
const Loop *L = LI.getLoopFor(PN->getParent());
// We don't want to break LCSSA, even in a SCEV expression tree.