diff options
author | Owen Anderson <resistor@mac.com> | 2008-07-03 17:21:41 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2008-07-03 17:21:41 +0000 |
commit | 9da02b844f7fe2ddae936b029fcdb34d74706b22 (patch) | |
tree | 696d604cee2ffbc99e43792fceca8de4df606d0e /lib/Transforms/Scalar/ADCE.cpp | |
parent | 9f1c8317a4676945b4961ddb9827ef2412551620 (diff) |
Remove the ability for ADCE to remove unreachable blocks in loop nests, because, as Eli pointed out, SimplifyCFG already does this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53104 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/ADCE.cpp')
-rw-r--r-- | lib/Transforms/Scalar/ADCE.cpp | 38 |
1 files changed, 0 insertions, 38 deletions
diff --git a/lib/Transforms/Scalar/ADCE.cpp b/lib/Transforms/Scalar/ADCE.cpp index c5561995de..aef16f7f1c 100644 --- a/lib/Transforms/Scalar/ADCE.cpp +++ b/lib/Transforms/Scalar/ADCE.cpp @@ -53,44 +53,6 @@ bool ADCE::runOnFunction(Function& F) { SmallPtrSet<Instruction*, 128> alive; SmallVector<Instruction*, 128> worklist; - SmallPtrSet<BasicBlock*, 64> reachable; - SmallVector<BasicBlock*, 16> unreachable; - - // First, collect the set of reachable blocks ... - for (df_ext_iterator<BasicBlock*, SmallPtrSet<BasicBlock*, 64> > - DI = df_ext_begin(&F.getEntryBlock(), reachable), - DE = df_ext_end(&F.getEntryBlock(), reachable); DI != DE; ++DI) - ; // Deliberately empty, df_ext_iterator will fill in the set. - - // ... and then invert it into the list of unreachable ones. These - // blocks will be removed from the function. - for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ++FI) - if (!reachable.count(FI)) - unreachable.push_back(FI); - - // Prepare to remove blocks by removing the PHI node entries for those blocks - // in their successors, and remove them from reference counting. - for (SmallVector<BasicBlock*, 16>::iterator UI = unreachable.begin(), - UE = unreachable.end(); UI != UE; ++UI) { - BasicBlock* BB = *UI; - for (succ_iterator SI = succ_begin(BB), SE = succ_end(BB); - SI != SE; ++SI) { - BasicBlock* succ = *SI; - BasicBlock::iterator succ_inst = succ->begin(); - while (PHINode* P = dyn_cast<PHINode>(succ_inst)) { - P->removeIncomingValue(BB); - ++succ_inst; - } - } - - BB->dropAllReferences(); - } - - // Finally, erase the unreachable blocks. - for (SmallVector<BasicBlock*, 16>::iterator UI = unreachable.begin(), - UE = unreachable.end(); UI != UE; ++UI) - (*UI)->eraseFromParent(); - // Collect the set of "root" instructions that are known live. for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) if (isa<TerminatorInst>(I.getInstructionIterator()) || |