mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-29 22:30:33 +00:00
Begin adding static dependence information to passes, which will allow us to
perform initialization without static constructors AND without explicit initialization by the client. For the moment, passes are required to initialize both their (potential) dependencies and any passes they preserve. I hope to be able to relax the latter requirement in the future. llvm-svn: 116334
This commit is contained in:
parent
303692631e
commit
63f757463c
@ -130,12 +130,32 @@ private:
|
||||
|
||||
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis) \
|
||||
void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
|
||||
static bool initialized = false; \
|
||||
if (initialized) return; \
|
||||
initialized = true; \
|
||||
PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
|
||||
PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
|
||||
Registry.registerPass(*PI); \
|
||||
} \
|
||||
static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis);
|
||||
|
||||
#define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis) \
|
||||
void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
|
||||
static bool initialized = false; \
|
||||
if (initialized) return; \
|
||||
initialized = true;
|
||||
|
||||
#define INITIALIZE_PASS_DEPENDENCY(depName) \
|
||||
initialize##depName##Pass(Registry);
|
||||
#define INITIALIZE_AG_DEPENDENCY(depName) \
|
||||
initialize##depName##AnalysisGroup(Registry);
|
||||
|
||||
#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis) \
|
||||
PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
|
||||
PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
|
||||
Registry.registerPass(*PI); \
|
||||
} \
|
||||
static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis);
|
||||
|
||||
|
||||
template<typename PassName>
|
||||
Pass *callDefaultCtor() { return new PassName(); }
|
||||
@ -220,6 +240,7 @@ struct RegisterAnalysisGroup : public RegisterAGBase {
|
||||
|
||||
#define INITIALIZE_AG_PASS(passName, agName, arg, name, cfg, analysis, def) \
|
||||
void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
|
||||
initialize##agName##AnalysisGroup(Registry); \
|
||||
PassInfo *PI = new PassInfo(name, arg, & passName ::ID, \
|
||||
PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
|
||||
Registry.registerPass(*PI); \
|
||||
@ -230,6 +251,21 @@ struct RegisterAnalysisGroup : public RegisterAGBase {
|
||||
static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis); \
|
||||
static RegisterAnalysisGroup<agName, def> passName ## _ag(passName ## _info);
|
||||
|
||||
#define INITIALIZE_AG_PASS_BEGIN(passName, agName, arg, n, cfg, analysis, def) \
|
||||
void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
|
||||
initialize##agName##AnalysisGroup(Registry);
|
||||
|
||||
#define INITIALIZE_AG_PASS_END(passName, agName, arg, n, cfg, analysis, def) \
|
||||
PassInfo *PI = new PassInfo(n, arg, & passName ::ID, \
|
||||
PassInfo::NormalCtor_t(callDefaultCtor< passName >), cfg, analysis); \
|
||||
Registry.registerPass(*PI); \
|
||||
\
|
||||
PassInfo *AI = new PassInfo(n, & agName :: ID); \
|
||||
Registry.registerAnalysisGroup(& agName ::ID, & passName ::ID, *AI, def); \
|
||||
} \
|
||||
static RegisterPass<passName> passName ## _info(arg, n, cfg, analysis); \
|
||||
static RegisterAnalysisGroup<agName, def> passName ## _ag(passName ## _info);
|
||||
|
||||
//===---------------------------------------------------------------------------
|
||||
/// PassRegistrationListener class - This class is meant to be derived from by
|
||||
/// clients that are interested in which passes get registered and unregistered
|
||||
|
@ -74,7 +74,10 @@ namespace {
|
||||
}
|
||||
|
||||
char AAEval::ID = 0;
|
||||
INITIALIZE_PASS(AAEval, "aa-eval",
|
||||
INITIALIZE_PASS_BEGIN(AAEval, "aa-eval",
|
||||
"Exhaustive Alias Analysis Precision Evaluator", false, true)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(AAEval, "aa-eval",
|
||||
"Exhaustive Alias Analysis Precision Evaluator", false, true)
|
||||
|
||||
FunctionPass *llvm::createAAEvalPass() { return new AAEval(); }
|
||||
|
@ -607,5 +607,8 @@ namespace {
|
||||
}
|
||||
|
||||
char AliasSetPrinter::ID = 0;
|
||||
INITIALIZE_PASS(AliasSetPrinter, "print-alias-sets",
|
||||
INITIALIZE_PASS_BEGIN(AliasSetPrinter, "print-alias-sets",
|
||||
"Alias Set Printer", false, true)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(AliasSetPrinter, "print-alias-sets",
|
||||
"Alias Set Printer", false, true)
|
||||
|
@ -176,7 +176,11 @@ namespace {
|
||||
}
|
||||
|
||||
char GlobalsModRef::ID = 0;
|
||||
INITIALIZE_AG_PASS(GlobalsModRef, AliasAnalysis,
|
||||
INITIALIZE_AG_PASS_BEGIN(GlobalsModRef, AliasAnalysis,
|
||||
"globalsmodref-aa", "Simple mod/ref analysis for globals",
|
||||
false, true, false)
|
||||
INITIALIZE_AG_DEPENDENCY(CallGraph)
|
||||
INITIALIZE_AG_PASS_END(GlobalsModRef, AliasAnalysis,
|
||||
"globalsmodref-aa", "Simple mod/ref analysis for globals",
|
||||
false, true, false)
|
||||
|
||||
|
@ -28,7 +28,13 @@
|
||||
using namespace llvm;
|
||||
|
||||
char IVUsers::ID = 0;
|
||||
INITIALIZE_PASS(IVUsers, "iv-users", "Induction Variable Users", false, true)
|
||||
INITIALIZE_PASS_BEGIN(IVUsers, "iv-users",
|
||||
"Induction Variable Users", false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_END(IVUsers, "iv-users",
|
||||
"Induction Variable Users", false, true)
|
||||
|
||||
Pass *llvm::createIVUsersPass() {
|
||||
return new IVUsers();
|
||||
|
@ -145,7 +145,12 @@ namespace {
|
||||
}
|
||||
|
||||
char Lint::ID = 0;
|
||||
INITIALIZE_PASS(Lint, "lint", "Statically lint-checks LLVM IR", false, true)
|
||||
INITIALIZE_PASS_BEGIN(Lint, "lint", "Statically lint-checks LLVM IR",
|
||||
false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(Lint, "lint", "Statically lint-checks LLVM IR",
|
||||
false, true)
|
||||
|
||||
// Assert - We know that cond should be true, if not print an error message.
|
||||
#define Assert(C, M) \
|
||||
|
@ -22,7 +22,11 @@ namespace llvm {
|
||||
}
|
||||
|
||||
char LiveValues::ID = 0;
|
||||
INITIALIZE_PASS(LiveValues, "live-values",
|
||||
INITIALIZE_PASS_BEGIN(LiveValues, "live-values",
|
||||
"Value Liveness Analysis", false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_END(LiveValues, "live-values",
|
||||
"Value Liveness Analysis", false, true)
|
||||
|
||||
LiveValues::LiveValues() : FunctionPass(ID) {}
|
||||
|
@ -46,7 +46,11 @@ LoopPass *llvm::createLoopDependenceAnalysisPass() {
|
||||
return new LoopDependenceAnalysis();
|
||||
}
|
||||
|
||||
INITIALIZE_PASS(LoopDependenceAnalysis, "lda",
|
||||
INITIALIZE_PASS_BEGIN(LoopDependenceAnalysis, "lda",
|
||||
"Loop Dependence Analysis", false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(LoopDependenceAnalysis, "lda",
|
||||
"Loop Dependence Analysis", false, true)
|
||||
char LoopDependenceAnalysis::ID = 0;
|
||||
|
||||
|
@ -38,7 +38,9 @@ VerifyLoopInfoX("verify-loop-info", cl::location(VerifyLoopInfo),
|
||||
cl::desc("Verify loop info (time consuming)"));
|
||||
|
||||
char LoopInfo::ID = 0;
|
||||
INITIALIZE_PASS(LoopInfo, "loops", "Natural Loop Information", true, true)
|
||||
INITIALIZE_PASS_BEGIN(LoopInfo, "loops", "Natural Loop Information", true, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_END(LoopInfo, "loops", "Natural Loop Information", true, true)
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Loop implementation
|
||||
|
@ -50,8 +50,11 @@ namespace {
|
||||
}
|
||||
|
||||
char MemDepPrinter::ID = 0;
|
||||
INITIALIZE_PASS(MemDepPrinter, "print-memdeps", "Print MemDeps of function",
|
||||
false, true)
|
||||
INITIALIZE_PASS_BEGIN(MemDepPrinter, "print-memdeps",
|
||||
"Print MemDeps of function", false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
|
||||
INITIALIZE_PASS_END(MemDepPrinter, "print-memdeps",
|
||||
"Print MemDeps of function", false, true)
|
||||
|
||||
FunctionPass *llvm::createMemDepPrinter() {
|
||||
return new MemDepPrinter();
|
||||
|
@ -47,8 +47,11 @@ STATISTIC(NumCacheCompleteNonLocalPtr,
|
||||
char MemoryDependenceAnalysis::ID = 0;
|
||||
|
||||
// Register this pass...
|
||||
INITIALIZE_PASS(MemoryDependenceAnalysis, "memdep",
|
||||
INITIALIZE_PASS_BEGIN(MemoryDependenceAnalysis, "memdep",
|
||||
"Memory Dependence Analysis", false, true)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(MemoryDependenceAnalysis, "memdep",
|
||||
"Memory Dependence Analysis", false, true)
|
||||
|
||||
MemoryDependenceAnalysis::MemoryDependenceAnalysis()
|
||||
: FunctionPass(ID), PredCache(0) {
|
||||
|
@ -53,7 +53,10 @@ FunctionPass* llvm::createPostDomTree() {
|
||||
// PostDominanceFrontier Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
INITIALIZE_PASS(PostDominanceFrontier, "postdomfrontier",
|
||||
INITIALIZE_PASS_BEGIN(PostDominanceFrontier, "postdomfrontier",
|
||||
"Post-Dominance Frontier Construction", true, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(PostDominatorTree)
|
||||
INITIALIZE_PASS_END(PostDominanceFrontier, "postdomfrontier",
|
||||
"Post-Dominance Frontier Construction", true, true)
|
||||
|
||||
const DominanceFrontier::DomSetType &
|
||||
|
@ -72,7 +72,10 @@ namespace {
|
||||
} // End of anonymous namespace
|
||||
|
||||
char ProfileEstimatorPass::ID = 0;
|
||||
INITIALIZE_AG_PASS(ProfileEstimatorPass, ProfileInfo, "profile-estimator",
|
||||
INITIALIZE_AG_PASS_BEGIN(ProfileEstimatorPass, ProfileInfo, "profile-estimator",
|
||||
"Estimate profiling information", false, true, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_AG_PASS_END(ProfileEstimatorPass, ProfileInfo, "profile-estimator",
|
||||
"Estimate profiling information", false, true, false)
|
||||
|
||||
namespace llvm {
|
||||
|
@ -366,7 +366,10 @@ namespace llvm {
|
||||
char ProfileVerifierPassT<FType, BType>::ID = 0;
|
||||
}
|
||||
|
||||
INITIALIZE_PASS(ProfileVerifierPass, "profile-verifier",
|
||||
INITIALIZE_PASS_BEGIN(ProfileVerifierPass, "profile-verifier",
|
||||
"Verify profiling information", false, true)
|
||||
INITIALIZE_AG_DEPENDENCY(ProfileInfo)
|
||||
INITIALIZE_PASS_END(ProfileVerifierPass, "profile-verifier",
|
||||
"Verify profiling information", false, true)
|
||||
|
||||
namespace llvm {
|
||||
|
@ -734,7 +734,12 @@ RegionInfo::getCommonRegion(SmallVectorImpl<BasicBlock*> &BBs) const {
|
||||
}
|
||||
|
||||
char RegionInfo::ID = 0;
|
||||
INITIALIZE_PASS(RegionInfo, "regions",
|
||||
INITIALIZE_PASS_BEGIN(RegionInfo, "regions",
|
||||
"Detect single entry single exit regions", true, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(PostDominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
|
||||
INITIALIZE_PASS_END(RegionInfo, "regions",
|
||||
"Detect single entry single exit regions", true, true)
|
||||
|
||||
// Create methods available outside of this file, to use them
|
||||
|
@ -103,7 +103,11 @@ MaxBruteForceIterations("scalar-evolution-max-iterations", cl::ReallyHidden,
|
||||
"derived loop"),
|
||||
cl::init(100));
|
||||
|
||||
INITIALIZE_PASS(ScalarEvolution, "scalar-evolution",
|
||||
INITIALIZE_PASS_BEGIN(ScalarEvolution, "scalar-evolution",
|
||||
"Scalar Evolution Analysis", false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_END(ScalarEvolution, "scalar-evolution",
|
||||
"Scalar Evolution Analysis", false, true)
|
||||
char ScalarEvolution::ID = 0;
|
||||
|
||||
|
@ -57,8 +57,11 @@ namespace {
|
||||
|
||||
// Register this pass...
|
||||
char ScalarEvolutionAliasAnalysis::ID = 0;
|
||||
INITIALIZE_AG_PASS(ScalarEvolutionAliasAnalysis, AliasAnalysis, "scev-aa",
|
||||
INITIALIZE_AG_PASS_BEGIN(ScalarEvolutionAliasAnalysis, AliasAnalysis, "scev-aa",
|
||||
"ScalarEvolution-based Alias Analysis", false, true, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_AG_PASS_END(ScalarEvolutionAliasAnalysis, AliasAnalysis, "scev-aa",
|
||||
"ScalarEvolution-based Alias Analysis", false, true, false)
|
||||
|
||||
FunctionPass *llvm::createScalarEvolutionAliasAnalysisPass() {
|
||||
return new ScalarEvolutionAliasAnalysis();
|
||||
|
@ -25,7 +25,11 @@
|
||||
using namespace llvm;
|
||||
|
||||
char CalculateSpillWeights::ID = 0;
|
||||
INITIALIZE_PASS(CalculateSpillWeights, "calcspillweights",
|
||||
INITIALIZE_PASS_BEGIN(CalculateSpillWeights, "calcspillweights",
|
||||
"Calculate spill weights", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_END(CalculateSpillWeights, "calcspillweights",
|
||||
"Calculate spill weights", false, false)
|
||||
|
||||
void CalculateSpillWeights::getAnalysisUsage(AnalysisUsage &au) const {
|
||||
|
@ -245,7 +245,9 @@ namespace {
|
||||
char IfConverter::ID = 0;
|
||||
}
|
||||
|
||||
INITIALIZE_PASS(IfConverter, "if-converter", "If Converter", false, false)
|
||||
INITIALIZE_PASS_BEGIN(IfConverter, "if-converter", "If Converter", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_END(IfConverter, "if-converter", "If Converter", false, false)
|
||||
|
||||
FunctionPass *llvm::createIfConverterPass() { return new IfConverter(); }
|
||||
|
||||
|
@ -55,7 +55,16 @@ STATISTIC(numFolds , "Number of loads/stores folded into instructions");
|
||||
STATISTIC(numSplits , "Number of intervals split");
|
||||
|
||||
char LiveIntervals::ID = 0;
|
||||
INITIALIZE_PASS(LiveIntervals, "liveintervals",
|
||||
INITIALIZE_PASS_BEGIN(LiveIntervals, "liveintervals",
|
||||
"Live Interval Analysis", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveVariables)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(PHIElimination)
|
||||
INITIALIZE_PASS_DEPENDENCY(TwoAddressInstructionPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(ProcessImplicitDefs)
|
||||
INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(LiveIntervals, "liveintervals",
|
||||
"Live Interval Analysis", false, false)
|
||||
|
||||
void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
|
@ -42,7 +42,10 @@
|
||||
using namespace llvm;
|
||||
|
||||
char LiveVariables::ID = 0;
|
||||
INITIALIZE_PASS(LiveVariables, "livevars",
|
||||
INITIALIZE_PASS_BEGIN(LiveVariables, "livevars",
|
||||
"Live Variable Analysis", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(UnreachableMachineBlockElim)
|
||||
INITIALIZE_PASS_END(LiveVariables, "livevars",
|
||||
"Live Variable Analysis", false, false)
|
||||
|
||||
|
||||
|
@ -91,7 +91,11 @@ namespace {
|
||||
} // end anonymous namespace
|
||||
|
||||
char MachineCSE::ID = 0;
|
||||
INITIALIZE_PASS(MachineCSE, "machine-cse",
|
||||
INITIALIZE_PASS_BEGIN(MachineCSE, "machine-cse",
|
||||
"Machine Common Subexpression Elimination", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(MachineCSE, "machine-cse",
|
||||
"Machine Common Subexpression Elimination", false, false)
|
||||
|
||||
FunctionPass *llvm::createMachineCSEPass() { return new MachineCSE(); }
|
||||
|
@ -189,7 +189,12 @@ namespace {
|
||||
} // end anonymous namespace
|
||||
|
||||
char MachineLICM::ID = 0;
|
||||
INITIALIZE_PASS(MachineLICM, "machinelicm",
|
||||
INITIALIZE_PASS_BEGIN(MachineLICM, "machinelicm",
|
||||
"Machine Loop Invariant Code Motion", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(MachineLICM, "machinelicm",
|
||||
"Machine Loop Invariant Code Motion", false, false)
|
||||
|
||||
FunctionPass *llvm::createMachineLICMPass(bool PreRegAlloc) {
|
||||
|
@ -30,7 +30,10 @@ TEMPLATE_INSTANTIATION(MLIB);
|
||||
}
|
||||
|
||||
char MachineLoopInfo::ID = 0;
|
||||
INITIALIZE_PASS(MachineLoopInfo, "machine-loops",
|
||||
INITIALIZE_PASS_BEGIN(MachineLoopInfo, "machine-loops",
|
||||
"Machine Natural Loop Construction", true, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||
INITIALIZE_PASS_END(MachineLoopInfo, "machine-loops",
|
||||
"Machine Natural Loop Construction", true, true)
|
||||
|
||||
char &llvm::MachineLoopInfoID = MachineLoopInfo::ID;
|
||||
|
@ -94,7 +94,12 @@ namespace {
|
||||
} // end anonymous namespace
|
||||
|
||||
char MachineSinking::ID = 0;
|
||||
INITIALIZE_PASS(MachineSinking, "machine-sink",
|
||||
INITIALIZE_PASS_BEGIN(MachineSinking, "machine-sink",
|
||||
"Machine code sinking", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(MachineSinking, "machine-sink",
|
||||
"Machine code sinking", false, false)
|
||||
|
||||
FunctionPass *llvm::createMachineSinkingPass() { return new MachineSinking(); }
|
||||
|
@ -84,7 +84,10 @@ namespace {
|
||||
}
|
||||
|
||||
char PeepholeOptimizer::ID = 0;
|
||||
INITIALIZE_PASS(PeepholeOptimizer, "peephole-opts",
|
||||
INITIALIZE_PASS_BEGIN(PeepholeOptimizer, "peephole-opts",
|
||||
"Peephole Optimizations", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||
INITIALIZE_PASS_END(PeepholeOptimizer, "peephole-opts",
|
||||
"Peephole Optimizations", false, false)
|
||||
|
||||
FunctionPass *llvm::createPeepholeOptimizerPass() {
|
||||
|
@ -203,7 +203,16 @@ namespace {
|
||||
|
||||
char PreAllocSplitting::ID = 0;
|
||||
|
||||
INITIALIZE_PASS(PreAllocSplitting, "pre-alloc-splitting",
|
||||
INITIALIZE_PASS_BEGIN(PreAllocSplitting, "pre-alloc-splitting",
|
||||
"Pre-Register Allocation Live Interval Splitting",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveStacks)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(VirtRegMap)
|
||||
INITIALIZE_PASS_END(PreAllocSplitting, "pre-alloc-splitting",
|
||||
"Pre-Register Allocation Live Interval Splitting",
|
||||
false, false)
|
||||
|
||||
|
@ -26,7 +26,10 @@
|
||||
using namespace llvm;
|
||||
|
||||
char ProcessImplicitDefs::ID = 0;
|
||||
INITIALIZE_PASS(ProcessImplicitDefs, "processimpdefs",
|
||||
INITIALIZE_PASS_BEGIN(ProcessImplicitDefs, "processimpdefs",
|
||||
"Process Implicit Definitions.", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveVariables)
|
||||
INITIALIZE_PASS_END(ProcessImplicitDefs, "processimpdefs",
|
||||
"Process Implicit Definitions.", false, false)
|
||||
|
||||
void ProcessImplicitDefs::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
|
@ -44,7 +44,11 @@ using namespace llvm;
|
||||
|
||||
char PEI::ID = 0;
|
||||
|
||||
INITIALIZE_PASS(PEI, "prologepilog",
|
||||
INITIALIZE_PASS_BEGIN(PEI, "prologepilog",
|
||||
"Prologue/Epilogue Insertion", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||
INITIALIZE_PASS_END(PEI, "prologepilog",
|
||||
"Prologue/Epilogue Insertion", false, false)
|
||||
|
||||
STATISTIC(NumVirtualFrameRegs, "Number of virtual frame regs encountered");
|
||||
|
@ -370,7 +370,17 @@ namespace {
|
||||
char RALinScan::ID = 0;
|
||||
}
|
||||
|
||||
INITIALIZE_PASS(RALinScan, "linearscan-regalloc",
|
||||
INITIALIZE_PASS_BEGIN(RALinScan, "linearscan-regalloc",
|
||||
"Linear Scan Register Allocator", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
|
||||
INITIALIZE_PASS_DEPENDENCY(StrongPHIElimination)
|
||||
INITIALIZE_PASS_DEPENDENCY(CalculateSpillWeights)
|
||||
INITIALIZE_PASS_DEPENDENCY(PreAllocSplitting)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveStacks)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(VirtRegMap)
|
||||
INITIALIZE_AG_DEPENDENCY(RegisterCoalescer)
|
||||
INITIALIZE_PASS_END(RALinScan, "linearscan-regalloc",
|
||||
"Linear Scan Register Allocator", false, false)
|
||||
|
||||
void RALinScan::ComputeRelatedRegClasses() {
|
||||
|
@ -30,7 +30,12 @@
|
||||
using namespace llvm;
|
||||
|
||||
char RenderMachineFunction::ID = 0;
|
||||
INITIALIZE_PASS(RenderMachineFunction, "rendermf",
|
||||
INITIALIZE_PASS_BEGIN(RenderMachineFunction, "rendermf",
|
||||
"Render machine functions (and related info) to HTML pages",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
|
||||
INITIALIZE_PASS_END(RenderMachineFunction, "rendermf",
|
||||
"Render machine functions (and related info) to HTML pages",
|
||||
false, false)
|
||||
|
||||
|
@ -64,7 +64,17 @@ DisablePhysicalJoin("disable-physical-join",
|
||||
cl::desc("Avoid coalescing physical register copies"),
|
||||
cl::init(false), cl::Hidden);
|
||||
|
||||
INITIALIZE_AG_PASS(SimpleRegisterCoalescing, RegisterCoalescer,
|
||||
INITIALIZE_AG_PASS_BEGIN(SimpleRegisterCoalescing, RegisterCoalescer,
|
||||
"simple-register-coalescing", "Simple Register Coalescing",
|
||||
false, false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
|
||||
INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(StrongPHIElimination)
|
||||
INITIALIZE_PASS_DEPENDENCY(PHIElimination)
|
||||
INITIALIZE_PASS_DEPENDENCY(TwoAddressInstructionPass)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_AG_PASS_END(SimpleRegisterCoalescing, RegisterCoalescer,
|
||||
"simple-register-coalescing", "Simple Register Coalescing",
|
||||
false, false, true)
|
||||
|
||||
|
@ -29,7 +29,13 @@
|
||||
using namespace llvm;
|
||||
|
||||
char LoopSplitter::ID = 0;
|
||||
INITIALIZE_PASS(LoopSplitter, "loop-splitting",
|
||||
INITIALIZE_PASS_BEGIN(LoopSplitter, "loop-splitting",
|
||||
"Split virtual regists across loop boundaries.", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
|
||||
INITIALIZE_PASS_END(LoopSplitter, "loop-splitting",
|
||||
"Split virtual regists across loop boundaries.", false, false)
|
||||
|
||||
namespace llvm {
|
||||
|
@ -145,7 +145,13 @@ namespace {
|
||||
|
||||
char StackSlotColoring::ID = 0;
|
||||
|
||||
INITIALIZE_PASS(StackSlotColoring, "stack-slot-coloring",
|
||||
INITIALIZE_PASS_BEGIN(StackSlotColoring, "stack-slot-coloring",
|
||||
"Stack Slot Coloring", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveStacks)
|
||||
INITIALIZE_PASS_DEPENDENCY(VirtRegMap)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
|
||||
INITIALIZE_PASS_END(StackSlotColoring, "stack-slot-coloring",
|
||||
"Stack Slot Coloring", false, false)
|
||||
|
||||
FunctionPass *llvm::createStackSlotColoringPass(bool RegColor) {
|
||||
|
@ -150,7 +150,12 @@ namespace {
|
||||
}
|
||||
|
||||
char StrongPHIElimination::ID = 0;
|
||||
INITIALIZE_PASS(StrongPHIElimination, "strong-phi-node-elimination",
|
||||
INITIALIZE_PASS_BEGIN(StrongPHIElimination, "strong-phi-node-elimination",
|
||||
"Eliminate PHI nodes for register allocation, intelligently", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
|
||||
INITIALIZE_PASS_DEPENDENCY(LiveIntervals)
|
||||
INITIALIZE_PASS_END(StrongPHIElimination, "strong-phi-node-elimination",
|
||||
"Eliminate PHI nodes for register allocation, intelligently", false, false)
|
||||
|
||||
char &llvm::StrongPHIEliminationID = StrongPHIElimination::ID;
|
||||
|
@ -159,7 +159,10 @@ namespace {
|
||||
}
|
||||
|
||||
char TwoAddressInstructionPass::ID = 0;
|
||||
INITIALIZE_PASS(TwoAddressInstructionPass, "twoaddressinstruction",
|
||||
INITIALIZE_PASS_BEGIN(TwoAddressInstructionPass, "twoaddressinstruction",
|
||||
"Two-Address instruction pass", false, false)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(TwoAddressInstructionPass, "twoaddressinstruction",
|
||||
"Two-Address instruction pass", false, false)
|
||||
|
||||
char &llvm::TwoAddressInstructionPassID = TwoAddressInstructionPass::ID;
|
||||
|
@ -84,7 +84,10 @@ namespace {
|
||||
}
|
||||
|
||||
char ArgPromotion::ID = 0;
|
||||
INITIALIZE_PASS(ArgPromotion, "argpromotion",
|
||||
INITIALIZE_PASS_BEGIN(ArgPromotion, "argpromotion",
|
||||
"Promote 'by reference' arguments to scalars", false, false)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(ArgPromotion, "argpromotion",
|
||||
"Promote 'by reference' arguments to scalars", false, false)
|
||||
|
||||
Pass *llvm::createArgumentPromotionPass(unsigned maxElements) {
|
||||
|
@ -45,7 +45,10 @@ namespace {
|
||||
}
|
||||
|
||||
char DTE::ID = 0;
|
||||
INITIALIZE_PASS(DTE, "deadtypeelim", "Dead Type Elimination", false, false)
|
||||
INITIALIZE_PASS_BEGIN(DTE, "deadtypeelim", "Dead Type Elimination",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(FindUsedTypes)
|
||||
INITIALIZE_PASS_END(DTE, "deadtypeelim", "Dead Type Elimination", false, false)
|
||||
|
||||
ModulePass *llvm::createDeadTypeEliminationPass() {
|
||||
return new DTE();
|
||||
|
@ -50,7 +50,12 @@ namespace {
|
||||
}
|
||||
|
||||
char LoopExtractor::ID = 0;
|
||||
INITIALIZE_PASS(LoopExtractor, "loop-extract",
|
||||
INITIALIZE_PASS_BEGIN(LoopExtractor, "loop-extract",
|
||||
"Extract loops into new functions", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(BreakCriticalEdges)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_END(LoopExtractor, "loop-extract",
|
||||
"Extract loops into new functions", false, false)
|
||||
|
||||
namespace {
|
||||
|
@ -50,7 +50,12 @@ namespace {
|
||||
}
|
||||
|
||||
char OptimalEdgeProfiler::ID = 0;
|
||||
INITIALIZE_PASS(OptimalEdgeProfiler, "insert-optimal-edge-profiling",
|
||||
INITIALIZE_PASS_BEGIN(OptimalEdgeProfiler, "insert-optimal-edge-profiling",
|
||||
"Insert optimal instrumentation for edge profiling",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(ProfileEstimatorPass)
|
||||
INITIALIZE_AG_DEPENDENCY(ProfileInfo)
|
||||
INITIALIZE_PASS_END(OptimalEdgeProfiler, "insert-optimal-edge-profiling",
|
||||
"Insert optimal instrumentation for edge profiling",
|
||||
false, false)
|
||||
|
||||
|
@ -74,7 +74,10 @@ namespace {
|
||||
}
|
||||
|
||||
char BlockPlacement::ID = 0;
|
||||
INITIALIZE_PASS(BlockPlacement, "block-placement",
|
||||
INITIALIZE_PASS_BEGIN(BlockPlacement, "block-placement",
|
||||
"Profile Guided Basic Block Placement", false, false)
|
||||
INITIALIZE_AG_DEPENDENCY(ProfileInfo)
|
||||
INITIALIZE_PASS_END(BlockPlacement, "block-placement",
|
||||
"Profile Guided Basic Block Placement", false, false)
|
||||
|
||||
FunctionPass *llvm::createBlockPlacementPass() { return new BlockPlacement(); }
|
||||
|
@ -50,7 +50,10 @@ namespace {
|
||||
}
|
||||
|
||||
char CorrelatedValuePropagation::ID = 0;
|
||||
INITIALIZE_PASS(CorrelatedValuePropagation, "correlated-propagation",
|
||||
INITIALIZE_PASS_BEGIN(CorrelatedValuePropagation, "correlated-propagation",
|
||||
"Value Propagation", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LazyValueInfo)
|
||||
INITIALIZE_PASS_END(CorrelatedValuePropagation, "correlated-propagation",
|
||||
"Value Propagation", false, false)
|
||||
|
||||
// Public interface to the Value Propagation pass
|
||||
|
@ -82,7 +82,11 @@ namespace {
|
||||
}
|
||||
|
||||
char DSE::ID = 0;
|
||||
INITIALIZE_PASS(DSE, "dse", "Dead Store Elimination", false, false)
|
||||
INITIALIZE_PASS_BEGIN(DSE, "dse", "Dead Store Elimination", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(DSE, "dse", "Dead Store Elimination", false, false)
|
||||
|
||||
FunctionPass *llvm::createDeadStoreEliminationPass() { return new DSE(); }
|
||||
|
||||
|
@ -713,7 +713,11 @@ FunctionPass *llvm::createGVNPass(bool NoLoads) {
|
||||
return new GVN(NoLoads);
|
||||
}
|
||||
|
||||
INITIALIZE_PASS(GVN, "gvn", "Global Value Numbering", false, false)
|
||||
INITIALIZE_PASS_BEGIN(GVN, "gvn", "Global Value Numbering", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(GVN, "gvn", "Global Value Numbering", false, false)
|
||||
|
||||
void GVN::dump(DenseMap<uint32_t, Value*>& d) {
|
||||
errs() << "{\n";
|
||||
|
@ -117,7 +117,15 @@ namespace {
|
||||
}
|
||||
|
||||
char IndVarSimplify::ID = 0;
|
||||
INITIALIZE_PASS(IndVarSimplify, "indvars",
|
||||
INITIALIZE_PASS_BEGIN(IndVarSimplify, "indvars",
|
||||
"Canonicalize Induction Variables", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_DEPENDENCY(IVUsers)
|
||||
INITIALIZE_PASS_END(IndVarSimplify, "indvars",
|
||||
"Canonicalize Induction Variables", false, false)
|
||||
|
||||
Pass *llvm::createIndVarSimplifyPass() {
|
||||
|
@ -121,7 +121,10 @@ namespace {
|
||||
}
|
||||
|
||||
char JumpThreading::ID = 0;
|
||||
INITIALIZE_PASS(JumpThreading, "jump-threading",
|
||||
INITIALIZE_PASS_BEGIN(JumpThreading, "jump-threading",
|
||||
"Jump Threading", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LazyValueInfo)
|
||||
INITIALIZE_PASS_END(JumpThreading, "jump-threading",
|
||||
"Jump Threading", false, false)
|
||||
|
||||
// Public interface to the Jump Threading pass
|
||||
|
@ -200,7 +200,13 @@ namespace {
|
||||
}
|
||||
|
||||
char LICM::ID = 0;
|
||||
INITIALIZE_PASS(LICM, "licm", "Loop Invariant Code Motion", false, false)
|
||||
INITIALIZE_PASS_BEGIN(LICM, "licm", "Loop Invariant Code Motion", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(LICM, "licm", "Loop Invariant Code Motion", false, false)
|
||||
|
||||
Pass *llvm::createLICMPass() { return new LICM(); }
|
||||
|
||||
|
@ -55,7 +55,15 @@ namespace {
|
||||
}
|
||||
|
||||
char LoopDeletion::ID = 0;
|
||||
INITIALIZE_PASS(LoopDeletion, "loop-deletion",
|
||||
INITIALIZE_PASS_BEGIN(LoopDeletion, "loop-deletion",
|
||||
"Delete dead loops", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
|
||||
INITIALIZE_PASS_END(LoopDeletion, "loop-deletion",
|
||||
"Delete dead loops", false, false)
|
||||
|
||||
Pass* llvm::createLoopDeletionPass() {
|
||||
|
@ -79,7 +79,14 @@ namespace {
|
||||
}
|
||||
|
||||
char LoopRotate::ID = 0;
|
||||
INITIALIZE_PASS(LoopRotate, "loop-rotate", "Rotate Loops", false, false)
|
||||
INITIALIZE_PASS_BEGIN(LoopRotate, "loop-rotate", "Rotate Loops", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_END(LoopRotate, "loop-rotate", "Rotate Loops", false, false)
|
||||
|
||||
Pass *llvm::createLoopRotatePass() { return new LoopRotate(); }
|
||||
|
||||
|
@ -3791,8 +3791,16 @@ private:
|
||||
}
|
||||
|
||||
char LoopStrengthReduce::ID = 0;
|
||||
INITIALIZE_PASS(LoopStrengthReduce, "loop-reduce",
|
||||
INITIALIZE_PASS_BEGIN(LoopStrengthReduce, "loop-reduce",
|
||||
"Loop Strength Reduction", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(IVUsers)
|
||||
INITIALIZE_PASS_END(LoopStrengthReduce, "loop-reduce",
|
||||
"Loop Strength Reduction", false, false)
|
||||
|
||||
|
||||
Pass *llvm::createLoopStrengthReducePass(const TargetLowering *TLI) {
|
||||
return new LoopStrengthReduce(TLI);
|
||||
|
@ -79,7 +79,13 @@ namespace {
|
||||
}
|
||||
|
||||
char LoopUnroll::ID = 0;
|
||||
INITIALIZE_PASS(LoopUnroll, "loop-unroll", "Unroll loops", false, false)
|
||||
INITIALIZE_PASS_BEGIN(LoopUnroll, "loop-unroll", "Unroll loops", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_END(LoopUnroll, "loop-unroll", "Unroll loops", false, false)
|
||||
|
||||
Pass *llvm::createLoopUnrollPass() { return new LoopUnroll(); }
|
||||
|
||||
|
@ -158,7 +158,14 @@ namespace {
|
||||
};
|
||||
}
|
||||
char LoopUnswitch::ID = 0;
|
||||
INITIALIZE_PASS(LoopUnswitch, "loop-unswitch", "Unswitch loops", false, false)
|
||||
INITIALIZE_PASS_BEGIN(LoopUnswitch, "loop-unswitch", "Unswitch loops",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_END(LoopUnswitch, "loop-unswitch", "Unswitch loops",
|
||||
false, false)
|
||||
|
||||
Pass *llvm::createLoopUnswitchPass(bool Os) {
|
||||
return new LoopUnswitch(Os);
|
||||
|
@ -331,8 +331,13 @@ namespace {
|
||||
// createMemCpyOptPass - The public interface to this file...
|
||||
FunctionPass *llvm::createMemCpyOptPass() { return new MemCpyOpt(); }
|
||||
|
||||
INITIALIZE_PASS(MemCpyOpt, "memcpyopt", "MemCpy Optimization", false, false)
|
||||
|
||||
INITIALIZE_PASS_BEGIN(MemCpyOpt, "memcpyopt", "MemCpy Optimization",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(MemCpyOpt, "memcpyopt", "MemCpy Optimization",
|
||||
false, false)
|
||||
|
||||
|
||||
/// processStore - When GVN is scanning forward over instructions, we look for
|
||||
|
@ -59,9 +59,11 @@ namespace {
|
||||
}
|
||||
|
||||
char RegToMem::ID = 0;
|
||||
INITIALIZE_PASS(RegToMem, "reg2mem", "Demote all values to stack slots",
|
||||
INITIALIZE_PASS_BEGIN(RegToMem, "reg2mem", "Demote all values to stack slots",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(BreakCriticalEdges)
|
||||
INITIALIZE_PASS_END(RegToMem, "reg2mem", "Demote all values to stack slots",
|
||||
false, false)
|
||||
|
||||
|
||||
bool RegToMem::runOnFunction(Function &F) {
|
||||
if (F.isDeclaration())
|
||||
|
@ -135,7 +135,11 @@ namespace {
|
||||
}
|
||||
|
||||
char SROA::ID = 0;
|
||||
INITIALIZE_PASS(SROA, "scalarrepl",
|
||||
INITIALIZE_PASS_BEGIN(SROA, "scalarrepl",
|
||||
"Scalar Replacement of Aggregates", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
|
||||
INITIALIZE_PASS_END(SROA, "scalarrepl",
|
||||
"Scalar Replacement of Aggregates", false, false)
|
||||
|
||||
// Public interface to the ScalarReplAggregates pass
|
||||
|
@ -56,7 +56,11 @@ namespace {
|
||||
} // end anonymous namespace
|
||||
|
||||
char Sinking::ID = 0;
|
||||
INITIALIZE_PASS(Sinking, "sink", "Code sinking", false, false)
|
||||
INITIALIZE_PASS_BEGIN(Sinking, "sink", "Code sinking", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(Sinking, "sink", "Code sinking", false, false)
|
||||
|
||||
FunctionPass *llvm::createSinkingPass() { return new Sinking(); }
|
||||
|
||||
|
@ -90,7 +90,13 @@ namespace {
|
||||
}
|
||||
|
||||
char LCSSA::ID = 0;
|
||||
INITIALIZE_PASS(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
|
||||
INITIALIZE_PASS_BEGIN(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_END(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
|
||||
|
||||
Pass *llvm::createLCSSAPass() { return new LCSSA(); }
|
||||
char &llvm::LCSSAID = LCSSA::ID;
|
||||
|
@ -107,7 +107,16 @@ namespace {
|
||||
}
|
||||
|
||||
char LoopSimplify::ID = 0;
|
||||
INITIALIZE_PASS(LoopSimplify, "loopsimplify",
|
||||
INITIALIZE_PASS_BEGIN(LoopSimplify, "loopsimplify",
|
||||
"Canonicalize natural loops", true, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(BreakCriticalEdges)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(LoopSimplify, "loopsimplify",
|
||||
"Canonicalize natural loops", true, false)
|
||||
|
||||
// Publically exposed interface to pass...
|
||||
|
@ -49,7 +49,14 @@ namespace {
|
||||
} // end of anonymous namespace
|
||||
|
||||
char PromotePass::ID = 0;
|
||||
INITIALIZE_PASS(PromotePass, "mem2reg", "Promote Memory to Register",
|
||||
INITIALIZE_PASS_BEGIN(PromotePass, "mem2reg", "Promote Memory to Register",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominanceFrontier)
|
||||
INITIALIZE_PASS_DEPENDENCY(UnifyFunctionExitNodes)
|
||||
INITIALIZE_PASS_DEPENDENCY(LowerSwitch)
|
||||
INITIALIZE_PASS_DEPENDENCY(LowerInvoke)
|
||||
INITIALIZE_PASS_END(PromotePass, "mem2reg", "Promote Memory to Register",
|
||||
false, false)
|
||||
|
||||
bool PromotePass::runOnFunction(Function &F) {
|
||||
|
@ -106,7 +106,10 @@ bool DominatorTree::dominates(const Instruction *A, const Instruction *B) const{
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
char DominanceFrontier::ID = 0;
|
||||
INITIALIZE_PASS(DominanceFrontier, "domfrontier",
|
||||
INITIALIZE_PASS_BEGIN(DominanceFrontier, "domfrontier",
|
||||
"Dominance Frontier Construction", true, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_END(DominanceFrontier, "domfrontier",
|
||||
"Dominance Frontier Construction", true, true)
|
||||
|
||||
void DominanceFrontier::verifyAnalysis() const {
|
||||
|
@ -393,7 +393,10 @@ namespace {
|
||||
} // End anonymous namespace
|
||||
|
||||
char Verifier::ID = 0;
|
||||
INITIALIZE_PASS(Verifier, "verify", "Module Verifier", false, false)
|
||||
INITIALIZE_PASS_BEGIN(Verifier, "verify", "Module Verifier", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(PreVerifier)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTree)
|
||||
INITIALIZE_PASS_END(Verifier, "verify", "Module Verifier", false, false)
|
||||
|
||||
// Assert - We know that cond should be true, if not print an error message.
|
||||
#define Assert(C, M) \
|
||||
|
Loading…
Reference in New Issue
Block a user