mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-19 06:31:18 +00:00
Fix bug: ADCE/2003-01-22-PredecessorProblem.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5405 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
56b6db8eb0
commit
d7f268d418
@ -331,10 +331,17 @@ bool ADCE::doADCE() {
|
||||
}
|
||||
}
|
||||
|
||||
// Loop over all of the basic blocks in the function, dropping references of
|
||||
// the dead basic blocks
|
||||
// We make changes if there are any dead blocks in the function...
|
||||
if (unsigned NumDeadBlocks = Func->size() - AliveBlocks.size()) {
|
||||
MadeChanges = true;
|
||||
NumBlockRemoved += NumDeadBlocks;
|
||||
}
|
||||
|
||||
// Loop over all of the basic blocks in the function, removing control flow
|
||||
// edges to live blocks (also eliminating any entries in PHI functions in
|
||||
// referenced blocks).
|
||||
//
|
||||
for (Function::iterator BB = Func->begin(), E = Func->end(); BB != E; ++BB) {
|
||||
for (Function::iterator BB = Func->begin(), E = Func->end(); BB != E; ++BB)
|
||||
if (!AliveBlocks.count(BB)) {
|
||||
// Remove all outgoing edges from this basic block and convert the
|
||||
// terminator into a return instruction.
|
||||
@ -354,12 +361,16 @@ bool ADCE::doADCE() {
|
||||
BB->getInstList().push_back(new ReturnInst(RetTy != Type::VoidTy ?
|
||||
Constant::getNullValue(RetTy) : 0));
|
||||
}
|
||||
|
||||
BB->dropAllReferences();
|
||||
++NumBlockRemoved;
|
||||
MadeChanges = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Loop over all of the basic blocks in the function, dropping references of
|
||||
// the dead basic blocks. We must do this after the previous step to avoid
|
||||
// dropping references to PHIs which still have entries...
|
||||
//
|
||||
for (Function::iterator BB = Func->begin(), E = Func->end(); BB != E; ++BB)
|
||||
if (!AliveBlocks.count(BB))
|
||||
BB->dropAllReferences();
|
||||
|
||||
// Now loop through all of the blocks and delete the dead ones. We can safely
|
||||
// do this now because we know that there are no references to dead blocks
|
||||
|
Loading…
x
Reference in New Issue
Block a user