Allocate nodes for the scoped hash table from a recyling bump pointer
authorChris Lattner <sabre@nondot.org>
Mon, 3 Jan 2011 01:42:46 +0000 (01:42 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 3 Jan 2011 01:42:46 +0000 (01:42 +0000)
allocator.  This speeds up early cse by about 20%

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122723 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/EarlyCSE.cpp

index 4399e2ee1fda5f2dda4e15b6d5e5e6330cd7d632..99a09923f4ab8ef6103bd8340cd08fd98d45fa44 100644 (file)
@@ -21,6 +21,7 @@
 #include "llvm/Target/TargetData.h"
 #include "llvm/Transforms/Utils/Local.h"
 #include "llvm/Support/Debug.h"
+#include "llvm/Support/RecyclingAllocator.h"
 #include "llvm/ADT/ScopedHashTable.h"
 #include "llvm/ADT/Statistic.h"
 using namespace llvm;
@@ -132,7 +133,11 @@ class EarlyCSE : public FunctionPass {
 public:
   const TargetData *TD;
   DominatorTree *DT;
-  ScopedHashTable<InstValue, Instruction*> *AvailableValues;
+  typedef RecyclingAllocator<BumpPtrAllocator,
+                      ScopedHashTableVal<InstValue, Instruction*> > AllocatorTy;
+  typedef ScopedHashTable<InstValue, Instruction*, DenseMapInfo<InstValue>,
+                          AllocatorTy> ScopedHTType;
+  ScopedHTType *AvailableValues;
   
   static char ID;
   explicit EarlyCSE()
@@ -165,11 +170,10 @@ INITIALIZE_PASS_BEGIN(EarlyCSE, "early-cse", "Early CSE", false, false)
 INITIALIZE_PASS_DEPENDENCY(DominatorTree)
 INITIALIZE_PASS_END(EarlyCSE, "early-cse", "Early CSE", false, false)
 
-// FIXME: Should bump pointer allocate entries in scoped hash table.
-
 bool EarlyCSE::processNode(DomTreeNode *Node) {
   // Define a scope in the scoped hash table.
-  ScopedHashTableScope<InstValue, Instruction*> Scope(*AvailableValues);
+  ScopedHashTableScope<InstValue, Instruction*, DenseMapInfo<InstValue>,
+                       AllocatorTy> Scope(*AvailableValues);
   
   BasicBlock *BB = Node->getBlock();
   
@@ -228,7 +232,7 @@ bool EarlyCSE::processNode(DomTreeNode *Node) {
 bool EarlyCSE::runOnFunction(Function &F) {
   TD = getAnalysisIfAvailable<TargetData>();
   DT = &getAnalysis<DominatorTree>();
-  ScopedHashTable<InstValue, Instruction*> AVTable;
+  ScopedHTType AVTable;
   AvailableValues = &AVTable;
   return processNode(DT->getRootNode());
 }