My last commit was not correct for nested loops. Fix it, and add a testcase for it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40498 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp
index eb12abe..f3aa796 100644
--- a/lib/Transforms/Scalar/GVN.cpp
+++ b/lib/Transforms/Scalar/GVN.cpp
@@ -731,6 +731,7 @@
} else {
PHINode *PN = new PHINode(orig->getType(), orig->getName()+".rle", BB->begin());
PN->reserveOperandSpace(numPreds);
+ Phis[BB] = PN;
visited.insert(BB);
// Fill in the incoming values for the block.
@@ -738,7 +739,7 @@
if (!visited.count(*PI))
PN->addIncoming(performPHIConstruction(*PI, orig, Phis, visited), *PI);
else
- PN->addIncoming(PN, *PI);
+ PN->addIncoming(Phis[*PI], *PI);
visited.erase(BB);
bool all_same = PN->getNumIncomingValues() != 1;
@@ -748,6 +749,7 @@
if (all_same) {
PN->eraseFromParent();
+ Phis[BB] = first;
return first;
} else {
return PN;