aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Passes/PassBuilder.cpp
diff options
context:
space:
mode:
authorAkshat Oke <Akshat.Oke@amd.com>2025-07-07 12:10:28 +0530
committerGitHub <noreply@github.com>2025-07-07 12:10:28 +0530
commit0fbaeafd7ff725d6e7705d934638a7917fc8a3f1 (patch)
treeff943e5cd1c1718b97815bd640f8d0e047a402d4 /llvm/lib/Passes/PassBuilder.cpp
parent7f90a5c2d8d19680de82aee20c18a5f2b958c943 (diff)
downloadllvm-0fbaeafd7ff725d6e7705d934638a7917fc8a3f1.zip
llvm-0fbaeafd7ff725d6e7705d934638a7917fc8a3f1.tar.gz
llvm-0fbaeafd7ff725d6e7705d934638a7917fc8a3f1.tar.bz2
[CodeGen][NPM] Allow nested MF pass managers for -passes (#128852)
This allows `machine-function(p1,machine-function(...))` instead of erroring. Effectively it is flattened to a single MFPM.
Diffstat (limited to 'llvm/lib/Passes/PassBuilder.cpp')
-rw-r--r--llvm/lib/Passes/PassBuilder.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 0697a0a..874fce0 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -2218,9 +2218,18 @@ Error PassBuilder::parseLoopPass(LoopPassManager &LPM,
Error PassBuilder::parseMachinePass(MachineFunctionPassManager &MFPM,
const PipelineElement &E) {
StringRef Name = E.Name;
- if (!E.InnerPipeline.empty())
+ // Handle any nested pass managers.
+ if (!E.InnerPipeline.empty()) {
+ if (E.Name == "machine-function") {
+ MachineFunctionPassManager NestedPM;
+ if (auto Err = parseMachinePassPipeline(NestedPM, E.InnerPipeline))
+ return Err;
+ MFPM.addPass(std::move(NestedPM));
+ return Error::success();
+ }
return make_error<StringError>("invalid pipeline",
inconvertibleErrorCode());
+ }
#define MACHINE_MODULE_PASS(NAME, CREATE_PASS) \
if (Name == NAME) { \