#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) \
#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) \
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) \
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) \
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) \
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) \
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) \
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) \
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) \
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
#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"
#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"
#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<stack-lifetime>",
[](StackLifetime::LivenessType Type) {
return StackLifetimePrinterPass(dbgs(), Type);
},
- parseStackLifetimeOptions)
+ parseStackLifetimeOptions,
+ "may;must")
#undef FUNCTION_PASS_WITH_PARAMS
#ifndef LOOP_ANALYSIS
#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