|
7 | 7 | //===----------------------------------------------------------------------===//
|
8 | 8 | //
|
9 | 9 | // This file is used as the registry of passes in registerPassBuilderCallbacks
|
| 10 | +// Just put the following lines in the body of registerPassBuilderCallbacks: |
| 11 | +// #define GET_PASS_REGISTRY "<Target>PassRegistry.def" |
| 12 | +// #include "llvm/Passes/TargetPassRegistry.inc" |
10 | 13 | //
|
11 | 14 | //===----------------------------------------------------------------------===//
|
12 | 15 |
|
|
18 | 21 | #error "must provide <Target>PassRegistry.def"
|
19 | 22 | #endif
|
20 | 23 |
|
21 |
| -{ |
22 |
| - |
23 |
| - // FIXME: use std::size when MSVC_MIN >= 19.30 |
24 |
| - |
25 |
| - static constexpr bool HAVE_MODULE_ANALYSIS_ = |
26 |
| - std::array{ |
27 |
| - "", |
28 |
| -#define MODULE_ANALYSIS(NAME, CREATE_PASS) NAME, |
29 |
| -#include GET_PASS_REGISTRY |
30 |
| -#undef MODULE_ANALYSIS |
31 |
| - } |
32 |
| - .size() > 1; |
33 |
| - |
34 |
| - static constexpr bool HAVE_MODULE_PASS_ = |
35 |
| - std::array{ |
36 |
| - "", |
37 |
| -#define MODULE_PASS(NAME, CREATE_PASS) NAME, |
38 |
| -#include GET_PASS_REGISTRY |
39 |
| -#undef MODULE_PASS |
40 |
| - } |
41 |
| - .size() > 1; |
42 |
| - |
43 |
| - static constexpr bool HAVE_MODULE_PASS_WITH_PARAMS_ = |
44 |
| - std::array{ |
45 |
| - "", |
46 |
| -#define MODULE_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) NAME, |
47 |
| -#include GET_PASS_REGISTRY |
48 |
| -#undef MODULE_PASS_WITH_PARAMS |
49 |
| - } |
50 |
| - .size() > 1; |
51 |
| - |
52 |
| - static constexpr bool HAVE_FUNCTION_ANALYSIS_ = |
53 |
| - std::array{ |
54 |
| - "", |
55 |
| -#define FUNCTION_ANALYSIS(NAME, CREATE_PASS) NAME, |
56 |
| -#include GET_PASS_REGISTRY |
57 |
| -#undef FUNCTION_ANALYSIS |
58 |
| - } |
59 |
| - .size() > 1; |
60 |
| - |
61 |
| - static constexpr bool HAVE_FUNCTION_ALIAS_ANALYSIS_ = |
62 |
| - std::array{ |
63 |
| - "", |
64 |
| -#define FUNCTION_ALIAS_ANALYSIS(NAME, CREATE_PASS) NAME, |
65 |
| -#include GET_PASS_REGISTRY |
66 |
| -#undef FUNCTION_ALIAS_ANALYSIS |
67 |
| - } |
68 |
| - .size() > 1; |
69 |
| - |
70 |
| - static constexpr bool HAVE_FUNCTION_PASS_ = |
71 |
| - std::array{ |
72 |
| - "", |
73 |
| -#define FUNCTION_PASS(NAME, CREATE_PASS) NAME, |
74 |
| -#include GET_PASS_REGISTRY |
75 |
| -#undef FUNCTION_PASS |
76 |
| - } |
77 |
| - .size() > 1; |
78 |
| - |
79 |
| - static constexpr bool HAVE_FUNCTION_PASS_WITH_PARAMS_ = |
80 |
| - std::array{ |
81 |
| - "", |
82 |
| -#define FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) \ |
83 |
| - NAME, |
84 |
| -#include GET_PASS_REGISTRY |
85 |
| -#undef FUNCTION_PASS_WITH_PARAMS |
86 |
| - } |
87 |
| - .size() > 1; |
88 |
| - |
89 |
| - static constexpr bool HAVE_LOOP_ANALYSIS_ = |
90 |
| - std::array{ |
91 |
| - "", |
92 |
| -#define LOOP_ANALYSIS(NAME, CREATE_PASS) NAME, |
93 |
| -#include GET_PASS_REGISTRY |
94 |
| -#undef LOOP_ANALYSIS |
95 |
| - } |
96 |
| - .size() > 1; |
97 |
| - |
98 |
| - static constexpr bool HAVE_LOOP_PASS_ = |
99 |
| - std::array{ |
100 |
| - "", |
101 |
| -#define LOOP_PASS(NAME, CREATE_PASS) NAME, |
102 |
| -#include GET_PASS_REGISTRY |
103 |
| -#undef LOOP_PASS |
104 |
| - } |
105 |
| - .size() > 1; |
106 |
| - |
107 |
| - static constexpr bool HAVE_MACHINE_FUNCTION_ANALYSIS_ = |
108 |
| - std::array{ |
109 |
| - "", |
110 |
| -#define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS) NAME, |
111 |
| -#include GET_PASS_REGISTRY |
112 |
| -#undef MACHINE_FUNCTION_ANALYSIS |
113 |
| - } |
114 |
| - .size() > 1; |
115 |
| - |
116 |
| - static constexpr bool HAVE_MACHINE_FUNCTION_PASS_ = |
117 |
| - std::array{ |
118 |
| - "", |
119 |
| -#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) NAME, |
120 |
| -#include GET_PASS_REGISTRY |
121 |
| -#undef MACHINE_FUNCTION_PASS |
122 |
| - } |
123 |
| - .size() > 1; |
124 |
| - |
125 |
| - static constexpr bool HAVE_MACHINE_FUNCTION_PASS_WITH_PARAMS_ = |
126 |
| - std::array{ |
127 |
| - "", |
128 |
| -#define MACHINE_FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, \ |
129 |
| - PARAMS) \ |
130 |
| - NAME, |
131 |
| -#include GET_PASS_REGISTRY |
132 |
| -#undef MACHINE_FUNCTION_PASS_WITH_PARAMS |
133 |
| - } |
134 |
| - .size() > 1; |
135 |
| - |
136 |
| - if (PopulateClassToPassNames) { |
137 |
| - auto *PIC = PB.getPassInstrumentationCallbacks(); |
| 24 | +if (PopulateClassToPassNames) { |
| 25 | + auto *PIC = PB.getPassInstrumentationCallbacks(); |
138 | 26 |
|
139 | 27 | #define ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS) \
|
140 | 28 | PIC->addClassToPassName(decltype(CREATE_PASS)::name(), NAME);
|
|
165 | 53 | ADD_CLASS_PASS_TO_PASS_NAME(NAME, CREATE_PASS)
|
166 | 54 | #define MACHINE_FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, \
|
167 | 55 | PARAMS) \
|
168 |
| - ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS(NAME, CREATE_PASS) |
| 56 | + ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS(NAME, CLASS) |
169 | 57 | #include GET_PASS_REGISTRY
|
170 | 58 | #undef MODULE_ANALYSIS
|
171 | 59 | #undef MODULE_PASS
|
172 | 60 | #undef MODULE_PASS_WITH_PARAMS
|
173 | 61 | #undef FUNCTION_ANALYSIS
|
| 62 | +#undef FUNCTION_ALIAS_ANALYSIS |
174 | 63 | #undef FUNCTION_PASS
|
175 | 64 | #undef FUNCTION_PASS_WITH_PARAMS
|
176 | 65 | #undef LOOP_ANALYSIS
|
|
180 | 69 | #undef MACHINE_FUNCTION_PASS_WITH_PARAMS
|
181 | 70 | #undef ADD_CLASS_PASS_TO_PASS_NAME
|
182 | 71 | #undef ADD_CLASS_PASS_TO_PASS_NAME_WITH_PARAMS
|
183 |
| - } |
| 72 | +} |
184 | 73 |
|
185 | 74 | #define ADD_PASS(NAME, CREATE_PASS) \
|
186 | 75 | if (Name == NAME) { \
|
|
197 | 86 | return true; \
|
198 | 87 | }
|
199 | 88 |
|
200 |
| - if constexpr (HAVE_MODULE_PASS_) { |
201 |
| - PB.registerPipelineParsingCallback( |
202 |
| - [=](StringRef Name, ModulePassManager &PM, |
203 |
| - ArrayRef<PassBuilder::PipelineElement>) { |
| 89 | +PB.registerPipelineParsingCallback([=](StringRef Name, ModulePassManager &PM, |
| 90 | + ArrayRef<PassBuilder::PipelineElement>) { |
204 | 91 | #define MODULE_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
|
205 | 92 | #include GET_PASS_REGISTRY
|
206 | 93 | #undef MODULE_PASS
|
207 |
| - return false; |
208 |
| - }); |
209 |
| - } |
| 94 | + return false; |
| 95 | +}); |
210 | 96 |
|
211 |
| - if constexpr (HAVE_MODULE_PASS_WITH_PARAMS_) { |
212 |
| - PB.registerPipelineParsingCallback( |
213 |
| - [=](StringRef Name, ModulePassManager &PM, |
214 |
| - ArrayRef<PassBuilder::PipelineElement>) { |
| 97 | +PB.registerPipelineParsingCallback([=](StringRef Name, ModulePassManager &PM, |
| 98 | + ArrayRef<PassBuilder::PipelineElement>) { |
215 | 99 | #define MODULE_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) \
|
216 | 100 | ADD_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER)
|
217 | 101 | #include GET_PASS_REGISTRY
|
218 | 102 | #undef MODULE_PASS_WITH_PARAMS
|
219 |
| - return false; |
220 |
| - }); |
221 |
| - } |
| 103 | + return false; |
| 104 | +}); |
222 | 105 |
|
223 |
| - if constexpr (HAVE_FUNCTION_PASS_) { |
224 |
| - PB.registerPipelineParsingCallback( |
225 |
| - [=](StringRef Name, FunctionPassManager &PM, |
226 |
| - ArrayRef<PassBuilder::PipelineElement>) { |
| 106 | +PB.registerPipelineParsingCallback([=](StringRef Name, FunctionPassManager &PM, |
| 107 | + ArrayRef<PassBuilder::PipelineElement>) { |
227 | 108 | #define FUNCTION_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
|
228 | 109 | #include GET_PASS_REGISTRY
|
229 | 110 | #undef FUNCTION_PASS
|
230 |
| - return false; |
231 |
| - }); |
232 |
| - } |
| 111 | + return false; |
| 112 | +}); |
233 | 113 |
|
234 |
| - if constexpr (HAVE_FUNCTION_PASS_WITH_PARAMS_) { |
235 |
| - PB.registerPipelineParsingCallback( |
236 |
| - [=](StringRef Name, FunctionPassManager &PM, |
237 |
| - ArrayRef<PassBuilder::PipelineElement>) { |
| 114 | +PB.registerPipelineParsingCallback([=](StringRef Name, FunctionPassManager &PM, |
| 115 | + ArrayRef<PassBuilder::PipelineElement>) { |
238 | 116 | #define FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, PARAMS) \
|
239 | 117 | ADD_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER)
|
240 | 118 | #include GET_PASS_REGISTRY
|
241 | 119 | #undef FUNCTION_PASS_WITH_PARAMS
|
242 |
| - return false; |
243 |
| - }); |
244 |
| - } |
| 120 | + return false; |
| 121 | +}); |
245 | 122 |
|
246 |
| - if constexpr (HAVE_LOOP_PASS_) { |
247 |
| - PB.registerPipelineParsingCallback( |
248 |
| - [=](StringRef Name, LoopPassManager &PM, |
249 |
| - ArrayRef<PassBuilder::PipelineElement>) { |
| 123 | +PB.registerPipelineParsingCallback([=](StringRef Name, LoopPassManager &PM, |
| 124 | + ArrayRef<PassBuilder::PipelineElement>) { |
250 | 125 | #define LOOP_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
|
251 | 126 | #include GET_PASS_REGISTRY
|
252 |
| - return false; |
253 |
| - }); |
254 |
| - } |
| 127 | + return false; |
| 128 | +}); |
255 | 129 |
|
256 |
| - if constexpr (HAVE_MACHINE_FUNCTION_PASS_) { |
257 |
| - PB.registerPipelineParsingCallback( |
258 |
| - [=](StringRef Name, MachineFunctionPassManager &PM, |
259 |
| - ArrayRef<PassBuilder::PipelineElement>) { |
| 130 | +PB.registerPipelineParsingCallback([=](StringRef Name, |
| 131 | + MachineFunctionPassManager &PM, |
| 132 | + ArrayRef<PassBuilder::PipelineElement>) { |
260 | 133 | #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) ADD_PASS(NAME, CREATE_PASS)
|
261 | 134 | #include GET_PASS_REGISTRY
|
262 |
| - return false; |
263 |
| - }); |
264 |
| - } |
| 135 | + return false; |
| 136 | +}); |
265 | 137 |
|
266 |
| - if constexpr (HAVE_MACHINE_FUNCTION_PASS_WITH_PARAMS_) { |
267 |
| - PB.registerPipelineParsingCallback( |
268 |
| - [=](StringRef Name, FunctionPassManager &PM, |
269 |
| - ArrayRef<PassBuilder::PipelineElement>) { |
| 138 | +PB.registerPipelineParsingCallback([=](StringRef Name, FunctionPassManager &PM, |
| 139 | + ArrayRef<PassBuilder::PipelineElement>) { |
270 | 140 | #define MACHINE_FUNCTION_PASS_WITH_PARAMS(NAME, CLASS, CREATE_PASS, PARSER, \
|
271 | 141 | PARAMS) \
|
272 | 142 | ADD_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER)
|
273 | 143 | #include GET_PASS_REGISTRY
|
274 | 144 | #undef MACHINE_FUNCTION_PASS_WITH_PARAMS
|
275 |
| - return false; |
276 |
| - }); |
277 |
| - } |
| 145 | + return false; |
| 146 | +}); |
| 147 | + |
278 | 148 | #undef ADD_PASS
|
279 | 149 | #undef ADD_PASS_WITH_PARAMS
|
280 | 150 |
|
281 |
| - if constexpr (HAVE_MODULE_ANALYSIS_) { |
282 |
| - PB.registerAnalysisRegistrationCallback([](ModuleAnalysisManager &AM) { |
| 151 | +PB.registerAnalysisRegistrationCallback([](ModuleAnalysisManager &AM) { |
283 | 152 | #define MODULE_ANALYSIS(NAME, CREATE_PASS) \
|
284 | 153 | AM.registerPass([&] { return CREATE_PASS; });
|
285 | 154 | #include GET_PASS_REGISTRY
|
286 | 155 | #undef MODULE_ANALYSIS
|
287 |
| - }); |
288 |
| - } |
| 156 | +}); |
289 | 157 |
|
290 |
| - if constexpr (HAVE_FUNCTION_ANALYSIS_) { |
291 |
| - PB.registerAnalysisRegistrationCallback([](FunctionAnalysisManager &AM) { |
| 158 | +PB.registerAnalysisRegistrationCallback([](FunctionAnalysisManager &AM) { |
292 | 159 | #define FUNCTION_ANALYSIS(NAME, CREATE_PASS) \
|
293 | 160 | AM.registerPass([&] { return CREATE_PASS; });
|
294 | 161 | #include GET_PASS_REGISTRY
|
295 | 162 | #undef FUNCTION_ANALYSIS
|
296 |
| - }); |
297 |
| - } |
| 163 | +}); |
298 | 164 |
|
299 |
| - if constexpr (HAVE_FUNCTION_ALIAS_ANALYSIS_) { |
300 |
| - PB.registerParseAACallback([](StringRef Name, AAManager &AM) { |
301 |
| -#define FUNCTION_ANALYSIS(NAME, CREATE_PASS) \ |
| 165 | +PB.registerParseAACallback([](StringRef Name, AAManager &AM) { |
| 166 | +#define FUNCTION_ALIAS_ANALYSIS(NAME, CREATE_PASS) \ |
302 | 167 | if (Name == NAME) { \
|
303 | 168 | AM.registerFunctionAnalysis< \
|
304 | 169 | std::remove_reference_t<decltype(CREATE_PASS)>>(); \
|
305 | 170 | return true; \
|
306 | 171 | }
|
307 | 172 | #include GET_PASS_REGISTRY
|
308 |
| -#undef FUNCTION_ANALYSIS |
309 |
| - return false; |
310 |
| - }); |
311 |
| - } |
| 173 | +#undef FUNCTION_ALIAS_ANALYSIS |
| 174 | + return false; |
| 175 | +}); |
312 | 176 |
|
313 |
| - if constexpr (HAVE_LOOP_ANALYSIS_) { |
314 |
| - PB.registerAnalysisRegistrationCallback([](LoopAnalysisManager &AM) { |
| 177 | +PB.registerAnalysisRegistrationCallback([](LoopAnalysisManager &AM) { |
315 | 178 | #define LOOP_ANALYSIS(NAME, CREATE_PASS) \
|
316 | 179 | AM.registerPass([&] { return CREATE_PASS; });
|
317 | 180 | #include GET_PASS_REGISTRY
|
318 | 181 | #undef LOOP_ANALYSIS
|
319 |
| - }); |
320 |
| - } |
| 182 | +}); |
321 | 183 |
|
322 |
| - if constexpr (HAVE_MACHINE_FUNCTION_ANALYSIS_) { |
323 |
| - PB.registerAnalysisRegistrationCallback( |
324 |
| - [](MachineFunctionAnalysisManager &AM) { |
| 184 | +PB.registerAnalysisRegistrationCallback([](MachineFunctionAnalysisManager &AM) { |
325 | 185 | #define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS) \
|
326 | 186 | AM.registerPass([&] { return CREATE_PASS; });
|
327 | 187 | #include GET_PASS_REGISTRY
|
328 | 188 | #undef MACHINE_FUNCTION_ANALYSIS
|
329 |
| - }); |
330 |
| - } |
331 |
| -} |
| 189 | +}); |
332 | 190 |
|
333 | 191 | #undef GET_PASS_REGISTRY
|
334 | 192 | #endif // GET_PASS_REGISTRY
|
0 commit comments