summaryrefslogtreecommitdiff
path: root/lib/Analysis/ScalarEvolutionExpander.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2012-10-19 16:37:30 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2012-10-19 16:37:30 +0000
commit239fd44f7a68aae4b2e8b6f1738ef9e8fd4ddc01 (patch)
treef8f67d4ffc122a3bf495e0b6bda03fdb6d55a5da /lib/Analysis/ScalarEvolutionExpander.cpp
parent34674fea970b20dde4336a06a12732211d1cfa04 (diff)
downloadllvm-239fd44f7a68aae4b2e8b6f1738ef9e8fd4ddc01.tar.gz
llvm-239fd44f7a68aae4b2e8b6f1738ef9e8fd4ddc01.tar.bz2
llvm-239fd44f7a68aae4b2e8b6f1738ef9e8fd4ddc01.tar.xz
SCEVExpander: Don't crash when trying to merge two constant phis.
Just constant fold them so they can't cause any trouble. Fixes PR12627. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166286 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/ScalarEvolutionExpander.cpp')
-rw-r--r--lib/Analysis/ScalarEvolutionExpander.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/Analysis/ScalarEvolutionExpander.cpp b/lib/Analysis/ScalarEvolutionExpander.cpp
index 5c2a49e767..f18c50e070 100644
--- a/lib/Analysis/ScalarEvolutionExpander.cpp
+++ b/lib/Analysis/ScalarEvolutionExpander.cpp
@@ -1618,6 +1618,17 @@ unsigned SCEVExpander::replaceCongruentIVs(Loop *L, const DominatorTree *DT,
PEnd = Phis.end(); PIter != PEnd; ++PIter) {
PHINode *Phi = *PIter;
+ // Fold constant phis. They may be congruent to other constant phis and
+ // would confuse the logic below that expects proper IVs.
+ if (Value *V = Phi->hasConstantValue()) {
+ Phi->replaceAllUsesWith(V);
+ DeadInsts.push_back(Phi);
+ ++NumElim;
+ DEBUG_WITH_TYPE(DebugType, dbgs()
+ << "INDVARS: Eliminated constant iv: " << *Phi << '\n');
+ continue;
+ }
+
if (!SE.isSCEVable(Phi->getType()))
continue;