diff options
author | Akshat Oke <Akshat.Oke@amd.com> | 2025-07-07 12:10:28 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-07 12:10:28 +0530 |
commit | 0fbaeafd7ff725d6e7705d934638a7917fc8a3f1 (patch) | |
tree | ff943e5cd1c1718b97815bd640f8d0e047a402d4 /llvm/lib/Passes/PassBuilder.cpp | |
parent | 7f90a5c2d8d19680de82aee20c18a5f2b958c943 (diff) | |
download | llvm-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.cpp | 11 |
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) { \ |