Allocate nodes for the scoped hash table from a recyling bump pointer

allocator.  This speeds up early cse by about 20%

llvm-svn: 122723
This commit is contained in:
Chris Lattner 2011-01-03 01:42:46 +00:00
parent 2f1c34f15e
commit d815f69b30
1 changed files with 9 additions and 5 deletions

View 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());
}