diff options
author | Owen Anderson <resistor@mac.com> | 2010-07-21 23:07:00 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2010-07-21 23:07:00 +0000 |
commit | d8cc7be0262092882d848a1c7d8a4cb6752cce6f (patch) | |
tree | 750773301710bd6fa4184b6da9f5daa9dc8c143d | |
parent | 917290043f87b8efa6ba540bec5963013c517912 (diff) |
Add INSTANTIATE_AG_PASS, which combines RegisterPass<> with RegisterAnalysisGroup<> for pass registration.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109058 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/WritingAnLLVMPass.html | 43 | ||||
-rw-r--r-- | include/llvm/PassSupport.h | 4 | ||||
-rw-r--r-- | lib/Analysis/AliasAnalysisCounter.cpp | 5 | ||||
-rw-r--r-- | lib/Analysis/AliasDebugger.cpp | 5 | ||||
-rw-r--r-- | lib/Analysis/BasicAliasAnalysis.cpp | 16 | ||||
-rw-r--r-- | lib/Analysis/CFGPrinter.cpp | 5 | ||||
-rw-r--r-- | lib/Analysis/IPA/CallGraph.cpp | 5 | ||||
-rw-r--r-- | lib/Analysis/IPA/FindUsedTypes.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/LibCallAliasAnalysis.cpp | 7 | ||||
-rw-r--r-- | lib/Analysis/PostDominators.cpp | 4 | ||||
-rw-r--r-- | lib/Analysis/ProfileInfo.cpp | 7 | ||||
-rw-r--r-- | lib/Analysis/ScalarEvolutionAliasAnalysis.cpp | 7 |
12 files changed, 50 insertions, 62 deletions
diff --git a/docs/WritingAnLLVMPass.html b/docs/WritingAnLLVMPass.html index f6360a19c3..3cef2c9344 100644 --- a/docs/WritingAnLLVMPass.html +++ b/docs/WritingAnLLVMPass.html @@ -1247,7 +1247,7 @@ between passes</a> still apply.</p> <p>Although <a href="#registration">Pass Registration</a> is optional for normal passes, all analysis group implementations must be registered, and must use the -<A href="#registerag"><tt>RegisterAnalysisGroup</tt></a> template to join the +<A href="#registerag"><tt>INITIALIZE_AG_PASS</tt></a> template to join the implementation pool. Also, a default implementation of the interface <b>must</b> be registered with <A href="#registerag"><tt>RegisterAnalysisGroup</tt></a>.</p> @@ -1283,8 +1283,10 @@ hypothetical example) instead.</p> <div class="doc_text"> <p>The <tt>RegisterAnalysisGroup</tt> template is used to register the analysis -group itself as well as add pass implementations to the analysis group. First, -an analysis should be registered, with a human readable name provided for it. +group itself, while the <tt>INITIALIZE_AG_PASS</tt> is used to add pass +implementations to the analysis group. First, +an analysis group should be registered, with a human readable name +provided for it. Unlike registration of passes, there is no command line argument to be specified for the Analysis Group Interface itself, because it is "abstract":</p> @@ -1297,35 +1299,36 @@ implementations of the interface by using the following code:</p> <div class="doc_code"><pre> <b>namespace</b> { - //<i> Analysis Group implementations <b>must</b> be registered normally...</i> - RegisterPass<FancyAA> - B("<i>somefancyaa</i>", "<i>A more complex alias analysis implementation</i>"); - //<i> Declare that we implement the AliasAnalysis interface</i> - RegisterAnalysisGroup<<a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>> C(B); + INITIALIZE_AG_PASS(FancyAA, <a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>, "<i>somefancyaa</i>", + "<i>A more complex alias analysis implementation</i>", + false, // <i>Is CFG Only?</i> + true, // <i>Is Analysis?</i> + false, // <i>Is default Analysis Group implementation?</i> + ); } </pre></div> -<p>This just shows a class <tt>FancyAA</tt> that is registered normally, then -uses the <tt>RegisterAnalysisGroup</tt> template to "join" the <tt><a -href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a></tt> +<p>This just shows a class <tt>FancyAA</tt> that +uses the <tt>INITIALIZE_AG_PASS</tt> macro both to register and +to "join" the <tt><a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a></tt> analysis group. Every implementation of an analysis group should join using -this template. A single pass may join multiple different analysis groups with -no problem.</p> +this macro.</p> <div class="doc_code"><pre> <b>namespace</b> { - //<i> Analysis Group implementations <b>must</b> be registered normally...</i> - RegisterPass<<a href="http://llvm.org/doxygen/structBasicAliasAnalysis.html">BasicAliasAnalysis</a>> - D("<i>basicaa</i>", "<i>Basic Alias Analysis (default AA impl)</i>"); - //<i> Declare that we implement the AliasAnalysis interface</i> - RegisterAnalysisGroup<<a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>, <b>true</b>> E(D); + INITIALIZE_AG_PASS(BasicAA, <a href="http://llvm.org/doxygen/classllvm_1_1AliasAnalysis.html">AliasAnalysis</a>, "<i>basicaa</i>", + "<i>Basic Alias Analysis (default AA impl)</i>", + false, // <i>Is CFG Only?</i> + true, // <i>Is Analysis?</i> + true, // <i>Is default Analysis Group implementation?</i> + ); } </pre></div> -<p>Here we show how the default implementation is specified (using the extra -argument to the <tt>RegisterAnalysisGroup</tt> template). There must be exactly +<p>Here we show how the default implementation is specified (using the final +argument to the <tt>INITIALIZE_AG_PASS</tt> template). There must be exactly one default implementation available at all times for an Analysis Group to be used. Only default implementation can derive from <tt>ImmutablePass</tt>. Here we declare that the diff --git a/include/llvm/PassSupport.h b/include/llvm/PassSupport.h index 4e936c1b21..07dc7f1d15 100644 --- a/include/llvm/PassSupport.h +++ b/include/llvm/PassSupport.h @@ -209,7 +209,9 @@ struct RegisterAnalysisGroup : public RegisterAGBase { } }; - +#define INITIALIZE_AG_PASS(passName, agName, arg, name, cfg, analysis, def) \ + static RegisterPass<passName> passName ## _info(arg, name, cfg, analysis); \ + static RegisterAnalysisGroup<agName, def> passName ## _ag(passName ## _info) //===--------------------------------------------------------------------------- /// PassRegistrationListener class - This class is meant to be derived from by diff --git a/lib/Analysis/AliasAnalysisCounter.cpp b/lib/Analysis/AliasAnalysisCounter.cpp index 1053955ea2..25786c7863 100644 --- a/lib/Analysis/AliasAnalysisCounter.cpp +++ b/lib/Analysis/AliasAnalysisCounter.cpp @@ -111,9 +111,8 @@ namespace { } char AliasAnalysisCounter::ID = 0; -static RegisterPass<AliasAnalysisCounter> -X("count-aa", "Count Alias Analysis Query Responses", false, true); -static RegisterAnalysisGroup<AliasAnalysis> Y(X); +INITIALIZE_AG_PASS(AliasAnalysisCounter, AliasAnalysis, "count-aa", + "Count Alias Analysis Query Responses", false, true, false); ModulePass *llvm::createAliasAnalysisCounterPass() { return new AliasAnalysisCounter(); diff --git a/lib/Analysis/AliasDebugger.cpp b/lib/Analysis/AliasDebugger.cpp index bc2d9c55d1..79bc99e200 100644 --- a/lib/Analysis/AliasDebugger.cpp +++ b/lib/Analysis/AliasDebugger.cpp @@ -126,9 +126,8 @@ namespace { } char AliasDebugger::ID = 0; -static RegisterPass<AliasDebugger> -X("debug-aa", "AA use debugger", false, true); -static RegisterAnalysisGroup<AliasAnalysis> Y(X); +INITIALIZE_AG_PASS(AliasDebugger, AliasAnalysis, "debug-aa", + "AA use debugger", false, true, false); Pass *llvm::createAliasDebugger() { return new AliasDebugger(); } diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 4f53a6d625..b025ec623c 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -182,11 +182,9 @@ namespace { // Register this pass... char NoAA::ID = 0; -static RegisterPass<NoAA> -U("no-aa", "No Alias Analysis (always returns 'may' alias)", true, true); - -// Declare that we implement the AliasAnalysis interface -static RegisterAnalysisGroup<AliasAnalysis> V(U); +INITIALIZE_AG_PASS(NoAA, AliasAnalysis, "no-aa", + "No Alias Analysis (always returns 'may' alias)", + true, true, false); ImmutablePass *llvm::createNoAAPass() { return new NoAA(); } @@ -275,11 +273,9 @@ namespace { // Register this pass... char BasicAliasAnalysis::ID = 0; -static RegisterPass<BasicAliasAnalysis> -X("basicaa", "Basic Alias Analysis (default AA impl)", false, true); - -// Declare that we implement the AliasAnalysis interface -static RegisterAnalysisGroup<AliasAnalysis, true> Y(X); +INITIALIZE_AG_PASS(BasicAliasAnalysis, AliasAnalysis, "basicaa", + "Basic Alias Analysis (default AA impl)", + false, true, true); ImmutablePass *llvm::createBasicAliasAnalysisPass() { return new BasicAliasAnalysis(); diff --git a/lib/Analysis/CFGPrinter.cpp b/lib/Analysis/CFGPrinter.cpp index c16f3286df..da2f0a6dbf 100644 --- a/lib/Analysis/CFGPrinter.cpp +++ b/lib/Analysis/CFGPrinter.cpp @@ -62,9 +62,8 @@ namespace { } char CFGOnlyViewer::ID = 0; -static RegisterPass<CFGOnlyViewer> -V1("view-cfg-only", - "View CFG of function (with no function bodies)", false, true); +INITIALIZE_PASS(CFGOnlyViewer, "view-cfg-only", + "View CFG of function (with no function bodies)", false, true); namespace { struct CFGPrinter : public FunctionPass { diff --git a/lib/Analysis/IPA/CallGraph.cpp b/lib/Analysis/IPA/CallGraph.cpp index 65c7c6efd8..0e474e6668 100644 --- a/lib/Analysis/IPA/CallGraph.cpp +++ b/lib/Analysis/IPA/CallGraph.cpp @@ -172,9 +172,8 @@ private: } //End anonymous namespace static RegisterAnalysisGroup<CallGraph> X("Call Graph"); -static RegisterPass<BasicCallGraph> -Y("basiccg", "Basic CallGraph Construction", false, true); -static RegisterAnalysisGroup<CallGraph, true> Z(Y); +INITIALIZE_AG_PASS(BasicCallGraph, CallGraph, "basiccg", + "Basic CallGraph Construction", false, true, true); char CallGraph::ID = 0; char BasicCallGraph::ID = 0; diff --git a/lib/Analysis/IPA/FindUsedTypes.cpp b/lib/Analysis/IPA/FindUsedTypes.cpp index c4fb0b9a4e..8eed9d6f68 100644 --- a/lib/Analysis/IPA/FindUsedTypes.cpp +++ b/lib/Analysis/IPA/FindUsedTypes.cpp @@ -23,8 +23,8 @@ using namespace llvm; char FindUsedTypes::ID = 0; -static RegisterPass<FindUsedTypes> -X("print-used-types", "Find Used Types", false, true); +INITIALIZE_PASS(FindUsedTypes, "print-used-types", + "Find Used Types", false, true); // IncorporateType - Incorporate one type and all of its subtypes into the // collection of used types. diff --git a/lib/Analysis/LibCallAliasAnalysis.cpp b/lib/Analysis/LibCallAliasAnalysis.cpp index 7419659298..9dca93f9e7 100644 --- a/lib/Analysis/LibCallAliasAnalysis.cpp +++ b/lib/Analysis/LibCallAliasAnalysis.cpp @@ -20,11 +20,8 @@ using namespace llvm; // Register this pass... char LibCallAliasAnalysis::ID = 0; -static RegisterPass<LibCallAliasAnalysis> -X("libcall-aa", "LibCall Alias Analysis", false, true); - -// Declare that we implement the AliasAnalysis interface -static RegisterAnalysisGroup<AliasAnalysis> Y(X); +INITIALIZE_AG_PASS(LibCallAliasAnalysis, AliasAnalysis, "libcall-aa", + "LibCall Alias Analysis", false, true, false); FunctionPass *llvm::createLibCallAliasAnalysisPass(LibCallInfo *LCI) { return new LibCallAliasAnalysis(LCI); diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp index 51eb145258..cbe8d1867e 100644 --- a/lib/Analysis/PostDominators.cpp +++ b/lib/Analysis/PostDominators.cpp @@ -53,8 +53,8 @@ FunctionPass* llvm::createPostDomTree() { // PostDominanceFrontier Implementation //===----------------------------------------------------------------------===// -static RegisterPass<PostDominanceFrontier> -H("postdomfrontier", "Post-Dominance Frontier Construction", true, true); +INITIALIZE_PASS(PostDominanceFrontier, "postdomfrontier", + "Post-Dominance Frontier Construction", true, true); const DominanceFrontier::DomSetType & PostDominanceFrontier::calculate(const PostDominatorTree &DT, diff --git a/lib/Analysis/ProfileInfo.cpp b/lib/Analysis/ProfileInfo.cpp index 8d2712fd6e..eb33e78af7 100644 --- a/lib/Analysis/ProfileInfo.cpp +++ b/lib/Analysis/ProfileInfo.cpp @@ -1096,10 +1096,7 @@ namespace { char NoProfileInfo::ID = 0; // Register this pass... -static RegisterPass<NoProfileInfo> -X("no-profile", "No Profile Information", false, true); - -// Declare that we implement the ProfileInfo interface -static RegisterAnalysisGroup<ProfileInfo, true> Y(X); +INITIALIZE_AG_PASS(NoProfileInfo, ProfileInfo, "no-profile", + "No Profile Information", false, true, true); ImmutablePass *llvm::createNoProfileInfoPass() { return new NoProfileInfo(); } diff --git a/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp b/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp index 58711b8be5..b3d90cb5c1 100644 --- a/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp +++ b/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp @@ -58,11 +58,8 @@ namespace { // Register this pass... char ScalarEvolutionAliasAnalysis::ID = 0; -static RegisterPass<ScalarEvolutionAliasAnalysis> -X("scev-aa", "ScalarEvolution-based Alias Analysis", false, true); - -// Declare that we implement the AliasAnalysis interface -static RegisterAnalysisGroup<AliasAnalysis> Y(X); +INITIALIZE_AG_PASS(ScalarEvolutionAliasAnalysis, AliasAnalysis, "scev-aa", + "ScalarEvolution-based Alias Analysis", false, true, false); FunctionPass *llvm::createScalarEvolutionAliasAnalysisPass() { return new ScalarEvolutionAliasAnalysis(); |