[llvm] [CodeGen] Let `PassBuilder` support machine passes (PR #76320)
    via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Thu Oct 24 04:46:03 PDT 2024
    
    
  
================
@@ -1877,6 +1894,33 @@ Error PassBuilder::parseLoopPass(LoopPassManager &LPM,
                                  inconvertibleErrorCode());
 }
 
+Error PassBuilder::parseMachinePass(MachineFunctionPassManager &MFPM,
+                                    const PipelineElement &E) {
+  StringRef Name = E.Name;
+  if (!E.InnerPipeline.empty())
+    return make_error<StringError>("invalid pipeline",
+                                   inconvertibleErrorCode());
+
+#define MACHINE_MODULE_PASS(NAME, PASS_NAME, CONSTRUCTOR)                      \
+  if (Name == NAME) {                                                          \
+    MFPM.addPass(PASS_NAME());                                                 \
+    return Error::success();                                                   \
+  }
----------------
paperchalice wrote:
> I didn't get what modifies all `MachineFunctionAnalysis::Result` mean? I see that MachineModuleAnalysis and PassInstrumentationAnalysis are in this category.
Code is here: [`MachineFunctionAnalysis`](https://github.com/llvm/llvm-project/blob/main/llvm/include/llvm/CodeGen/MachineFunctionAnalysis.h). It is just a simple wrapper of `MachineFunction` (may convert `MachineFunction` to a real analysis result in future).
Machine module pass can manipulate all machine functions via `FunctionAnalysisManager`. For example machine outliner will create some dummy IR functions and corresponding machine functions, then modify machine functions to compress the module size.
https://github.com/llvm/llvm-project/pull/76320
    
    
More information about the llvm-commits
mailing list