projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
The induction-pointer work is inspired by a research paper. This commit adds a reference.
[oota-llvm.git]
/
lib
/
Transforms
/
Utils
/
Mem2Reg.cpp
diff --git
a/lib/Transforms/Utils/Mem2Reg.cpp
b/lib/Transforms/Utils/Mem2Reg.cpp
index 99203b662120eaa697ee6a243d2b76122d810010..f4ca81af6d87d6314ea5f2f41a8c52bff0a8d51c 100644
(file)
--- a/
lib/Transforms/Utils/Mem2Reg.cpp
+++ b/
lib/Transforms/Utils/Mem2Reg.cpp
@@
-27,18
+27,17
@@
STATISTIC(NumPromoted, "Number of alloca's promoted");
namespace {
struct PromotePass : public FunctionPass {
static char ID; // Pass identification, replacement for typeid
namespace {
struct PromotePass : public FunctionPass {
static char ID; // Pass identification, replacement for typeid
- PromotePass() : FunctionPass(&ID) {}
+ PromotePass() : FunctionPass(ID) {
+ initializePromotePassPass(*PassRegistry::getPassRegistry());
+ }
// runOnFunction - To run this pass, first we calculate the alloca
// instructions that are safe for promotion, then we promote each one.
//
virtual bool runOnFunction(Function &F);
// runOnFunction - To run this pass, first we calculate the alloca
// instructions that are safe for promotion, then we promote each one.
//
virtual bool runOnFunction(Function &F);
- // getAnalysisUsage - We need dominance frontiers
- //
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<DominatorTree>();
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<DominatorTree>();
- AU.addRequired<DominanceFrontier>();
AU.setPreservesCFG();
// This is a cluster of orthogonal Transforms
AU.addPreserved<UnifyFunctionExitNodes>();
AU.setPreservesCFG();
// This is a cluster of orthogonal Transforms
AU.addPreserved<UnifyFunctionExitNodes>();
@@
-49,7
+48,11
@@
namespace {
} // end of anonymous namespace
char PromotePass::ID = 0;
} // end of anonymous namespace
char PromotePass::ID = 0;
-static RegisterPass<PromotePass> X("mem2reg", "Promote Memory to Register");
+INITIALIZE_PASS_BEGIN(PromotePass, "mem2reg", "Promote Memory to Register",
+ false, false)
+INITIALIZE_PASS_DEPENDENCY(DominatorTree)
+INITIALIZE_PASS_END(PromotePass, "mem2reg", "Promote Memory to Register",
+ false, false)
bool PromotePass::runOnFunction(Function &F) {
std::vector<AllocaInst*> Allocas;
bool PromotePass::runOnFunction(Function &F) {
std::vector<AllocaInst*> Allocas;
@@
-59,7
+62,6
@@
bool PromotePass::runOnFunction(Function &F) {
bool Changed = false;
DominatorTree &DT = getAnalysis<DominatorTree>();
bool Changed = false;
DominatorTree &DT = getAnalysis<DominatorTree>();
- DominanceFrontier &DF = getAnalysis<DominanceFrontier>();
while (1) {
Allocas.clear();
while (1) {
Allocas.clear();
@@
-73,7
+75,7
@@
bool PromotePass::runOnFunction(Function &F) {
if (Allocas.empty()) break;
if (Allocas.empty()) break;
- PromoteMemToReg(Allocas, DT
, DF
);
+ PromoteMemToReg(Allocas, DT);
NumPromoted += Allocas.size();
Changed = true;
}
NumPromoted += Allocas.size();
Changed = true;
}
@@
-81,8
+83,6
@@
bool PromotePass::runOnFunction(Function &F) {
return Changed;
}
return Changed;
}
-// Publically exposed interface to pass...
-const PassInfo *const llvm::PromoteMemoryToRegisterID = &X;
// createPromoteMemoryToRegister - Provide an entry point to create this pass.
//
FunctionPass *llvm::createPromoteMemoryToRegisterPass() {
// createPromoteMemoryToRegister - Provide an entry point to create this pass.
//
FunctionPass *llvm::createPromoteMemoryToRegisterPass() {