]> granicus.if.org Git - llvm/commitdiff
Fix bug: mem2reg/2003-04-24-MultipleIdenticalSuccessors.ll
authorChris Lattner <sabre@nondot.org>
Fri, 25 Apr 2003 00:54:58 +0000 (00:54 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 25 Apr 2003 00:54:58 +0000 (00:54 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5919 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/PromoteMemoryToRegister.cpp

index 3378369f7aaaf7f7974fff01ff0ff612e365ae89..85acce66e13df520b2a841e9baf69fb4240603b8 100644 (file)
@@ -222,13 +222,14 @@ void PromoteMem2Reg::RenamePass(BasicBlock *BB, BasicBlock *Pred,
   std::vector<PHINode *> &BBPNs = NewPhiNodes[BB];
   for (unsigned k = 0; k != BBPNs.size(); ++k)
     if (PHINode *PN = BBPNs[k]) {
-      int BBI = PN->getBasicBlockIndex(Pred);
-      assert(BBI >= 0 && "Predecessor not in basic block yet!");
-
-      // At this point we can assume that the array has phi nodes.. let's update
-      // the incoming data.
-      PN->setIncomingValue(BBI, IncomingVals[k]);
-
+      // The PHI node may have multiple entries for this predecessor.  We must
+      // make sure we update all of them.
+      for (unsigned i = 0, e = PN->getNumOperands(); i != e; i += 2) {
+        if (PN->getOperand(i+1) == Pred)
+          // At this point we can assume that the array has phi nodes.. let's
+          // update the incoming data.
+          PN->setOperand(i, IncomingVals[k]);
+      }
       // also note that the active variable IS designated by the phi node
       IncomingVals[k] = PN;
     }