[llvm-commits] [llvm] r53044 - /llvm/trunk/lib/Transforms/Scalar/ADCE.cpp

Owen Anderson resistor at mac.com
Wed Jul 2 11:41:09 PDT 2008


Author: resistor
Date: Wed Jul  2 13:41:09 2008
New Revision: 53044

URL: http://llvm.org/viewvc/llvm-project?rev=53044&view=rev
Log:
Use df_ext_iterator to capture the reachable set without allocating an extra set.
Also, move large sets and vectors out of instance variables and onto the stack,
and give them more reasonable sizes.

Modified:
    llvm/trunk/lib/Transforms/Scalar/ADCE.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/ADCE.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ADCE.cpp?rev=53044&r1=53043&r2=53044&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/ADCE.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/ADCE.cpp Wed Jul  2 13:41:09 2008
@@ -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 @@
     static char ID; // Pass identification, replacement for typeid
     ADCE() : FunctionPass((intptr_t)&ID) {}
     
-    DenseSet<Instruction*> alive;
-    SmallVector<Instruction*, 1024> worklist;
-    
-    DenseSet<BasicBlock*> reachable;
-    SmallVector<BasicBlock*, 1024> unreachable;
-    
     virtual bool runOnFunction(Function& F);
     
     virtual void getAnalysisUsage(AnalysisUsage& AU) const {
@@ -55,15 +50,17 @@
 static RegisterPass<ADCE> X("adce", "Aggressive Dead Code Elimination");
 
 bool ADCE::runOnFunction(Function& F) {
-  alive.clear();
-  worklist.clear();
-  reachable.clear();
-  unreachable.clear();
+  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_iterator<BasicBlock*> DI = df_begin(&F.getEntryBlock()),
-       DE = df_end(&F.getEntryBlock()); DI != DE; ++DI)
-    reachable.insert(*DI);
+  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.
@@ -73,7 +70,7 @@
   
   // 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*, 1024>::iterator UI = unreachable.begin(),
+  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);
@@ -90,7 +87,7 @@
   }
   
   // Finally, erase the unreachable blocks.
-  for (SmallVector<BasicBlock*, 1024>::iterator UI = unreachable.begin(),
+  for (SmallVector<BasicBlock*, 16>::iterator UI = unreachable.begin(),
        UE = unreachable.end(); UI != UE; ++UI)
     (*UI)->eraseFromParent();
   





More information about the llvm-commits mailing list