forked from OSchip/llvm-project
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:
parent
2f1c34f15e
commit
d815f69b30
|
@ -21,6 +21,7 @@
|
||||||
#include "llvm/Target/TargetData.h"
|
#include "llvm/Target/TargetData.h"
|
||||||
#include "llvm/Transforms/Utils/Local.h"
|
#include "llvm/Transforms/Utils/Local.h"
|
||||||
#include "llvm/Support/Debug.h"
|
#include "llvm/Support/Debug.h"
|
||||||
|
#include "llvm/Support/RecyclingAllocator.h"
|
||||||
#include "llvm/ADT/ScopedHashTable.h"
|
#include "llvm/ADT/ScopedHashTable.h"
|
||||||
#include "llvm/ADT/Statistic.h"
|
#include "llvm/ADT/Statistic.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
@ -132,7 +133,11 @@ class EarlyCSE : public FunctionPass {
|
||||||
public:
|
public:
|
||||||
const TargetData *TD;
|
const TargetData *TD;
|
||||||
DominatorTree *DT;
|
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;
|
static char ID;
|
||||||
explicit EarlyCSE()
|
explicit EarlyCSE()
|
||||||
|
@ -165,11 +170,10 @@ INITIALIZE_PASS_BEGIN(EarlyCSE, "early-cse", "Early CSE", false, false)
|
||||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||||
INITIALIZE_PASS_END(EarlyCSE, "early-cse", "Early CSE", false, false)
|
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) {
|
bool EarlyCSE::processNode(DomTreeNode *Node) {
|
||||||
// Define a scope in the scoped hash table.
|
// 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();
|
BasicBlock *BB = Node->getBlock();
|
||||||
|
|
||||||
|
@ -228,7 +232,7 @@ bool EarlyCSE::processNode(DomTreeNode *Node) {
|
||||||
bool EarlyCSE::runOnFunction(Function &F) {
|
bool EarlyCSE::runOnFunction(Function &F) {
|
||||||
TD = getAnalysisIfAvailable<TargetData>();
|
TD = getAnalysisIfAvailable<TargetData>();
|
||||||
DT = &getAnalysis<DominatorTree>();
|
DT = &getAnalysis<DominatorTree>();
|
||||||
ScopedHashTable<InstValue, Instruction*> AVTable;
|
ScopedHTType AVTable;
|
||||||
AvailableValues = &AVTable;
|
AvailableValues = &AVTable;
|
||||||
return processNode(DT->getRootNode());
|
return processNode(DT->getRootNode());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue