Skip to content

Commit 1dbc2aa

Browse files
authored
[PassBuilder] Parse machine function analyses inside require/invalidate (#96634)
Now we have several machine function analyses but forgot to support them in `parseMachinePass`.
1 parent be00190 commit 1dbc2aa

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1910,6 +1910,18 @@ Error PassBuilder::parseMachinePass(MachineFunctionPassManager &MFPM,
19101910
MFPM.addPass(CREATE_PASS(Params.get())); \
19111911
return Error::success(); \
19121912
}
1913+
#define MACHINE_FUNCTION_ANALYSIS(NAME, CREATE_PASS) \
1914+
if (Name == "require<" NAME ">") { \
1915+
MFPM.addPass( \
1916+
RequireAnalysisPass<std::remove_reference_t<decltype(CREATE_PASS)>, \
1917+
MachineFunction>()); \
1918+
return Error::success(); \
1919+
} \
1920+
if (Name == "invalidate<" NAME ">") { \
1921+
MFPM.addPass(InvalidateAnalysisPass< \
1922+
std::remove_reference_t<decltype(CREATE_PASS)>>()); \
1923+
return Error::success(); \
1924+
}
19131925
#include "llvm/Passes/MachinePassRegistry.def"
19141926

19151927
for (auto &C : MachineFunctionPipelineParsingCallbacks)

llvm/test/tools/llc/new-pm/pipeline.mir

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
# RUN: llc -mtriple=x86_64-pc-linux-gnu -x mir -passes=no-op-machine-function --print-pipeline-passes -filetype=null < %s | FileCheck %s --match-full-lines
2+
# RUN: llc -mtriple=x86_64-pc-linux-gnu -x mir -passes='require<machine-dom-tree>,print<machine-dom-tree>' -print-pipeline-passes < %s | FileCheck --check-prefix=ANALYSIS %s
23

34
# CHECK: function(machine-function(no-op-machine-function)),PrintMIRPreparePass,function(machine-function(print))
45

6+
# ANALYSIS: require<machine-dom-tree>,print<machine-dom-tree>
7+
58
---
69
name: f
710
body: |

0 commit comments

Comments
 (0)