mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-04 05:31:06 +00:00
Fix bug: SimplifyCFG/2003-03-07-DominateProblem.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5722 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5db057fbb0
commit
3a43837d85
@ -141,9 +141,11 @@ bool SimplifyCFG(BasicBlock *BB) {
|
||||
//
|
||||
if (!PropagatePredecessorsForPHIs(BB, Succ)) {
|
||||
//cerr << "Killing Trivial BB: \n" << BB;
|
||||
BB->replaceAllUsesWith(Succ);
|
||||
std::string OldName = BB->getName();
|
||||
|
||||
std::vector<BasicBlock*>
|
||||
OldSuccPreds(pred_begin(Succ), pred_end(Succ));
|
||||
|
||||
// Move all PHI nodes in BB to Succ if they are alive, otherwise
|
||||
// delete them.
|
||||
while (PHINode *PN = dyn_cast<PHINode>(&BB->front()))
|
||||
@ -152,11 +154,26 @@ bool SimplifyCFG(BasicBlock *BB) {
|
||||
else {
|
||||
// The instruction is alive, so this means that Succ must have
|
||||
// *ONLY* had BB as a predecessor, and the PHI node is still valid
|
||||
// now. Simply move it into Succ.
|
||||
// now. Simply move it into Succ, because we know that BB
|
||||
// strictly dominated Succ.
|
||||
BB->getInstList().remove(BB->begin());
|
||||
Succ->getInstList().push_front(PN);
|
||||
|
||||
// We need to add new entries for the PHI node to account for
|
||||
// predecessors of Succ that the PHI node does not take into
|
||||
// account. At this point, since we know that BB dominated succ,
|
||||
// this means that we should any newly added incoming edges should
|
||||
// use the PHI node as the value for these edges, because they are
|
||||
// loop back edges.
|
||||
|
||||
for (unsigned i = 0, e = OldSuccPreds.size(); i != e; ++i)
|
||||
if (OldSuccPreds[i] != BB)
|
||||
PN->addIncoming(PN, OldSuccPreds[i]);
|
||||
}
|
||||
|
||||
// Everything that jumped to BB now goes to Succ...
|
||||
BB->replaceAllUsesWith(Succ);
|
||||
|
||||
// Delete the old basic block...
|
||||
M->getBasicBlockList().erase(BB);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user