Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/llvm/Passes/TargetPassRegistry.inc is written in an unsupported language. File is not indexed.

0001 //===- TargetPassRegistry.inc - Registry of passes --------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This file is used as the registry of passes in registerPassBuilderCallbacks
0010 // Just put the following lines in the body of registerPassBuilderCallbacks:
0011 //  #define GET_PASS_REGISTRY "<Target>PassRegistry.def"
0012 //  #include "llvm/Passes/TargetPassRegistry.inc"
0013 //
0014 //===----------------------------------------------------------------------===//
0015 
0016 // NOTE: NO INCLUDE GUARD DESIRED!
0017 
0018 #ifdef GET_PASS_REGISTRY
0019 
0020 #if !__has_include(GET_PASS_REGISTRY)
0021 #error "must provide <Target>PassRegistry.def"
0022 #endif
0023 
0024 auto *PIC = PB.getPassInstrumentationCallbacks();
0025 if (PIC) {
0026   PIC->registerClassToPassNameCallback([this, PIC]() {
0027     // MSVC requires this to be captured if it's used inside decltype.
0028     // Other compilers consider it an unused lambda capture.
0029     (void)this;
0030 #define ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)                         \
0031   PIC->addClassToPassName(decltype(CREATE_PASS)::name(), NAME);
0032 #define ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS(NAME, CLASS)                   \
0033   PIC->addClassToPassName(CLASS, NAME);
0034 
0035 #define MODULE_ANALYSIS(NAME, CREATE_PASS)                                     \
0036   ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
0037 #define MODULE_PASS(NAME, CREATE_PASS)                                         \
0038   ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
0039 #define MODULE_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS)      \
0040   ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS(NAME, CLASS)
0041 #define FUNCTION_ANALYSIS(NAME, CREATE_PASS)                                   \
0042   ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
0043 #define FUNCTION_ALIAS_ANALYSIS(NAME, CREATE_PASS)                             \
0044   ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
0045 #define FUNCTION_PASS(NAME, CREATE_PASS)                                       \
0046   ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
0047 #define FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS)    \
0048   ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS(NAME, CLASS)
0049 #define LOOP_ANALYSIS(NAME, CREATE_PASS)                                       \
0050   ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
0051 #define LOOP_PASS(NAME, CREATE_PASS)                                           \
0052   ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
0053 #define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS)                           \
0054   ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
0055 #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)                               \
0056   ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
0057 #define MACHINE_FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER,    \
0058                                           PARAMS)                              \
0059   ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS(NAME, CLASS)
0060 #include GET_PASS_REGISTRY
0061 #undef MODULE_ANALYSIS
0062 #undef MODULE_PASS
0063 #undef MODULE_PASS_WITH_PARAMS
0064 #undef FUNCTION_ANALYSIS
0065 #undef FUNCTION_ALIAS_ANALYSIS
0066 #undef FUNCTION_PASS
0067 #undef FUNCTION_PASS_WITH_PARAMS
0068 #undef LOOP_ANALYSIS
0069 #undef LOOP_PASS
0070 #undef MACHINE_FUNCTION_ANALYSIS
0071 #undef MACHINE_FUNCTION_PASS
0072 #undef MACHINE_FUNCTION_PASS_WITH_PARAMS
0073 #undef ADD_CLASS_PASS_TO_PASS_NAME
0074 #undef ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS
0075   });
0076 }
0077 
0078 #define ADD_PASS(NAME, CREATE_PASS)                                            \
0079   if (Name == NAME) {                                                          \
0080     PM.addPass(CREATE_PASS);                                                   \
0081     return true;                                                               \
0082   }
0083 
0084 #define ADD_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER)                        \
0085   if (PassBuilder::checkParametrizedPassName(Name, NAME)) {                    \
0086     auto Params = PassBuilder::parsePassParameters(PARSER, Name, NAME);        \
0087     if (!Params) {                                                             \
0088       errs() << NAME ": " << toString(Params.takeError()) << '\n';             \
0089       return false;                                                            \
0090     }                                                                          \
0091     PM.addPass(CREATE_PASS(Params.get()));                                     \
0092     return true;                                                               \
0093   }
0094 
0095 PB.registerPipelineParsingCallback([=](StringRef Name, ModulePassManager &PM,
0096                                        ArrayRef<PassBuilder::PipelineElement>) {
0097 #define MODULE_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
0098 #include GET_PASS_REGISTRY
0099 #undef MODULE_PASS
0100   return false;
0101 });
0102 
0103 PB.registerPipelineParsingCallback([=](StringRef Name, ModulePassManager &PM,
0104                                        ArrayRef<PassBuilder::PipelineElement>) {
0105 #define MODULE_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS)      \
0106   ADD_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER)
0107 #include GET_PASS_REGISTRY
0108 #undef MODULE_PASS_WITH_PARAMS
0109   return false;
0110 });
0111 
0112 PB.registerPipelineParsingCallback([=](StringRef Name, FunctionPassManager &PM,
0113                                        ArrayRef<PassBuilder::PipelineElement>) {
0114 #define FUNCTION_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
0115 #include GET_PASS_REGISTRY
0116 #undef FUNCTION_PASS
0117   return false;
0118 });
0119 
0120 PB.registerPipelineParsingCallback([=](StringRef Name, FunctionPassManager &PM,
0121                                        ArrayRef<PassBuilder::PipelineElement>) {
0122 #define FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS)    \
0123   ADD_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER)
0124 #include GET_PASS_REGISTRY
0125 #undef FUNCTION_PASS_WITH_PARAMS
0126   return false;
0127 });
0128 
0129 PB.registerPipelineParsingCallback([=](StringRef Name, LoopPassManager &PM,
0130                                        ArrayRef<PassBuilder::PipelineElement>) {
0131 #define LOOP_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
0132 #include GET_PASS_REGISTRY
0133   return false;
0134 });
0135 
0136 PB.registerPipelineParsingCallback([=](StringRef Name,
0137                                        MachineFunctionPassManager &PM,
0138                                        ArrayRef<PassBuilder::PipelineElement>) {
0139 #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
0140 #include GET_PASS_REGISTRY
0141   return false;
0142 });
0143 
0144 PB.registerPipelineParsingCallback([=](StringRef Name, FunctionPassManager &PM,
0145                                        ArrayRef<PassBuilder::PipelineElement>) {
0146 #define MACHINE_FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER,    \
0147                                           PARAMS)                              \
0148   ADD_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER)
0149 #include GET_PASS_REGISTRY
0150 #undef MACHINE_FUNCTION_PASS_WITH_PARAMS
0151   return false;
0152 });
0153 
0154 #undef ADD_PASS
0155 #undef ADD_PASS_WITH_PARAMS
0156 
0157 PB.registerAnalysisRegistrationCallback([](ModuleAnalysisManager &AM) {
0158 #define MODULE_ANALYSIS(NAME, CREATE_PASS)                                     \
0159   AM.registerPass([&] { return CREATE_PASS; });
0160 #include GET_PASS_REGISTRY
0161 #undef MODULE_ANALYSIS
0162 });
0163 
0164 PB.registerAnalysisRegistrationCallback([](FunctionAnalysisManager &AM) {
0165 #define FUNCTION_ANALYSIS(NAME, CREATE_PASS)                                   \
0166   AM.registerPass([&] { return CREATE_PASS; });
0167 #include GET_PASS_REGISTRY
0168 #undef FUNCTION_ANALYSIS
0169 });
0170 
0171 PB.registerParseAACallback([](StringRef Name, AAManager &AM) {
0172 #define FUNCTION_ALIAS_ANALYSIS(NAME, CREATE_PASS)                             \
0173   if (Name == NAME) {                                                          \
0174     AM.registerFunctionAnalysis<                                               \
0175         std::remove_reference_t<decltype(CREATE_PASS)>>();                     \
0176     return true;                                                               \
0177   }
0178 #include GET_PASS_REGISTRY
0179 #undef FUNCTION_ALIAS_ANALYSIS
0180   return false;
0181 });
0182 
0183 PB.registerAnalysisRegistrationCallback([](LoopAnalysisManager &AM) {
0184 #define LOOP_ANALYSIS(NAME, CREATE_PASS)                                       \
0185   AM.registerPass([&] { return CREATE_PASS; });
0186 #include GET_PASS_REGISTRY
0187 #undef LOOP_ANALYSIS
0188 });
0189 
0190 PB.registerAnalysisRegistrationCallback([](MachineFunctionAnalysisManager &AM) {
0191 #define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS)                           \
0192   AM.registerPass([&] { return CREATE_PASS; });
0193 #include GET_PASS_REGISTRY
0194 #undef MACHINE_FUNCTION_ANALYSIS
0195 });
0196 
0197 #undef GET_PASS_REGISTRY
0198 #endif // GET_PASS_REGISTRY