Eliminate RegisterAnalysis. RegisterPass now does all that is necessary.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29921 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-08-27 22:30:17 +00:00
parent 2dd3d423aa
commit 5d8925c7c5
22 changed files with 52 additions and 59 deletions

View File

@ -179,24 +179,33 @@ template<typename PassName>
struct RegisterPass : public RegisterPassBase {
// Register Pass using default constructor...
RegisterPass(const char *PassArg, const char *Name)
RegisterPass(const char *PassArg, const char *Name, bool CFGOnly = false)
: RegisterPassBase(Name, PassArg, typeid(PassName),
callDefaultCtor<PassName>) {}
callDefaultCtor<PassName>) {
if (CFGOnly) setOnlyUsesCFG();
}
// Register Pass using default constructor explicitly...
RegisterPass(const char *PassArg, const char *Name,
Pass *(*ctor)())
: RegisterPassBase(Name, PassArg, typeid(PassName), ctor) {}
Pass *(*ctor)(), bool CFGOnly = false)
: RegisterPassBase(Name, PassArg, typeid(PassName), ctor) {
if (CFGOnly) setOnlyUsesCFG();
}
// Register Pass using TargetMachine constructor...
RegisterPass(const char *PassArg, const char *Name,
Pass *(*targetctor)(TargetMachine &))
: RegisterPassBase(Name, PassArg, typeid(PassName), 0, targetctor) {}
Pass *(*targetctor)(TargetMachine &), bool CFGOnly = false)
: RegisterPassBase(Name, PassArg, typeid(PassName), 0, targetctor) {
if (CFGOnly) setOnlyUsesCFG();
}
// Generic constructor version that has an unknown ctor type...
template<typename CtorType>
RegisterPass(const char *PassArg, const char *Name, CtorType *Fn)
: RegisterPassBase(Name, PassArg, typeid(PassName), 0) {}
RegisterPass(const char *PassArg, const char *Name, CtorType *Fn,
bool CFGOnly = false)
: RegisterPassBase(Name, PassArg, typeid(PassName), 0) {
if (CFGOnly) setOnlyUsesCFG();
}
};
/// RegisterOpt - Register something that is to show up in Opt, this is just a
@ -246,22 +255,6 @@ struct RegisterOpt : public RegisterPassBase {
}
};
/// RegisterAnalysis - Register something that is to show up in Analysis, this
/// is just a shortcut for specifying RegisterPass... Analyses take a special
/// argument that, when set to true, tells the system that the analysis ONLY
/// depends on the shape of the CFG, so if a transformation preserves the CFG
/// that the analysis is not invalidated.
///
template<typename PassName>
struct RegisterAnalysis : public RegisterPassBase {
RegisterAnalysis(const char *PassArg, const char *Name,
bool CFGOnly = false)
: RegisterPassBase(Name, PassArg, typeid(PassName),
callDefaultCtor<PassName>) {
if (CFGOnly) setOnlyUsesCFG();
}
};
/// RegisterAnalysisGroup - Register a Pass as a member of an analysis _group_.
/// Analysis groups are used to define an interface (which need not derive from

View File

@ -109,8 +109,8 @@ namespace {
}
};
RegisterAnalysis<CFGPrinter> P1("print-cfg",
"Print CFG of function to 'dot' file");
RegisterPass<CFGPrinter> P1("print-cfg",
"Print CFG of function to 'dot' file");
struct CFGOnlyPrinter : public CFGPrinter {
virtual bool runOnFunction(Function &F) {
@ -127,7 +127,7 @@ namespace {
}
};
RegisterAnalysis<CFGOnlyPrinter>
RegisterPass<CFGOnlyPrinter>
P2("print-cfg-only",
"Print CFG of function to 'dot' file (with no function bodies)");
}

View File

@ -37,7 +37,7 @@ namespace {
UpdateGlobals("budatastructures-update-from-globals",
cl::desc("Update local graph from global graph when processing function"));
RegisterAnalysis<BUDataStructures>
RegisterPass<BUDataStructures>
X("budatastructure", "Bottom-up Data Structure Analysis");
}

View File

@ -34,7 +34,7 @@ namespace {
Statistic<> CompleteInd("calltarget", "Number of complete indirect calls");
Statistic<> CompleteEmpty("calltarget", "Number of complete empty calls");
RegisterAnalysis<CallTargetFinder> X("calltarget", "Find Call Targets (uses DSA)");
RegisterPass<CallTargetFinder> X("calltarget","Find Call Targets (uses DSA)");
}
void CallTargetFinder::findIndTargets(Module &M)

View File

@ -25,7 +25,7 @@
using namespace llvm;
namespace {
RegisterAnalysis<CompleteBUDataStructures>
RegisterPass<CompleteBUDataStructures>
X("cbudatastructure", "'Complete' Bottom-up Data Structure Analysis");
Statistic<> NumCBUInlines("cbudatastructures", "Number of graphs inlined");
}

View File

@ -60,7 +60,7 @@ namespace {
void print(std::ostream &O, const Module* = 0) const { }
};
static RegisterAnalysis<DSGraphStats> Z("dsstats", "DS Graph Statistics");
static RegisterPass<DSGraphStats> Z("dsstats", "DS Graph Statistics");
}
FunctionPass *llvm::createDataStructureStatsPass() {

View File

@ -30,7 +30,7 @@
using namespace llvm;
namespace {
RegisterAnalysis<EquivClassGraphs> X("eqdatastructure",
RegisterPass<EquivClassGraphs> X("eqdatastructure",
"Equivalence-class Bottom-up Data Structure Analysis");
Statistic<> NumEquivBUInlines("equivdatastructures",
"Number of graphs inlined");

View File

@ -74,7 +74,7 @@ namespace {
void verify(const DSGraph &G);
};
RegisterAnalysis<DSGC> X("datastructure-gc", "DSA Graph Checking Pass");
RegisterPass<DSGC> X("datastructure-gc", "DSA Graph Checking Pass");
}
FunctionPass *llvm::createDataStructureGraphCheckerPass() {

View File

@ -33,7 +33,7 @@
using namespace llvm;
static RegisterAnalysis<LocalDataStructures>
static RegisterPass<LocalDataStructures>
X("datastructure", "Local Data Structure Analysis");
static cl::opt<bool>

View File

@ -32,7 +32,7 @@ using namespace llvm;
#endif
namespace {
RegisterAnalysis<TDDataStructures> // Register the pass
RegisterPass<TDDataStructures> // Register the pass
Y("tddatastructure", "Top-down Data Structure Analysis");
Statistic<> NumTDInlines("tddatastructures", "Number of graphs inlined");

View File

@ -21,7 +21,7 @@
#include "llvm/Support/InstIterator.h"
using namespace llvm;
static RegisterAnalysis<FindUsedTypes>
static RegisterPass<FindUsedTypes>
X("printusedtypes", "Find Used Types");
// IncorporateType - Incorporate one type and all of its subtypes into the

View File

@ -55,8 +55,8 @@ namespace {
};
RegisterAnalysis<InstCount> X("instcount",
"Counts the various types of Instructions");
RegisterPass<InstCount> X("instcount",
"Counts the various types of Instructions");
}
FunctionPass *llvm::createInstCountPass() { return new InstCount(); }

View File

@ -15,7 +15,7 @@
#include "llvm/Analysis/IntervalIterator.h"
using namespace llvm;
static RegisterAnalysis<IntervalPartition>
static RegisterPass<IntervalPartition>
X("intervals", "Interval Partition Construction", true);
//===----------------------------------------------------------------------===//

View File

@ -25,7 +25,7 @@
#include <iostream>
using namespace llvm;
static RegisterAnalysis<LoopInfo>
static RegisterPass<LoopInfo>
X("loops", "Natural Loop Construction", true);
//===----------------------------------------------------------------------===//

View File

@ -23,7 +23,7 @@ using namespace llvm;
// ImmediatePostDominators Implementation
//===----------------------------------------------------------------------===//
static RegisterAnalysis<ImmediatePostDominators>
static RegisterPass<ImmediatePostDominators>
D("postidom", "Immediate Post-Dominators Construction", true);
unsigned ImmediatePostDominators::DFSPass(BasicBlock *V, InfoRec &VInfo,
@ -145,7 +145,7 @@ bool ImmediatePostDominators::runOnFunction(Function &F) {
// PostDominatorSet Implementation
//===----------------------------------------------------------------------===//
static RegisterAnalysis<PostDominatorSet>
static RegisterPass<PostDominatorSet>
B("postdomset", "Post-Dominator Set Construction", true);
// Postdominator set construction. This converts the specified function to only
@ -212,7 +212,7 @@ bool PostDominatorSet::runOnFunction(Function &F) {
// PostDominatorTree Implementation
//===----------------------------------------------------------------------===//
static RegisterAnalysis<PostDominatorTree>
static RegisterPass<PostDominatorTree>
F("postdomtree", "Post-Dominator Tree Construction", true);
DominatorTreeBase::Node *PostDominatorTree::getNodeForBlock(BasicBlock *BB) {
@ -258,7 +258,7 @@ void PostDominatorTree::calculate(const ImmediatePostDominators &IPD) {
// PostETForest Implementation
//===----------------------------------------------------------------------===//
static RegisterAnalysis<PostETForest>
static RegisterPass<PostETForest>
G("postetforest", "Post-ET-Forest Construction", true);
ETNode *PostETForest::getNodeForBlock(BasicBlock *BB) {
@ -322,7 +322,7 @@ void PostETForest::calculate(const ImmediatePostDominators &ID) {
// PostDominanceFrontier Implementation
//===----------------------------------------------------------------------===//
static RegisterAnalysis<PostDominanceFrontier>
static RegisterPass<PostDominanceFrontier>
H("postdomfrontier", "Post-Dominance Frontier Construction", true);
const DominanceFrontier::DomSetType &

View File

@ -80,7 +80,7 @@
using namespace llvm;
namespace {
RegisterAnalysis<ScalarEvolution>
RegisterPass<ScalarEvolution>
R("scalar-evolution", "Scalar Evolution Analysis");
Statistic<>

View File

@ -38,7 +38,7 @@
using namespace llvm;
namespace {
RegisterAnalysis<LiveIntervals> X("liveintervals", "Live Interval Analysis");
RegisterPass<LiveIntervals> X("liveintervals", "Live Interval Analysis");
static Statistic<> numIntervals
("liveintervals", "Number of original intervals");

View File

@ -38,7 +38,7 @@
#include <iostream>
using namespace llvm;
static RegisterAnalysis<LiveVariables> X("livevars", "Live Variable Analysis");
static RegisterPass<LiveVariables> X("livevars", "Live Variable Analysis");
void LiveVariables::VarInfo::dump() const {
std::cerr << "Register Defined by: ";

View File

@ -44,7 +44,7 @@ using namespace llvm;
//
//===----------------------------------------------------------------------===//
static RegisterAnalysis<ImmediateDominators>
static RegisterPass<ImmediateDominators>
C("idom", "Immediate Dominators Construction", true);
unsigned ImmediateDominators::DFSPass(BasicBlock *V, InfoRec &VInfo,
@ -243,7 +243,7 @@ void ImmediateDominatorsBase::print(std::ostream &o, const Module* ) const {
// DominatorSet Implementation
//===----------------------------------------------------------------------===//
static RegisterAnalysis<DominatorSet>
static RegisterPass<DominatorSet>
B("domset", "Dominator Set Construction", true);
// dominates - Return true if A dominates B. This performs the special checks
@ -343,7 +343,7 @@ void DominatorSetBase::print(std::ostream &o, const Module* ) const {
// DominatorTree Implementation
//===----------------------------------------------------------------------===//
static RegisterAnalysis<DominatorTree>
static RegisterPass<DominatorTree>
E("domtree", "Dominator Tree Construction", true);
// DominatorTreeBase::reset - Free all of the tree node memory.
@ -434,7 +434,7 @@ void DominatorTreeBase::print(std::ostream &o, const Module* ) const {
// DominanceFrontier Implementation
//===----------------------------------------------------------------------===//
static RegisterAnalysis<DominanceFrontier>
static RegisterPass<DominanceFrontier>
G("domfrontier", "Dominance Frontier Construction", true);
const DominanceFrontier::DomSetType &
@ -813,7 +813,7 @@ ETNode *ETNode::NCA(ETNode *other) {
// ETForest implementation
//===----------------------------------------------------------------------===//
static RegisterAnalysis<ETForest>
static RegisterPass<ETForest>
D("etforest", "ET Forest Construction", true);
void ETForestBase::reset() {

View File

@ -61,7 +61,7 @@ namespace {
}
};
RegisterAnalysis<ExternalFunctionsPassedConstants>
RegisterPass<ExternalFunctionsPassedConstants>
P1("externalfnconstants", "Print external fn callsites passed constants");
struct CallGraphPrinter : public ModulePass {
@ -76,6 +76,6 @@ namespace {
}
};
RegisterAnalysis<CallGraphPrinter>
RegisterPass<CallGraphPrinter>
P2("callgraph", "Print a call graph");
}

View File

@ -72,6 +72,6 @@ namespace {
}
};
RegisterAnalysis<CallGraphPrinter> P2("print-callgraph",
"Print Call Graph to 'dot' file");
RegisterPass<CallGraphPrinter> P2("print-callgraph",
"Print Call Graph to 'dot' file");
}

View File

@ -57,10 +57,10 @@ namespace {
}
};
RegisterAnalysis<CFGSCC>
RegisterPass<CFGSCC>
Y("cfgscc", "Print SCCs of each function CFG");
RegisterAnalysis<CallGraphSCC>
RegisterPass<CallGraphSCC>
Z("callscc", "Print SCCs of the Call Graph");
}