mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-26 05:25:47 +00:00
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
This commit is contained in:
@@ -129,6 +129,14 @@ inline static bool ConstantFoldTerminator(TerminatorInst *T) {
|
|||||||
// YES. Change to unconditional branch...
|
// YES. Change to unconditional branch...
|
||||||
ConstPoolBool *Cond = (ConstPoolBool*)BI->getOperand(2);
|
ConstPoolBool *Cond = (ConstPoolBool*)BI->getOperand(2);
|
||||||
Value *Destination = BI->getOperand(Cond->getValue() ? 0 : 1);
|
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(0, Destination); // Set the unconditional destination
|
||||||
BI->setOperand(1, 0); // Clear the conditional destination
|
BI->setOperand(1, 0); // Clear the conditional destination
|
||||||
|
Reference in New Issue
Block a user