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 | |
| parent | 2a04a99ce677cf8fbc8b9fc0c36693e44f147c5d (diff) | |
| download | bcm5719-llvm-b0b4e86215fe2815ffed9e70c810b08c0ca4e47f.tar.gz bcm5719-llvm-b0b4e86215fe2815ffed9e70c810b08c0ca4e47f.zip | |
[SCEV] Don't infinitely recurse on unreachable code
llvm-svn: 277848
Diffstat (limited to 'llvm/lib/Analysis')
| -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 482d3a6b39f..d3d85b1b399 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. | 

