20 #ifndef LLVM_PASSSUPPORT_H 21 #define LLVM_PASSSUPPORT_H 33 #define INITIALIZE_PASS(passName, arg, name, cfg, analysis) \ 34 static void *initialize##passName##PassOnce(PassRegistry &Registry) { \ 35 PassInfo *PI = new PassInfo( \ 36 name, arg, &passName::ID, \ 37 PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \ 38 Registry.registerPass(*PI, true); \ 41 static llvm::once_flag Initialize##passName##PassFlag; \ 42 void llvm::initialize##passName##Pass(PassRegistry &Registry) { \ 43 llvm::call_once(Initialize##passName##PassFlag, \ 44 initialize##passName##PassOnce, std::ref(Registry)); \ 47 #define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis) \ 48 static void *initialize##passName##PassOnce(PassRegistry &Registry) { 50 #define INITIALIZE_PASS_DEPENDENCY(depName) initialize##depName##Pass(Registry); 51 #define INITIALIZE_AG_DEPENDENCY(depName) \ 52 initialize##depName##AnalysisGroup(Registry); 54 #define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis) \ 55 PassInfo *PI = new PassInfo( \ 56 name, arg, &passName::ID, \ 57 PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \ 58 Registry.registerPass(*PI, true); \ 61 static llvm::once_flag Initialize##passName##PassFlag; \ 62 void llvm::initialize##passName##Pass(PassRegistry &Registry) { \ 63 llvm::call_once(Initialize##passName##PassFlag, \ 64 initialize##passName##PassOnce, std::ref(Registry)); \ 67 #define INITIALIZE_PASS_WITH_OPTIONS(PassName, Arg, Name, Cfg, Analysis) \ 68 INITIALIZE_PASS_BEGIN(PassName, Arg, Name, Cfg, Analysis) \ 69 PassName::registerOptions(); \ 70 INITIALIZE_PASS_END(PassName, Arg, Name, Cfg, Analysis) 72 #define INITIALIZE_PASS_WITH_OPTIONS_BEGIN(PassName, Arg, Name, Cfg, Analysis) \ 73 INITIALIZE_PASS_BEGIN(PassName, Arg, Name, Cfg, Analysis) \ 74 PassName::registerOptions(); 93 bool is_analysis =
false)
122 const void *PassID =
nullptr,
bool isDefault =
false);
125 template <
typename Interface,
bool Default = false>
135 #define INITIALIZE_ANALYSIS_GROUP(agName, name, defaultPass) \ 136 static void *initialize##agName##AnalysisGroupOnce(PassRegistry &Registry) { \ 137 initialize##defaultPass##Pass(Registry); \ 138 PassInfo *AI = new PassInfo(name, &agName::ID); \ 139 Registry.registerAnalysisGroup(&agName::ID, 0, *AI, false, true); \ 142 static llvm::once_flag Initialize##agName##AnalysisGroupFlag; \ 143 void llvm::initialize##agName##AnalysisGroup(PassRegistry &Registry) { \ 144 llvm::call_once(Initialize##agName##AnalysisGroupFlag, \ 145 initialize##agName##AnalysisGroupOnce, \ 146 std::ref(Registry)); \ 149 #define INITIALIZE_AG_PASS(passName, agName, arg, name, cfg, analysis, def) \ 150 static void *initialize##passName##PassOnce(PassRegistry &Registry) { \ 152 initialize##agName##AnalysisGroup(Registry); \ 153 PassInfo *PI = new PassInfo( \ 154 name, arg, &passName::ID, \ 155 PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \ 156 Registry.registerPass(*PI, true); \ 158 PassInfo *AI = new PassInfo(name, &agName::ID); \ 159 Registry.registerAnalysisGroup(&agName::ID, &passName::ID, *AI, def, \ 163 static llvm::once_flag Initialize##passName##PassFlag; \ 164 void llvm::initialize##passName##Pass(PassRegistry &Registry) { \ 165 llvm::call_once(Initialize##passName##PassFlag, \ 166 initialize##passName##PassOnce, std::ref(Registry)); \ 169 #define INITIALIZE_AG_PASS_BEGIN(passName, agName, arg, n, cfg, analysis, def) \ 170 static void *initialize##passName##PassOnce(PassRegistry &Registry) { \ 172 initialize##agName##AnalysisGroup(Registry); 174 #define INITIALIZE_AG_PASS_END(passName, agName, arg, n, cfg, analysis, def) \ 175 PassInfo *PI = new PassInfo( \ 176 n, arg, &passName::ID, \ 177 PassInfo::NormalCtor_t(callDefaultCtor<passName>), cfg, analysis); \ 178 Registry.registerPass(*PI, true); \ 180 PassInfo *AI = new PassInfo(n, &agName::ID); \ 181 Registry.registerAnalysisGroup(&agName::ID, &passName::ID, *AI, def, true); \ 184 static llvm::once_flag Initialize##passName##PassFlag; \ 185 void llvm::initialize##passName##Pass(PassRegistry &Registry) { \ 186 llvm::call_once(Initialize##passName##PassFlag, \ 187 initialize##passName##PassOnce, std::ref(Registry)); \ 206 void enumeratePasses();
215 #endif // LLVM_PASSSUPPORT_H Pass interface - Implemented by all 'passes'.
RegisterPass<t> template - This template class is used to notify the system that a Pass is available ...
static PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
This class represents lattice values for constants.
amdgpu Simplify well known AMD library false FunctionCallee Value const Twine & Name
RegisterPass(StringRef PassArg, StringRef Name, bool CFGOnly=false, bool is_analysis=false)
RegisterAnalysisGroup(const char *Name)
virtual void passRegistered(const PassInfo *)
Callback functions - These functions are invoked whenever a pass is loaded or removed from the curren...
const void * getTypeInfo() const
getTypeInfo - Return the id object for the pass...
virtual void passEnumerate(const PassInfo *)
passEnumerate - Callback function invoked when someone calls enumeratePasses on this PassRegistration...
PassInfo class - An instance of this class exists for every pass known by the system, and can be obtained from a live Pass by calling its getPassInfo() method.
print lazy value Lazy Value Info Printer Pass
RegisterAnalysisGroup - Register a Pass as a member of an analysis group.
StringRef getPassName() const
getPassName - Return the friendly name for the pass, never returns null
PassRegistrationListener class - This class is meant to be derived from by clients that are intereste...
StringRef - Represent a constant reference to a string, i.e.
void registerPass(const PassInfo &PI, bool ShouldFree=false)
registerPass - Register a pass (by means of its PassInfo) with the registry.
RegisterAnalysisGroup(PassInfo &RPB)