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;