Go to the documentation of this file.
20 #if !defined(LLVM_PASS_H) || defined(LLVM_PASSSUPPORT_H)
21 #error "Do not include <PassSupport.h>; include <Pass.h> instead"
24 #ifndef LLVM_PASSSUPPORT_H
25 #define LLVM_PASSSUPPORT_H
37 #define INITIALIZE_PASS(passName, arg, name, cfg, analysis) \
38 static void *initialize##passName##PassOnce(PassRegistry &Registry) { \
39 PassInfo *PI = new PassInfo( \
40 name, arg, &passName::ID, \
41 PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \
42 Registry.registerPass(*PI, true); \
45 static llvm::once_flag Initialize##passName##PassFlag; \
46 void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
47 llvm::call_once(Initialize##passName##PassFlag, \
48 initialize##passName##PassOnce, std::ref(Registry)); \
51 #define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis) \
52 static void *initialize##passName##PassOnce(PassRegistry &Registry) {
54 #define INITIALIZE_PASS_DEPENDENCY(depName) initialize##depName##Pass(Registry);
55 #define INITIALIZE_AG_DEPENDENCY(depName) \
56 initialize##depName##AnalysisGroup(Registry);
58 #define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis) \
59 PassInfo *PI = new PassInfo( \
60 name, arg, &passName::ID, \
61 PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \
62 Registry.registerPass(*PI, true); \
65 static llvm::once_flag Initialize##passName##PassFlag; \
66 void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
67 llvm::call_once(Initialize##passName##PassFlag, \
68 initialize##passName##PassOnce, std::ref(Registry)); \
71 #define INITIALIZE_PASS_WITH_OPTIONS(PassName, Arg, Name, Cfg, Analysis) \
72 INITIALIZE_PASS_BEGIN(PassName, Arg, Name, Cfg, Analysis) \
73 PassName::registerOptions(); \
74 INITIALIZE_PASS_END(PassName, Arg, Name, Cfg, Analysis)
76 #define INITIALIZE_PASS_WITH_OPTIONS_BEGIN(PassName, Arg, Name, Cfg, Analysis) \
77 INITIALIZE_PASS_BEGIN(PassName, Arg, Name, Cfg, Analysis) \
78 PassName::registerOptions();
97 bool is_analysis =
false)
126 const void *PassID =
nullptr,
bool isDefault =
false);
129 template <
typename Interface,
bool Default = false>
139 #define INITIALIZE_ANALYSIS_GROUP(agName, name, defaultPass) \
140 static void *initialize##agName##AnalysisGroupOnce(PassRegistry &Registry) { \
141 initialize##defaultPass##Pass(Registry); \
142 PassInfo *AI = new PassInfo(name, &agName::ID); \
143 Registry.registerAnalysisGroup(&agName::ID, 0, *AI, false, true); \
146 static llvm::once_flag Initialize##agName##AnalysisGroupFlag; \
147 void llvm::initialize##agName##AnalysisGroup(PassRegistry &Registry) { \
148 llvm::call_once(Initialize##agName##AnalysisGroupFlag, \
149 initialize##agName##AnalysisGroupOnce, \
150 std::ref(Registry)); \
153 #define INITIALIZE_AG_PASS(passName, agName, arg, name, cfg, analysis, def) \
154 static void *initialize##passName##PassOnce(PassRegistry &Registry) { \
156 initialize##agName##AnalysisGroup(Registry); \
157 PassInfo *PI = new PassInfo( \
158 name, arg, &passName::ID, \
159 PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \
160 Registry.registerPass(*PI, true); \
162 PassInfo *AI = new PassInfo(name, &agName::ID); \
163 Registry.registerAnalysisGroup(&agName::ID, &passName::ID, *AI, def, \
167 static llvm::once_flag Initialize##passName##PassFlag; \
168 void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
169 llvm::call_once(Initialize##passName##PassFlag, \
170 initialize##passName##PassOnce, std::ref(Registry)); \
173 #define INITIALIZE_AG_PASS_BEGIN(passName, agName, arg, n, cfg, analysis, def) \
174 static void *initialize##passName##PassOnce(PassRegistry &Registry) { \
176 initialize##agName##AnalysisGroup(Registry);
178 #define INITIALIZE_AG_PASS_END(passName, agName, arg, n, cfg, analysis, def) \
179 PassInfo *PI = new PassInfo( \
180 n, arg, &passName::ID, \
181 PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \
182 Registry.registerPass(*PI, true); \
184 PassInfo *AI = new PassInfo(n, &agName::ID); \
185 Registry.registerAnalysisGroup(&agName::ID, &passName::ID, *AI, def, true); \
188 static llvm::once_flag Initialize##passName##PassFlag; \
189 void llvm::initialize##passName##Pass(PassRegistry &Registry) { \
190 llvm::call_once(Initialize##passName##PassFlag, \
191 initialize##passName##PassOnce, std::ref(Registry)); \
219 #endif // LLVM_PASSSUPPORT_H
RegisterPass<t> template - This template class is used to notify the system that a Pass is available ...
const void * getTypeInfo() const
getTypeInfo - Return the id object for the pass...
This class represents lattice values for constants.
print lazy value Lazy Value Info Printer Pass
PassInfo class - An instance of this class exists for every pass known by the system,...
RegisterAnalysisGroup(PassInfo &RPB)
RegisterPass(StringRef PassArg, StringRef Name, bool CFGOnly=false, bool is_analysis=false)
static PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
StringRef getPassName() const
getPassName - Return the friendly name for the pass, never returns null
void enumeratePasses()
enumeratePasses - Iterate over the registered passes, calling the passEnumerate callback on each Pass...
RegisterAGBase(StringRef Name, const void *InterfaceID, const void *PassID=nullptr, bool isDefault=false)
PassRegistrationListener class - This class is meant to be derived from by clients that are intereste...
virtual ~PassRegistrationListener()=default
RegisterAnalysisGroup - Register a Pass as a member of an analysis group.
static const char PassName[]
StringRef - Represent a constant reference to a string, i.e.
virtual void passRegistered(const PassInfo *)
Callback functions - These functions are invoked whenever a pass is loaded or removed from the curren...
RegisterAnalysisGroup(const char *Name)
Pass interface - Implemented by all 'passes'.
PassRegistrationListener()=default
virtual void passEnumerate(const PassInfo *)
passEnumerate - Callback function invoked when someone calls enumeratePasses on this PassRegistration...
void registerPass(const PassInfo &PI, bool ShouldFree=false)
registerPass - Register a pass (by means of its PassInfo) with the registry.