[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