diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-08-05 18:34:14 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-08-05 18:34:14 +0000 |
commit | b0b4e86215fe2815ffed9e70c810b08c0ca4e47f (patch) | |
tree | 281f44e4923cb317a1c205a76e98de8f05b716d9 /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 2a04a99ce677cf8fbc8b9fc0c36693e44f147c5d (diff) | |
download | llvm-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.cpp | 4 |
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. |