@@ -247,6 +247,19 @@ MACHINE_FUNCTION_PASS_WITH_PARAMS(
247247 parseMachineSinkingPassOptions, " enable-sink-fold" )
248248
249249MACHINE_FUNCTION_PASS_WITH_PARAMS(
250+ " virt-reg-rewriter" , " VirtRegRewriterPass" ,
251+ [](bool ClearVirtRegs) { return VirtRegRewriterPass (ClearVirtRegs); },
252+ parseVirtRegRewriterPassOptions, " no-clear-vregs;clear-vregs" )
253+
254+ #ifndef RA_PASS_WITH_PARAMS
255+ // Define MachineFunction passes that are register allocators.
256+ // This is to differentiate them from other MachineFunction passes
257+ // to be used in the --regalloc-npm option.
258+ #define RA_PASS_WITH_PARAMS (NAME, CLASS, CREATE_PASS, PARSER, PARAMS ) \
259+ MACHINE_FUNCTION_PASS_WITH_PARAMS (NAME, CLASS, CREATE_PASS, PARSER, PARAMS)
260+ #endif
261+
262+ RA_PASS_WITH_PARAMS (
250263 " regallocfast" , " RegAllocFastPass" ,
251264 [](RegAllocFastPass::Options Opts) { return RegAllocFastPass (Opts); },
252265 [](StringRef Params, const PassBuilder &PB) {
@@ -255,19 +268,15 @@ MACHINE_FUNCTION_PASS_WITH_PARAMS(
255268 " filter=reg-filter;no-clear-vregs" )
256269
257270// 'all' is the default filter.
258- MACHINE_FUNCTION_PASS_WITH_PARAMS (
271+ RA_PASS_WITH_PARAMS (
259272 " greedy" , " RAGreedyPass" ,
260273 [](RAGreedyPass::Options Opts) { return RAGreedyPass (Opts); },
261274 [](StringRef Params, const PassBuilder &PB) {
262275 return parseRegAllocGreedyFilterFunc (PB, Params);
263- }, " reg-filter"
264- )
265-
266- MACHINE_FUNCTION_PASS_WITH_PARAMS(
267- " virt-reg-rewriter" , " VirtRegRewriterPass" ,
268- [](bool ClearVirtRegs) { return VirtRegRewriterPass (ClearVirtRegs); },
269- parseVirtRegRewriterPassOptions, " no-clear-vregs;clear-vregs" )
276+ },
277+ " reg-filter" )
270278
279+ #undef RA_PASS_WITH_PARAMS
271280#undef MACHINE_FUNCTION_PASS_WITH_PARAMS
272281
273282// After a pass is converted to new pass manager, its entry should be moved from
0 commit comments