diff options
author | Hal Finkel <hfinkel@anl.gov> | 2014-07-31 19:13:38 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2014-07-31 19:13:38 +0000 |
commit | 36eff0f854fa9f47394dc48dba195b93b6efac63 (patch) | |
tree | 6ca39331e0116efa6cddb84e1f5e2d28484ab86c /llvm/lib | |
parent | 6d3bd8f7ec0e702ec7ba2d8ac6da8a2be0ac68f9 (diff) | |
download | bcm5719-llvm-36eff0f854fa9f47394dc48dba195b93b6efac63.tar.gz bcm5719-llvm-36eff0f854fa9f47394dc48dba195b93b6efac63.zip |
Fix ScalarEvolutionExpander when creating a PHI in a block with duplicate predecessors
It seems that when I fixed this, almost exactly a year ago, I did not quite do
it correctly. When we have duplicate block predecessors, we can indeed not have
different incoming values for the same block, but we *must* have duplicate
entries. So, instead of skipping the duplicates, we explicitly add the
duplicate incoming values.
Fixes PR20442.
llvm-svn: 214423
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolutionExpander.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolutionExpander.cpp b/llvm/lib/Analysis/ScalarEvolutionExpander.cpp index 8c75b0db70f..968c619a48d 100644 --- a/llvm/lib/Analysis/ScalarEvolutionExpander.cpp +++ b/llvm/lib/Analysis/ScalarEvolutionExpander.cpp @@ -1443,8 +1443,12 @@ Value *SCEVExpander::visitAddRecExpr(const SCEVAddRecExpr *S) { Constant *One = ConstantInt::get(Ty, 1); for (pred_iterator HPI = HPB; HPI != HPE; ++HPI) { BasicBlock *HP = *HPI; - if (!PredSeen.insert(HP)) + if (!PredSeen.insert(HP)) { + // There must be an incoming value for each predecessor, even the + // duplicates! + CanonicalIV->addIncoming(CanonicalIV->getIncomingValueForBlock(HP), HP); continue; + } if (L->contains(HP)) { // Insert a unit add instruction right before the terminator |