mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
Fix bug: ADCE/2003-01-22-PredecessorProblem.ll
llvm-svn: 5405
This commit is contained in:
parent
b229912fd7
commit
7af7b1c82c
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 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();
|
||||
++NumBlockRemoved;
|
||||
MadeChanges = true;
|
||||
}
|
||||
}
|
||||
|
||||
// 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…
Reference in New Issue
Block a user