We need to make sure to remove PHI nodes in the successor that cannot be
authorChris Lattner <sabre@nondot.org>
Fri, 29 Jun 2001 05:23:10 +0000 (05:23 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 29 Jun 2001 05:23:10 +0000 (05:23 +0000)
executed when removing branch dest.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/ConstantProp.cpp

index 9d70d842bedf5c8803bf0a841b14748ec51355c2..2df4f01a7e6c68df535b9c84203d5d0e60cc9617 100644 (file)
@@ -129,6 +129,14 @@ inline static bool ConstantFoldTerminator(TerminatorInst *T) {
       // YES.  Change to unconditional branch...
       ConstPoolBool *Cond = (ConstPoolBool*)BI->getOperand(2);
       Value *Destination = BI->getOperand(Cond->getValue() ? 0 : 1);
+      Value *OldDest     = BI->getOperand(Cond->getValue() ? 1 : 0);
+
+      //cerr << "Method: " << T->getParent()->getParent() << "\nRemoving branch from " << T->getParent() << "\n\nTo: " << OldDest << endl;
+
+      // Let the basic block know that we are letting go of it.  Based on this,
+      // it will adjust it's PHI nodes.
+      assert(T->getParent() && "Terminator not inserted in block!");
+      OldDest->castBasicBlockAsserting()->removePredecessor(T->getParent());
 
       BI->setOperand(0, Destination);  // Set the unconditional destination
       BI->setOperand(1, 0);            // Clear the conditional destination