diff --git a/llvm/lib/Transforms/Scalar/ADCE.cpp b/llvm/lib/Transforms/Scalar/ADCE.cpp index f7035e576b30..c5561995deb6 100644 --- a/llvm/lib/Transforms/Scalar/ADCE.cpp +++ b/llvm/lib/Transforms/Scalar/ADCE.cpp @@ -22,10 +22,11 @@ #include "llvm/Support/CFG.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/InstIterator.h" -#include "llvm/ADT/DenseSet.h" #include "llvm/ADT/DepthFirstIterator.h" -#include "llvm/ADT/Statistic.h" +#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/Statistic.h" + using namespace llvm; @@ -36,12 +37,6 @@ namespace { static char ID; // Pass identification, replacement for typeid ADCE() : FunctionPass((intptr_t)&ID) {} - DenseSet alive; - SmallVector worklist; - - DenseSet reachable; - SmallVector unreachable; - virtual bool runOnFunction(Function& F); virtual void getAnalysisUsage(AnalysisUsage& AU) const { @@ -55,15 +50,17 @@ char ADCE::ID = 0; static RegisterPass X("adce", "Aggressive Dead Code Elimination"); bool ADCE::runOnFunction(Function& F) { - alive.clear(); - worklist.clear(); - reachable.clear(); - unreachable.clear(); + SmallPtrSet alive; + SmallVector worklist; + + SmallPtrSet reachable; + SmallVector unreachable; // First, collect the set of reachable blocks ... - for (df_iterator DI = df_begin(&F.getEntryBlock()), - DE = df_end(&F.getEntryBlock()); DI != DE; ++DI) - reachable.insert(*DI); + for (df_ext_iterator > + 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. @@ -73,7 +70,7 @@ bool ADCE::runOnFunction(Function& F) { // Prepare to remove blocks by removing the PHI node entries for those blocks // in their successors, and remove them from reference counting. - for (SmallVector::iterator UI = unreachable.begin(), + for (SmallVector::iterator UI = unreachable.begin(), UE = unreachable.end(); UI != UE; ++UI) { BasicBlock* BB = *UI; for (succ_iterator SI = succ_begin(BB), SE = succ_end(BB); @@ -90,7 +87,7 @@ bool ADCE::runOnFunction(Function& F) { } // Finally, erase the unreachable blocks. - for (SmallVector::iterator UI = unreachable.begin(), + for (SmallVector::iterator UI = unreachable.begin(), UE = unreachable.end(); UI != UE; ++UI) (*UI)->eraseFromParent();