mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
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
This commit is contained in:
parent
917290043f
commit
d8cc7be026
@ -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
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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(); }
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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(); }
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user