diff options
author | Devang Patel <dpatel@apple.com> | 2007-05-01 21:15:47 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2007-05-01 21:15:47 +0000 |
commit | 794fd75c67a2cdc128d67342c6d88a504d186896 (patch) | |
tree | 6b805aa4a576e9de6cbf096d2fb85063b3fb8fca /lib/Analysis | |
parent | e50fb9ac174b791047ffa8648443ab94b2097cd9 (diff) | |
download | external_llvm-794fd75c67a2cdc128d67342c6d88a504d186896.zip external_llvm-794fd75c67a2cdc128d67342c6d88a504d186896.tar.gz external_llvm-794fd75c67a2cdc128d67342c6d88a504d186896.tar.bz2 |
Do not use typeinfo to identify pass in pass manager.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36632 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis')
-rw-r--r-- | lib/Analysis/AliasAnalysis.cpp | 1 | ||||
-rw-r--r-- | lib/Analysis/AliasAnalysisCounter.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/AliasAnalysisEvaluator.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/AliasDebugger.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/AliasSetTracker.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/BasicAliasAnalysis.cpp | 6 | ||||
-rw-r--r-- | lib/Analysis/CFGPrinter.cpp | 6 | ||||
-rw-r--r-- | lib/Analysis/IPA/Andersens.cpp | 6 | ||||
-rw-r--r-- | lib/Analysis/IPA/CallGraph.cpp | 6 | ||||
-rw-r--r-- | lib/Analysis/IPA/CallGraphSCCPass.cpp | 5 | ||||
-rw-r--r-- | lib/Analysis/IPA/FindUsedTypes.cpp | 1 | ||||
-rw-r--r-- | lib/Analysis/IPA/GlobalsModRef.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/InstCount.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/IntervalPartition.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/LoadValueNumbering.cpp | 3 | ||||
-rw-r--r-- | lib/Analysis/LoopInfo.cpp | 1 | ||||
-rw-r--r-- | lib/Analysis/LoopPass.cpp | 5 | ||||
-rw-r--r-- | lib/Analysis/PostDominators.cpp | 3 | ||||
-rw-r--r-- | lib/Analysis/ProfileInfo.cpp | 7 | ||||
-rw-r--r-- | lib/Analysis/ProfileInfoLoaderPass.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/ScalarEvolution.cpp | 1 | ||||
-rw-r--r-- | lib/Analysis/ValueNumbering.cpp | 5 |
22 files changed, 81 insertions, 7 deletions
diff --git a/lib/Analysis/AliasAnalysis.cpp b/lib/Analysis/AliasAnalysis.cpp index c7b68fa..7499db5 100644 --- a/lib/Analysis/AliasAnalysis.cpp +++ b/lib/Analysis/AliasAnalysis.cpp @@ -34,6 +34,7 @@ using namespace llvm; // Register the AliasAnalysis interface, providing a nice name to refer to. namespace { + const int AliasAnalysis::ID = 0; RegisterAnalysisGroup<AliasAnalysis> Z("Alias Analysis"); } diff --git a/lib/Analysis/AliasAnalysisCounter.cpp b/lib/Analysis/AliasAnalysisCounter.cpp index fcd5edc..ee1980f 100644 --- a/lib/Analysis/AliasAnalysisCounter.cpp +++ b/lib/Analysis/AliasAnalysisCounter.cpp @@ -34,7 +34,8 @@ namespace { const char *Name; Module *M; public: - AliasAnalysisCounter() { + static const int ID; // Class identification, replacement for typeinfo + AliasAnalysisCounter() : ModulePass((intptr_t) &ID) { No = May = Must = 0; NoMR = JustRef = JustMod = MR = 0; } @@ -107,6 +108,7 @@ namespace { } }; + const int AliasAnalysisCounter::ID = 0; RegisterPass<AliasAnalysisCounter> X("count-aa", "Count Alias Analysis Query Responses"); RegisterAnalysisGroup<AliasAnalysis> Y(X); diff --git a/lib/Analysis/AliasAnalysisEvaluator.cpp b/lib/Analysis/AliasAnalysisEvaluator.cpp index 73ea423..f2631cb 100644 --- a/lib/Analysis/AliasAnalysisEvaluator.cpp +++ b/lib/Analysis/AliasAnalysisEvaluator.cpp @@ -50,6 +50,9 @@ namespace { unsigned NoModRef, Mod, Ref, ModRef; public: + static const int ID; // Pass identifcation, replacement for typeid + AAEval() : FunctionPass((intptr_t)&ID) {} + virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired<AliasAnalysis>(); AU.setPreservesAll(); @@ -70,6 +73,7 @@ namespace { bool doFinalization(Module &M); }; + const int AAEval::ID = 0; RegisterPass<AAEval> X("aa-eval", "Exhaustive Alias Analysis Precision Evaluator"); } diff --git a/lib/Analysis/AliasDebugger.cpp b/lib/Analysis/AliasDebugger.cpp index 3f7f1cc..a4df97a 100644 --- a/lib/Analysis/AliasDebugger.cpp +++ b/lib/Analysis/AliasDebugger.cpp @@ -40,6 +40,9 @@ namespace { std::set<const Value*> Vals; public: + static const int ID; // Class identification, replacement for typeinfo + AliasDebugger() : ModulePass((intptr_t)&ID) {} + bool runOnModule(Module &M) { InitializeAliasAnalysis(this); // set up super class @@ -119,6 +122,7 @@ namespace { }; + const int AliasDebugger::ID = 0; RegisterPass<AliasDebugger> X("debug-aa", "AA use debugger"); RegisterAnalysisGroup<AliasAnalysis> Y(X); } diff --git a/lib/Analysis/AliasSetTracker.cpp b/lib/Analysis/AliasSetTracker.cpp index 9564326..90c90fe 100644 --- a/lib/Analysis/AliasSetTracker.cpp +++ b/lib/Analysis/AliasSetTracker.cpp @@ -555,6 +555,9 @@ namespace { class VISIBILITY_HIDDEN AliasSetPrinter : public FunctionPass { AliasSetTracker *Tracker; public: + static const int ID; // Pass identifcation, replacement for typeid + AliasSetPrinter() : FunctionPass((intptr_t)&ID) {} + virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); AU.addRequired<AliasAnalysis>(); @@ -570,5 +573,6 @@ namespace { return false; } }; + const int AliasSetPrinter::ID = 0; RegisterPass<AliasSetPrinter> X("print-alias-sets", "Alias Set Printer"); } diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 1ca1a35..b1369a2 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -36,6 +36,9 @@ namespace { /// such it doesn't follow many of the rules that other alias analyses must. /// struct VISIBILITY_HIDDEN NoAA : public ImmutablePass, public AliasAnalysis { + static const int ID; // Class identification, replacement for typeinfo + NoAA() : ImmutablePass((intptr_t)&ID) {} + virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired<TargetData>(); } @@ -74,6 +77,7 @@ namespace { }; // Register this pass... + const int NoAA::ID = 0; RegisterPass<NoAA> U("no-aa", "No Alias Analysis (always returns 'may' alias)"); @@ -88,6 +92,7 @@ namespace { /// Because it doesn't chain to a previous alias analysis (like -no-aa), it /// derives from the NoAA class. struct VISIBILITY_HIDDEN BasicAliasAnalysis : public NoAA { + static const int ID; // Class identification, replacement for typeinfo AliasResult alias(const Value *V1, unsigned V1Size, const Value *V2, unsigned V2Size); @@ -119,6 +124,7 @@ namespace { }; // Register this pass... + const int BasicAliasAnalysis::ID = 0; RegisterPass<BasicAliasAnalysis> X("basicaa", "Basic Alias Analysis (default AA impl)"); diff --git a/lib/Analysis/CFGPrinter.cpp b/lib/Analysis/CFGPrinter.cpp index a57a068..6154460 100644 --- a/lib/Analysis/CFGPrinter.cpp +++ b/lib/Analysis/CFGPrinter.cpp @@ -91,6 +91,9 @@ struct DOTGraphTraits<const Function*> : public DefaultDOTGraphTraits { namespace { struct VISIBILITY_HIDDEN CFGPrinter : public FunctionPass { + static const int ID; // Pass identifcation, replacement for typeid + CFGPrinter() : FunctionPass((intptr_t)&ID) {} + virtual bool runOnFunction(Function &F) { std::string Filename = "cfg." + F.getName() + ".dot"; cerr << "Writing '" << Filename << "'..."; @@ -111,10 +114,12 @@ namespace { } }; + const int CFGPrinter::ID = 0; RegisterPass<CFGPrinter> P1("print-cfg", "Print CFG of function to 'dot' file"); struct VISIBILITY_HIDDEN CFGOnlyPrinter : public CFGPrinter { + static const int ID; // Pass identifcation, replacement for typeid virtual bool runOnFunction(Function &F) { bool OldCFGOnly = CFGOnly; CFGOnly = true; @@ -129,6 +134,7 @@ namespace { } }; + const int CFGOnlyPrinter::ID = 0; RegisterPass<CFGOnlyPrinter> P2("print-cfg-only", "Print CFG of function to 'dot' file (with no function bodies)"); diff --git a/lib/Analysis/IPA/Andersens.cpp b/lib/Analysis/IPA/Andersens.cpp index 0a281c8..cd90a6f 100644 --- a/lib/Analysis/IPA/Andersens.cpp +++ b/lib/Analysis/IPA/Andersens.cpp @@ -75,12 +75,17 @@ STATISTIC(NumIndirectCallees , "Number of indirect callees found"); namespace { class VISIBILITY_HIDDEN Andersens : public ModulePass, public AliasAnalysis, private InstVisitor<Andersens> { + public: + static const int ID; // Class identification, replacement for typeinfo + Andersens() : ModulePass((intptr_t)&ID) {} + private: /// Node class - This class is used to represent a memory object in the /// program, and is the primitive used to build the points-to graph. class Node { std::vector<Node*> Pointees; Value *Val; public: + static const unsigned ID; // Pass identifcation, replacement for typeid Node() : Val(0) {} Node *setValue(Value *V) { assert(Val == 0 && "Value already set for this node!"); @@ -334,6 +339,7 @@ namespace { void visitInstruction(Instruction &I); }; + const int Andersens::ID = 0; RegisterPass<Andersens> X("anders-aa", "Andersen's Interprocedural Alias Analysis"); RegisterAnalysisGroup<AliasAnalysis> Y(X); diff --git a/lib/Analysis/IPA/CallGraph.cpp b/lib/Analysis/IPA/CallGraph.cpp index bb96bb2..43e70bb 100644 --- a/lib/Analysis/IPA/CallGraph.cpp +++ b/lib/Analysis/IPA/CallGraph.cpp @@ -51,7 +51,9 @@ class VISIBILITY_HIDDEN BasicCallGraph : public CallGraph, public ModulePass { CallGraphNode *CallsExternalNode; public: - BasicCallGraph() : Root(0), ExternalCallingNode(0), CallsExternalNode(0) {} + static const int ID; // Class identification, replacement for typeinfo + BasicCallGraph() : ModulePass((intptr_t)&ID), Root(0), + ExternalCallingNode(0), CallsExternalNode(0) {} // runOnModule - Compute the call graph for the specified module. virtual bool runOnModule(Module &M) { @@ -188,7 +190,9 @@ private: } }; +const int CallGraph::ID = 0; RegisterAnalysisGroup<CallGraph> X("Call Graph"); +const int BasicCallGraph::ID = 0; RegisterPass<BasicCallGraph> Y("basiccg", "Basic CallGraph Construction"); RegisterAnalysisGroup<CallGraph, true> Z(Y); diff --git a/lib/Analysis/IPA/CallGraphSCCPass.cpp b/lib/Analysis/IPA/CallGraphSCCPass.cpp index 0640b63..2c5aeaa 100644 --- a/lib/Analysis/IPA/CallGraphSCCPass.cpp +++ b/lib/Analysis/IPA/CallGraphSCCPass.cpp @@ -30,7 +30,9 @@ using namespace llvm; class CGPassManager : public ModulePass, public PMDataManager { public: - CGPassManager(int Depth) : PMDataManager(Depth) { } + static const int ID; + CGPassManager(int Depth) + : ModulePass((intptr_t)&ID), PMDataManager(Depth) { } /// run - Execute all of the passes scheduled for execution. Keep track of /// whether any of the passes modifies the module, and if so, return true. @@ -71,6 +73,7 @@ public: } }; +const int CGPassManager::ID = 0; /// run - Execute all of the passes scheduled for execution. Keep track of /// whether any of the passes modifies the module, and if so, return true. bool CGPassManager::runOnModule(Module &M) { diff --git a/lib/Analysis/IPA/FindUsedTypes.cpp b/lib/Analysis/IPA/FindUsedTypes.cpp index 1208dd1..d35f7be 100644 --- a/lib/Analysis/IPA/FindUsedTypes.cpp +++ b/lib/Analysis/IPA/FindUsedTypes.cpp @@ -21,6 +21,7 @@ #include "llvm/Support/InstIterator.h" using namespace llvm; +const int FindUsedTypes::ID = 0; static RegisterPass<FindUsedTypes> X("printusedtypes", "Find Used Types"); diff --git a/lib/Analysis/IPA/GlobalsModRef.cpp b/lib/Analysis/IPA/GlobalsModRef.cpp index 8d41751..ea8b1d8 100644 --- a/lib/Analysis/IPA/GlobalsModRef.cpp +++ b/lib/Analysis/IPA/GlobalsModRef.cpp @@ -83,6 +83,9 @@ namespace { std::map<Function*, FunctionRecord> FunctionInfo; public: + static const int ID; + GlobalsModRef() : ModulePass((intptr_t)&ID) {} + bool runOnModule(Module &M) { InitializeAliasAnalysis(this); // set up super class AnalyzeGlobals(M); // find non-addr taken globals @@ -143,6 +146,7 @@ namespace { bool AnalyzeIndirectGlobalMemory(GlobalValue *GV); }; + const int GlobalsModRef::ID = 0; RegisterPass<GlobalsModRef> X("globalsmodref-aa", "Simple mod/ref analysis for globals"); RegisterAnalysisGroup<AliasAnalysis> Y(X); diff --git a/lib/Analysis/InstCount.cpp b/lib/Analysis/InstCount.cpp index e075fee..23c891b 100644 --- a/lib/Analysis/InstCount.cpp +++ b/lib/Analysis/InstCount.cpp @@ -51,6 +51,9 @@ namespace { abort(); } public: + static const int ID; // Pass identifcation, replacement for typeid + InstCount() : FunctionPass((intptr_t)&ID) {} + virtual bool runOnFunction(Function &F); virtual void getAnalysisUsage(AnalysisUsage &AU) const { @@ -60,6 +63,7 @@ namespace { }; + const int InstCount::ID = 0; RegisterPass<InstCount> X("instcount", "Counts the various types of Instructions"); } diff --git a/lib/Analysis/IntervalPartition.cpp b/lib/Analysis/IntervalPartition.cpp index 2385a7d..b380a51 100644 --- a/lib/Analysis/IntervalPartition.cpp +++ b/lib/Analysis/IntervalPartition.cpp @@ -15,6 +15,7 @@ #include "llvm/Analysis/IntervalIterator.h" using namespace llvm; +const int IntervalPartition::ID = 0; static RegisterPass<IntervalPartition> X("intervals", "Interval Partition Construction", true); @@ -88,7 +89,8 @@ bool IntervalPartition::runOnFunction(Function &F) { // existing interval graph. This takes an additional boolean parameter to // distinguish it from a copy constructor. Always pass in false for now. // -IntervalPartition::IntervalPartition(IntervalPartition &IP, bool) { +IntervalPartition::IntervalPartition(IntervalPartition &IP, bool) + : FunctionPass((intptr_t) &ID) { Interval *FunctionStart = IP.getRootInterval(); assert(FunctionStart && "Cannot operate on empty IntervalPartitions!"); diff --git a/lib/Analysis/LoadValueNumbering.cpp b/lib/Analysis/LoadValueNumbering.cpp index 16687b0..fdb5545 100644 --- a/lib/Analysis/LoadValueNumbering.cpp +++ b/lib/Analysis/LoadValueNumbering.cpp @@ -40,6 +40,8 @@ using namespace llvm; namespace { // FIXME: This should not be a FunctionPass. struct VISIBILITY_HIDDEN LoadVN : public FunctionPass, public ValueNumbering { + static const int ID; // Class identification, replacement for typeinfo + LoadVN() : FunctionPass((intptr_t)&ID) {} /// Pass Implementation stuff. This doesn't do any analysis. /// @@ -81,6 +83,7 @@ namespace { std::vector<Value*> &RetVals) const; }; + const int LoadVN::ID = 0; // Register this pass... RegisterPass<LoadVN> X("load-vn", "Load Value Numbering"); diff --git a/lib/Analysis/LoopInfo.cpp b/lib/Analysis/LoopInfo.cpp index ab71b88..fd66d29 100644 --- a/lib/Analysis/LoopInfo.cpp +++ b/lib/Analysis/LoopInfo.cpp @@ -27,6 +27,7 @@ #include <ostream> using namespace llvm; +const int LoopInfo::ID = 0; static RegisterPass<LoopInfo> X("loops", "Natural Loop Construction", true); diff --git a/lib/Analysis/LoopPass.cpp b/lib/Analysis/LoopPass.cpp index fc43103..eeb27ac 100644 --- a/lib/Analysis/LoopPass.cpp +++ b/lib/Analysis/LoopPass.cpp @@ -20,9 +20,12 @@ using namespace llvm; //===----------------------------------------------------------------------===// // LPPassManager // + +const int LPPassManager::ID = 0; /// LPPassManager manages FPPassManagers and CalLGraphSCCPasses. -LPPassManager::LPPassManager(int Depth) : PMDataManager(Depth) { +LPPassManager::LPPassManager(int Depth) + : FunctionPass((intptr_t)&ID), PMDataManager(Depth) { skipThisLoop = false; redoThisLoop = false; LI = NULL; diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp index add25fd..a328a89 100644 --- a/lib/Analysis/PostDominators.cpp +++ b/lib/Analysis/PostDominators.cpp @@ -22,6 +22,9 @@ using namespace llvm; // PostDominatorTree Implementation //===----------------------------------------------------------------------===// +const int PostDominatorTree::ID = 0; +const int PostDominanceFrontier::ID = 0; +const int PostETForest::ID = 0; static RegisterPass<PostDominatorTree> F("postdomtree", "Post-Dominator Tree Construction", true); diff --git a/lib/Analysis/ProfileInfo.cpp b/lib/Analysis/ProfileInfo.cpp index 6eead0f..27da816 100644 --- a/lib/Analysis/ProfileInfo.cpp +++ b/lib/Analysis/ProfileInfo.cpp @@ -22,6 +22,7 @@ using namespace llvm; // Register the ProfileInfo interface, providing a nice name to refer to. namespace { + const int ProfileInfo::ID = 0; RegisterAnalysisGroup<ProfileInfo> Z("Profile Information"); } @@ -84,8 +85,12 @@ unsigned ProfileInfo::getExecutionCount(BasicBlock *BB) const { namespace { struct VISIBILITY_HIDDEN NoProfileInfo - : public ImmutablePass, public ProfileInfo {}; + : public ImmutablePass, public ProfileInfo { + static const int ID; // Class identification, replacement for typeinfo + NoProfileInfo() : ImmutablePass((intptr_t)&ID) {} + }; + const int NoProfileInfo::ID = 0; // Register this pass... RegisterPass<NoProfileInfo> X("no-profile", "No Profile Information"); diff --git a/lib/Analysis/ProfileInfoLoaderPass.cpp b/lib/Analysis/ProfileInfoLoaderPass.cpp index 9a597a2..9697de8 100644 --- a/lib/Analysis/ProfileInfoLoaderPass.cpp +++ b/lib/Analysis/ProfileInfoLoaderPass.cpp @@ -32,8 +32,9 @@ namespace { class VISIBILITY_HIDDEN LoaderPass : public ModulePass, public ProfileInfo { std::string Filename; public: + static const int ID; // Class identification, replacement for typeinfo LoaderPass(const std::string &filename = "") - : Filename(filename) { + : ModulePass((intptr_t)&ID), Filename(filename) { if (filename.empty()) Filename = ProfileInfoFilename; } @@ -49,6 +50,7 @@ namespace { virtual bool runOnModule(Module &M); }; + const int LoaderPass::ID = 0; RegisterPass<LoaderPass> X("profile-loader", "Load profile information from llvmprof.out"); diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 473eadc..5dae7f0 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -102,6 +102,7 @@ MaxBruteForceIterations("scalar-evolution-max-iterations", cl::ReallyHidden, cl::init(100)); namespace { + const int ScalarEvolution::ID = 0; RegisterPass<ScalarEvolution> R("scalar-evolution", "Scalar Evolution Analysis"); } diff --git a/lib/Analysis/ValueNumbering.cpp b/lib/Analysis/ValueNumbering.cpp index 963ccb9..2ecbce5 100644 --- a/lib/Analysis/ValueNumbering.cpp +++ b/lib/Analysis/ValueNumbering.cpp @@ -22,6 +22,7 @@ #include "llvm/Support/Compiler.h" using namespace llvm; +const int ValueNumbering::ID = 0; // Register the ValueNumbering interface, providing a nice name to refer to. static RegisterAnalysisGroup<ValueNumbering> X("Value Numbering"); @@ -51,6 +52,9 @@ namespace { /// struct VISIBILITY_HIDDEN BasicVN : public ImmutablePass, public ValueNumbering { + static const int ID; // Class identification, replacement for typeinfo + BasicVN() : ImmutablePass((intptr_t)&ID) {} + /// getEqualNumberNodes - Return nodes with the same value number as the /// specified Value. This fills in the argument vector with any equal /// values. @@ -61,6 +65,7 @@ namespace { std::vector<Value*> &RetVals) const; }; + const int BasicVN::ID = 0; // Register this pass... RegisterPass<BasicVN> X("basicvn", "Basic Value Numbering (default GVN impl)"); |