[llvm] [PassBuilder] Add callback invoking to PassBuilder string API (PR #157153)
Min-Yih Hsu via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 16 11:20:16 PDT 2025
================
@@ -528,6 +528,102 @@ PassBuilder::PassBuilder(TargetMachine *TM, PipelineTuningOptions PTO,
#include "llvm/Passes/MachinePassRegistry.def"
});
}
+ auto parseLevelParam = [](StringRef P) -> Expected<OptimizationLevel> {
+ if (P == "O0") return OptimizationLevel::O0;
+ if (P == "O1") return OptimizationLevel::O1;
+ if (P == "O2") return OptimizationLevel::O2;
+ if (P == "O3") return OptimizationLevel::O3;
+ if (P == "Os") return OptimizationLevel::Os;
+ if (P == "Oz") return OptimizationLevel::Oz;
+ return make_error<StringError>(
+ formatv("invalid optimization level '{}'", P).str(),
+ inconvertibleErrorCode());
+ };
+
+ // Module-level callbacks without LTO phase
+ this->registerPipelineParsingCallback(
+ [this, parseLevelParam](StringRef Name, ModulePassManager &PM,
+ ArrayRef<PassBuilder::PipelineElement>) {
+#define MODULE_CALLBACK(NAME, INVOKE) \
+ if (PassBuilder::checkParametrizedPassName(Name, NAME)) { \
+ auto L = PassBuilder::parsePassParameters(parseLevelParam, Name, NAME); \
+ if (!L) \
+ return (errs() << NAME ": " << toString(L.takeError()) << '\n', false); \
+ this->INVOKE(PM, L.get()); \
----------------
mshockwave wrote:
ditto `this`
https://github.com/llvm/llvm-project/pull/157153
More information about the llvm-commits
mailing list