Skip to content

Commit d919b73

Browse files
committed
[NewPM] Print passes with params when using "opt -print-passes"
Make sure we also print passes with params when using "opt -print-passes". Differential Revision: https://reviews.llvm.org/D104625
1 parent 3f873e9 commit d919b73

File tree

3 files changed

+63
-22
lines changed

3 files changed

+63
-22
lines changed

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2407,7 +2407,7 @@ static bool isFunctionPassName(StringRef Name, CallbacksT &Callbacks) {
24072407
#define FUNCTION_PASS(NAME, CREATE_PASS) \
24082408
if (Name == NAME) \
24092409
return true;
2410-
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \
2410+
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
24112411
if (checkParametrizedPassName(Name, NAME)) \
24122412
return true;
24132413
#define FUNCTION_ANALYSIS(NAME, CREATE_PASS) \
@@ -2431,7 +2431,7 @@ static bool isLoopPassName(StringRef Name, CallbacksT &Callbacks) {
24312431
#define LOOP_PASS(NAME, CREATE_PASS) \
24322432
if (Name == NAME) \
24332433
return true;
2434-
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \
2434+
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
24352435
if (checkParametrizedPassName(Name, NAME)) \
24362436
return true;
24372437
#define LOOP_ANALYSIS(NAME, CREATE_PASS) \
@@ -2621,7 +2621,7 @@ Error PassBuilder::parseModulePass(ModulePassManager &MPM,
26212621
MPM.addPass(createModuleToFunctionPassAdaptor(CREATE_PASS)); \
26222622
return Error::success(); \
26232623
}
2624-
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \
2624+
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
26252625
if (checkParametrizedPassName(Name, NAME)) { \
26262626
auto Params = parsePassParameters(PARSER, Name, NAME); \
26272627
if (!Params) \
@@ -2635,7 +2635,7 @@ Error PassBuilder::parseModulePass(ModulePassManager &MPM,
26352635
createFunctionToLoopPassAdaptor(CREATE_PASS, false, false))); \
26362636
return Error::success(); \
26372637
}
2638-
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \
2638+
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
26392639
if (checkParametrizedPassName(Name, NAME)) { \
26402640
auto Params = parsePassParameters(PARSER, Name, NAME); \
26412641
if (!Params) \
@@ -2728,7 +2728,7 @@ Error PassBuilder::parseCGSCCPass(CGSCCPassManager &CGPM,
27282728
CGPM.addPass(createCGSCCToFunctionPassAdaptor(CREATE_PASS)); \
27292729
return Error::success(); \
27302730
}
2731-
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \
2731+
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
27322732
if (checkParametrizedPassName(Name, NAME)) { \
27332733
auto Params = parsePassParameters(PARSER, Name, NAME); \
27342734
if (!Params) \
@@ -2742,7 +2742,7 @@ Error PassBuilder::parseCGSCCPass(CGSCCPassManager &CGPM,
27422742
createFunctionToLoopPassAdaptor(CREATE_PASS, false, false))); \
27432743
return Error::success(); \
27442744
}
2745-
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \
2745+
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
27462746
if (checkParametrizedPassName(Name, NAME)) { \
27472747
auto Params = parsePassParameters(PARSER, Name, NAME); \
27482748
if (!Params) \
@@ -2813,7 +2813,7 @@ Error PassBuilder::parseFunctionPass(FunctionPassManager &FPM,
28132813
FPM.addPass(CREATE_PASS); \
28142814
return Error::success(); \
28152815
}
2816-
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \
2816+
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
28172817
if (checkParametrizedPassName(Name, NAME)) { \
28182818
auto Params = parsePassParameters(PARSER, Name, NAME); \
28192819
if (!Params) \
@@ -2842,7 +2842,7 @@ Error PassBuilder::parseFunctionPass(FunctionPassManager &FPM,
28422842
FPM.addPass(createFunctionToLoopPassAdaptor(CREATE_PASS, false, false)); \
28432843
return Error::success(); \
28442844
}
2845-
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \
2845+
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
28462846
if (checkParametrizedPassName(Name, NAME)) { \
28472847
auto Params = parsePassParameters(PARSER, Name, NAME); \
28482848
if (!Params) \
@@ -2900,7 +2900,7 @@ Error PassBuilder::parseLoopPass(LoopPassManager &LPM,
29002900
LPM.addPass(CREATE_PASS); \
29012901
return Error::success(); \
29022902
}
2903-
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \
2903+
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
29042904
if (checkParametrizedPassName(Name, NAME)) { \
29052905
auto Params = parsePassParameters(PARSER, Name, NAME); \
29062906
if (!Params) \
@@ -3160,6 +3160,10 @@ bool PassBuilder::isAnalysisPassName(StringRef PassName) {
31603160
static void printPassName(StringRef PassName, raw_ostream &OS) {
31613161
OS << " " << PassName << "\n";
31623162
}
3163+
static void printPassName(StringRef PassName, StringRef Params,
3164+
raw_ostream &OS) {
3165+
OS << " " << PassName << "<" << Params << ">\n";
3166+
}
31633167

31643168
void PassBuilder::printPassNames(raw_ostream &OS) {
31653169
// TODO: print pass descriptions when they are available
@@ -3188,6 +3192,11 @@ void PassBuilder::printPassNames(raw_ostream &OS) {
31883192
#define FUNCTION_PASS(NAME, CREATE_PASS) printPassName(NAME, OS);
31893193
#include "PassRegistry.def"
31903194

3195+
OS << "Function passes with params:\n";
3196+
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
3197+
printPassName(NAME, PARAMS, OS);
3198+
#include "PassRegistry.def"
3199+
31913200
OS << "Function analyses:\n";
31923201
#define FUNCTION_ANALYSIS(NAME, CREATE_PASS) printPassName(NAME, OS);
31933202
#include "PassRegistry.def"
@@ -3200,6 +3209,11 @@ void PassBuilder::printPassNames(raw_ostream &OS) {
32003209
#define LOOP_PASS(NAME, CREATE_PASS) printPassName(NAME, OS);
32013210
#include "PassRegistry.def"
32023211

3212+
OS << "Loop passes with params:\n";
3213+
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \
3214+
printPassName(NAME, PARAMS, OS);
3215+
#include "PassRegistry.def"
3216+
32033217
OS << "Loop analyses:\n";
32043218
#define LOOP_ANALYSIS(NAME, CREATE_PASS) printPassName(NAME, OS);
32053219
#include "PassRegistry.def"

llvm/lib/Passes/PassRegistry.def

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -331,43 +331,65 @@ FUNCTION_PASS("memprof", MemProfilerPass())
331331
#undef FUNCTION_PASS
332332

333333
#ifndef FUNCTION_PASS_WITH_PARAMS
334-
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER)
334+
#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS)
335335
#endif
336336
FUNCTION_PASS_WITH_PARAMS("loop-unroll",
337337
[](LoopUnrollOptions Opts) {
338338
return LoopUnrollPass(Opts);
339339
},
340-
parseLoopUnrollOptions)
340+
parseLoopUnrollOptions,
341+
"O0;O1;O2;O3;full-unroll-max=N;"
342+
"no-partial;partial;"
343+
"no-peeling;peeling;"
344+
"no-profile-peeling;profile-peeling;"
345+
"no-runtime;runtime;"
346+
"no-upperbound;upperbound")
341347
FUNCTION_PASS_WITH_PARAMS("msan",
342348
[](MemorySanitizerOptions Opts) {
343349
return MemorySanitizerPass(Opts);
344350
},
345-
parseMSanPassOptions)
351+
parseMSanPassOptions,
352+
"recover;kernel;track-origins=N")
346353
FUNCTION_PASS_WITH_PARAMS("simplify-cfg",
347354
[](SimplifyCFGOptions Opts) {
348355
return SimplifyCFGPass(Opts);
349356
},
350-
parseSimplifyCFGOptions)
357+
parseSimplifyCFGOptions,
358+
"no-forward-switch-cond;forward-switch-cond;"
359+
"no-switch-to-lookup;switch-to-lookup;"
360+
"no-keep-loops;keep-loops;"
361+
"no-hoist-common-insts;hoist-common-insts;"
362+
"no-sink-common-insts;sink-common-insts;"
363+
"bonus-inst-threshold=N"
364+
)
351365
FUNCTION_PASS_WITH_PARAMS("loop-vectorize",
352366
[](LoopVectorizeOptions Opts) {
353367
return LoopVectorizePass(Opts);
354368
},
355-
parseLoopVectorizeOptions)
369+
parseLoopVectorizeOptions,
370+
"no-interleave-forced-only;interleave-forced-only;"
371+
"no-vectorize-forced-only;vectorize-forced-only")
356372
FUNCTION_PASS_WITH_PARAMS("mldst-motion",
357373
[](MergedLoadStoreMotionOptions Opts) {
358374
return MergedLoadStoreMotionPass(Opts);
359375
},
360-
parseMergedLoadStoreMotionOptions)
376+
parseMergedLoadStoreMotionOptions,
377+
"no-split-footer-bb;split-footer-bb")
361378
FUNCTION_PASS_WITH_PARAMS("gvn",
362379
[](GVNOptions Opts) {
363380
return GVN(Opts);
364381
},
365-
parseGVNOptions)
382+
parseGVNOptions,
383+
"no-pre;pre;"
384+
"no-load-pre;load-pre;"
385+
"no-split-backedge-load-pre;split-backedge-load-pre;"
386+
"no-memdep;memdep")
366387
FUNCTION_PASS_WITH_PARAMS("print<stack-lifetime>",
367388
[](StackLifetime::LivenessType Type) {
368389
return StackLifetimePrinterPass(dbgs(), Type);
369390
},
370-
parseStackLifetimeOptions)
391+
parseStackLifetimeOptions,
392+
"may;must")
371393
#undef FUNCTION_PASS_WITH_PARAMS
372394

373395
#ifndef LOOP_ANALYSIS
@@ -414,11 +436,12 @@ LOOP_PASS("loop-versioning-licm", LoopVersioningLICMPass())
414436
#undef LOOP_PASS
415437

416438
#ifndef LOOP_PASS_WITH_PARAMS
417-
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER)
439+
#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS)
418440
#endif
419441
LOOP_PASS_WITH_PARAMS("unswitch",
420-
[](bool NonTrivial) {
421-
return SimpleLoopUnswitchPass(NonTrivial);
422-
},
423-
parseLoopUnswitchOptions)
442+
[](bool NonTrivial) {
443+
return SimpleLoopUnswitchPass(NonTrivial);
444+
},
445+
parseLoopUnswitchOptions,
446+
"no-nontrivial;nontrivial")
424447
#undef LOOP_PASS_WITH_PARAMS

llvm/test/Other/print-passes.ll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,15 @@
1212
; CHECK: no-op-cgscc
1313
; CHECK: Function passes:
1414
; CHECK: no-op-function
15+
; CHECK: Function passes with params:
16+
; CHECK: loop-unroll<O0;O1;O2;O3;full-unroll-max=N;no-partial;partial;no-peeling;peeling;no-profile-peeling;profile-peeling;no-runtime;runtime;no-upperbound;upperbound>
1517
; CHECK: Function analyses:
1618
; CHECK: no-op-function
1719
; CHECK: Function alias analyses:
1820
; CHECK: basic-aa
1921
; CHECK: Loop passes:
2022
; CHECK: no-op-loop
23+
; CHECK: Loop passes with params:
24+
; CHECK: unswitch<no-nontrivial;nontrivial>
2125
; CHECK: Loop analyses:
2226
; CHECK: no-op-loop

0 commit comments

Comments
 (0)