From d919b73564fa79b5dbd6352120a23998f27a7811 Mon Sep 17 00:00:00 2001 From: Bjorn Pettersson Date: Mon, 21 Jun 2021 11:22:14 +0200 Subject: [PATCH] [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 --- llvm/lib/Passes/PassBuilder.cpp | 32 ++++++++++++++++++-------- llvm/lib/Passes/PassRegistry.def | 49 +++++++++++++++++++++++++++++----------- llvm/test/Other/print-passes.ll | 4 ++++ 3 files changed, 63 insertions(+), 22 deletions(-) diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index cd1a5a6..7f975eb 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -2407,7 +2407,7 @@ static bool isFunctionPassName(StringRef Name, CallbacksT &Callbacks) { #define FUNCTION_PASS(NAME, CREATE_PASS) \ if (Name == NAME) \ return true; -#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \ +#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ if (checkParametrizedPassName(Name, NAME)) \ return true; #define FUNCTION_ANALYSIS(NAME, CREATE_PASS) \ @@ -2431,7 +2431,7 @@ static bool isLoopPassName(StringRef Name, CallbacksT &Callbacks) { #define LOOP_PASS(NAME, CREATE_PASS) \ if (Name == NAME) \ return true; -#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \ +#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ if (checkParametrizedPassName(Name, NAME)) \ return true; #define LOOP_ANALYSIS(NAME, CREATE_PASS) \ @@ -2621,7 +2621,7 @@ Error PassBuilder::parseModulePass(ModulePassManager &MPM, MPM.addPass(createModuleToFunctionPassAdaptor(CREATE_PASS)); \ return Error::success(); \ } -#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \ +#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ if (checkParametrizedPassName(Name, NAME)) { \ auto Params = parsePassParameters(PARSER, Name, NAME); \ if (!Params) \ @@ -2635,7 +2635,7 @@ Error PassBuilder::parseModulePass(ModulePassManager &MPM, createFunctionToLoopPassAdaptor(CREATE_PASS, false, false))); \ return Error::success(); \ } -#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \ +#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ if (checkParametrizedPassName(Name, NAME)) { \ auto Params = parsePassParameters(PARSER, Name, NAME); \ if (!Params) \ @@ -2728,7 +2728,7 @@ Error PassBuilder::parseCGSCCPass(CGSCCPassManager &CGPM, CGPM.addPass(createCGSCCToFunctionPassAdaptor(CREATE_PASS)); \ return Error::success(); \ } -#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \ +#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ if (checkParametrizedPassName(Name, NAME)) { \ auto Params = parsePassParameters(PARSER, Name, NAME); \ if (!Params) \ @@ -2742,7 +2742,7 @@ Error PassBuilder::parseCGSCCPass(CGSCCPassManager &CGPM, createFunctionToLoopPassAdaptor(CREATE_PASS, false, false))); \ return Error::success(); \ } -#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \ +#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ if (checkParametrizedPassName(Name, NAME)) { \ auto Params = parsePassParameters(PARSER, Name, NAME); \ if (!Params) \ @@ -2813,7 +2813,7 @@ Error PassBuilder::parseFunctionPass(FunctionPassManager &FPM, FPM.addPass(CREATE_PASS); \ return Error::success(); \ } -#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \ +#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ if (checkParametrizedPassName(Name, NAME)) { \ auto Params = parsePassParameters(PARSER, Name, NAME); \ if (!Params) \ @@ -2842,7 +2842,7 @@ Error PassBuilder::parseFunctionPass(FunctionPassManager &FPM, FPM.addPass(createFunctionToLoopPassAdaptor(CREATE_PASS, false, false)); \ return Error::success(); \ } -#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \ +#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ if (checkParametrizedPassName(Name, NAME)) { \ auto Params = parsePassParameters(PARSER, Name, NAME); \ if (!Params) \ @@ -2900,7 +2900,7 @@ Error PassBuilder::parseLoopPass(LoopPassManager &LPM, LPM.addPass(CREATE_PASS); \ return Error::success(); \ } -#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) \ +#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ if (checkParametrizedPassName(Name, NAME)) { \ auto Params = parsePassParameters(PARSER, Name, NAME); \ if (!Params) \ @@ -3160,6 +3160,10 @@ bool PassBuilder::isAnalysisPassName(StringRef PassName) { static void printPassName(StringRef PassName, raw_ostream &OS) { OS << " " << PassName << "\n"; } +static void printPassName(StringRef PassName, StringRef Params, + raw_ostream &OS) { + OS << " " << PassName << "<" << Params << ">\n"; +} void PassBuilder::printPassNames(raw_ostream &OS) { // TODO: print pass descriptions when they are available @@ -3188,6 +3192,11 @@ void PassBuilder::printPassNames(raw_ostream &OS) { #define FUNCTION_PASS(NAME, CREATE_PASS) printPassName(NAME, OS); #include "PassRegistry.def" + OS << "Function passes with params:\n"; +#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ + printPassName(NAME, PARAMS, OS); +#include "PassRegistry.def" + OS << "Function analyses:\n"; #define FUNCTION_ANALYSIS(NAME, CREATE_PASS) printPassName(NAME, OS); #include "PassRegistry.def" @@ -3200,6 +3209,11 @@ void PassBuilder::printPassNames(raw_ostream &OS) { #define LOOP_PASS(NAME, CREATE_PASS) printPassName(NAME, OS); #include "PassRegistry.def" + OS << "Loop passes with params:\n"; +#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) \ + printPassName(NAME, PARAMS, OS); +#include "PassRegistry.def" + OS << "Loop analyses:\n"; #define LOOP_ANALYSIS(NAME, CREATE_PASS) printPassName(NAME, OS); #include "PassRegistry.def" diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def index da94495..2a639ea 100644 --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -331,43 +331,65 @@ FUNCTION_PASS("memprof", MemProfilerPass()) #undef FUNCTION_PASS #ifndef FUNCTION_PASS_WITH_PARAMS -#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) +#define FUNCTION_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) #endif FUNCTION_PASS_WITH_PARAMS("loop-unroll", [](LoopUnrollOptions Opts) { return LoopUnrollPass(Opts); }, - parseLoopUnrollOptions) + parseLoopUnrollOptions, + "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") FUNCTION_PASS_WITH_PARAMS("msan", [](MemorySanitizerOptions Opts) { return MemorySanitizerPass(Opts); }, - parseMSanPassOptions) + parseMSanPassOptions, + "recover;kernel;track-origins=N") FUNCTION_PASS_WITH_PARAMS("simplify-cfg", [](SimplifyCFGOptions Opts) { return SimplifyCFGPass(Opts); }, - parseSimplifyCFGOptions) + parseSimplifyCFGOptions, + "no-forward-switch-cond;forward-switch-cond;" + "no-switch-to-lookup;switch-to-lookup;" + "no-keep-loops;keep-loops;" + "no-hoist-common-insts;hoist-common-insts;" + "no-sink-common-insts;sink-common-insts;" + "bonus-inst-threshold=N" + ) FUNCTION_PASS_WITH_PARAMS("loop-vectorize", [](LoopVectorizeOptions Opts) { return LoopVectorizePass(Opts); }, - parseLoopVectorizeOptions) + parseLoopVectorizeOptions, + "no-interleave-forced-only;interleave-forced-only;" + "no-vectorize-forced-only;vectorize-forced-only") FUNCTION_PASS_WITH_PARAMS("mldst-motion", [](MergedLoadStoreMotionOptions Opts) { return MergedLoadStoreMotionPass(Opts); }, - parseMergedLoadStoreMotionOptions) + parseMergedLoadStoreMotionOptions, + "no-split-footer-bb;split-footer-bb") FUNCTION_PASS_WITH_PARAMS("gvn", [](GVNOptions Opts) { return GVN(Opts); }, - parseGVNOptions) + parseGVNOptions, + "no-pre;pre;" + "no-load-pre;load-pre;" + "no-split-backedge-load-pre;split-backedge-load-pre;" + "no-memdep;memdep") FUNCTION_PASS_WITH_PARAMS("print", [](StackLifetime::LivenessType Type) { return StackLifetimePrinterPass(dbgs(), Type); }, - parseStackLifetimeOptions) + parseStackLifetimeOptions, + "may;must") #undef FUNCTION_PASS_WITH_PARAMS #ifndef LOOP_ANALYSIS @@ -414,11 +436,12 @@ LOOP_PASS("loop-versioning-licm", LoopVersioningLICMPass()) #undef LOOP_PASS #ifndef LOOP_PASS_WITH_PARAMS -#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER) +#define LOOP_PASS_WITH_PARAMS(NAME, CREATE_PASS, PARSER, PARAMS) #endif LOOP_PASS_WITH_PARAMS("unswitch", - [](bool NonTrivial) { - return SimpleLoopUnswitchPass(NonTrivial); - }, - parseLoopUnswitchOptions) + [](bool NonTrivial) { + return SimpleLoopUnswitchPass(NonTrivial); + }, + parseLoopUnswitchOptions, + "no-nontrivial;nontrivial") #undef LOOP_PASS_WITH_PARAMS diff --git a/llvm/test/Other/print-passes.ll b/llvm/test/Other/print-passes.ll index a77922b..d208085 100644 --- a/llvm/test/Other/print-passes.ll +++ b/llvm/test/Other/print-passes.ll @@ -12,11 +12,15 @@ ; CHECK: no-op-cgscc ; CHECK: Function passes: ; CHECK: no-op-function +; CHECK: Function passes with params: +; CHECK: loop-unroll ; CHECK: Function analyses: ; CHECK: no-op-function ; CHECK: Function alias analyses: ; CHECK: basic-aa ; CHECK: Loop passes: ; CHECK: no-op-loop +; CHECK: Loop passes with params: +; CHECK: unswitch ; CHECK: Loop analyses: ; CHECK: no-op-loop -- 2.7.4