From bca26a4c6ba4b2ac99fef6aeaece4fd514993102 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 29 Jun 2001 05:23:10 +0000 Subject: [PATCH] We need to make sure to remove PHI nodes in the successor that cannot be 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 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/Transforms/Scalar/ConstantProp.cpp b/lib/Transforms/Scalar/ConstantProp.cpp index 9d70d842bed..2df4f01a7e6 100644 --- a/lib/Transforms/Scalar/ConstantProp.cpp +++ b/lib/Transforms/Scalar/ConstantProp.cpp @@ -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 -- 2.34.1