[llvm-branch-commits] [CodeGen][NewPM] Adjust pipeline for AsmPrinter (PR #182795)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Feb 22 20:12:11 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Aiden Grossman (boomanaiden154)
<details>
<summary>Changes</summary>
AsmPrinter needs to be split into three passes (begin, per MF, end) to
avoid the need to materialize all machine functions at the same time.
Update the CodeGenPassBuilder hooks for this.
---
Full diff: https://github.com/llvm/llvm-project/pull/182795.diff
4 Files Affected:
- (modified) llvm/include/llvm/Passes/CodeGenPassBuilder.h (+26-10)
- (modified) llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp (+14-2)
- (modified) llvm/lib/Target/AMDGPU/R600TargetMachine.cpp (+18-3)
- (modified) llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp (+18-3)
``````````diff
diff --git a/llvm/include/llvm/Passes/CodeGenPassBuilder.h b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
index e3829d104f280..6d470c3e03ffe 100644
--- a/llvm/include/llvm/Passes/CodeGenPassBuilder.h
+++ b/llvm/include/llvm/Passes/CodeGenPassBuilder.h
@@ -490,10 +490,21 @@ template <typename DerivedT, typename TargetMachineT> class CodeGenPassBuilder {
void addPostBBSections(PassManagerWrapper &PMW) const {}
- void addAsmPrinter(PassManagerWrapper &PMW, CreateMCStreamer) const {
+ void addAsmPrinterBegin(PassManagerWrapper &PMW,
+ CreateMCStreamer CreateStreamer) const {
+ llvm_unreachable("addAsmPrinterBegin is not overriden");
+ }
+
+ void addAsmPrinter(PassManagerWrapper &PMW,
+ CreateMCStreamer CreateStreamer) const {
llvm_unreachable("addAsmPrinter is not overridden");
}
+ void addAsmPrinterEnd(PassManagerWrapper &PMW,
+ CreateMCStreamer CreateStreamer) const {
+ llvm_unreachable("addAsmPrinterEnd is not overriden");
+ }
+
/// Utilities for targets to add passes to the pass manager.
///
@@ -588,6 +599,13 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::buildPipeline(
addISelPasses(PMW);
flushFPMsToMPM(PMW);
+ CreateMCStreamer CreateStreamer = [&Out, DwoOut, FileType,
+ &Ctx](TargetMachine &TM) {
+ return TM.createMCStreamer(Out, DwoOut, FileType, Ctx);
+ };
+ if (PrintAsm)
+ derived().addAsmPrinterBegin(PMW, CreateStreamer);
+
if (PrintMIR)
addModulePass(PrintMIRPreparePass(Out), PMW, /*Force=*/true);
@@ -601,17 +619,15 @@ Error CodeGenPassBuilder<Derived, TargetMachineT>::buildPipeline(
addMachineFunctionPass(MachineVerifierPass(), PMW);
if (PrintAsm) {
- derived().addAsmPrinter(
- PMW, [this, &Out, DwoOut, FileType, &Ctx](TargetMachine &TM) {
- return this->TM.createMCStreamer(Out, DwoOut, FileType, Ctx);
- });
+ derived().addAsmPrinter(PMW, CreateStreamer);
+ flushFPMsToMPM(PMW, /*FreeMachineFunctions=*/true);
+ derived().addAsmPrinterEnd(PMW, CreateStreamer);
+ } else {
+ if (PrintMIR)
+ addMachineFunctionPass(PrintMIRPass(Out), PMW, /*Force=*/true);
+ flushFPMsToMPM(PMW, /*FreeMachineFunctions=*/true);
}
- if (PrintMIR)
- addMachineFunctionPass(PrintMIRPass(Out), PMW, /*Force=*/true);
-
- flushFPMsToMPM(PMW, /*FreeMachineFunctions=*/true);
-
return verifyStartStop(*StartStopInfo);
}
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
index 433a9065b8bc1..f0a129c6b1fa9 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
@@ -148,7 +148,9 @@ class AMDGPUCodeGenPassBuilder
void addCodeGenPrepare(PassManagerWrapper &PMW) const;
void addPreISel(PassManagerWrapper &PMW) const;
void addILPOpts(PassManagerWrapper &PMWM) const;
+ void addAsmPrinterBegin(PassManagerWrapper &PMW, CreateMCStreamer) const;
void addAsmPrinter(PassManagerWrapper &PMW, CreateMCStreamer) const;
+ void addAsmPrinterEnd(PassManagerWrapper &PMW, CreateMCStreamer) const;
Error addInstSelector(PassManagerWrapper &PMW) const;
void addPreRewrite(PassManagerWrapper &PMW) const;
void addMachineSSAOptimization(PassManagerWrapper &PMW) const;
@@ -2339,11 +2341,21 @@ void AMDGPUCodeGenPassBuilder::addILPOpts(PassManagerWrapper &PMW) const {
Base::addILPOpts(PMW);
}
-void AMDGPUCodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW,
- CreateMCStreamer) const {
+void AMDGPUCodeGenPassBuilder::addAsmPrinterBegin(
+ PassManagerWrapper &PMW, CreateMCStreamer CreateStreamer) const {
+ // TODO: Add AsmPrinterBegin
+}
+
+void AMDGPUCodeGenPassBuilder::addAsmPrinter(
+ PassManagerWrapper &PMW, CreateMCStreamer CreateStreamer) const {
// TODO: Add AsmPrinter.
}
+void AMDGPUCodeGenPassBuilder::addAsmPrinterEnd(
+ PassManagerWrapper &PMW, CreateMCStreamer CreateStreamer) const {
+ // TODO: Add AsmPrinterEnd
+}
+
Error AMDGPUCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) const {
addMachineFunctionPass(AMDGPUISelDAGToDAGPass(TM), PMW);
addMachineFunctionPass(SIFixSGPRCopiesPass(), PMW);
diff --git a/llvm/lib/Target/AMDGPU/R600TargetMachine.cpp b/llvm/lib/Target/AMDGPU/R600TargetMachine.cpp
index fecf32942bddd..40fd074317876 100644
--- a/llvm/lib/Target/AMDGPU/R600TargetMachine.cpp
+++ b/llvm/lib/Target/AMDGPU/R600TargetMachine.cpp
@@ -58,7 +58,12 @@ class R600CodeGenPassBuilder
PassInstrumentationCallbacks *PIC);
void addPreISel(PassManagerWrapper &PMW) const;
- void addAsmPrinter(PassManagerWrapper &PMW, CreateMCStreamer) const;
+ void addAsmPrinterBegin(PassManagerWrapper &PMW,
+ CreateMCStreamer CreateStreamer) const;
+ void addAsmPrinter(PassManagerWrapper &PMW,
+ CreateMCStreamer CreateStreamer) const;
+ void addAsmPrinterEnd(PassManagerWrapper &PMW,
+ CreateMCStreamer CreateStreamer) const;
Error addInstSelector(PassManagerWrapper &PMW) const;
};
@@ -192,11 +197,21 @@ void R600CodeGenPassBuilder::addPreISel(PassManagerWrapper &PMW) const {
// TODO: Add passes pre instruction selection.
}
-void R600CodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW,
- CreateMCStreamer) const {
+void R600CodeGenPassBuilder::addAsmPrinterBegin(
+ PassManagerWrapper &PMW, CreateMCStreamer CreateStreamer) const {
+ // TODO: Add AsmPrinterBegin
+}
+
+void R600CodeGenPassBuilder::addAsmPrinter(
+ PassManagerWrapper &PMW, CreateMCStreamer CreateStreamer) const {
// TODO: Add AsmPrinter.
}
+void R600CodeGenPassBuilder::addAsmPrinterEnd(
+ PassManagerWrapper &PMW, CreateMCStreamer CreateStreamer) const {
+ // TODO: Add AsmPrinterEnd
+}
+
Error R600CodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) const {
// TODO: Add instruction selector.
return Error::success();
diff --git a/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp b/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp
index e7607452e56b1..084fa7d750891 100644
--- a/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp
@@ -55,7 +55,12 @@ class X86CodeGenPassBuilder
void addPreEmitPass2(PassManagerWrapper &PMW) const;
// TODO(boomanaiden154): We need to add addRegAssignAndRewriteOptimized here
// once it is available to support AMX.
- void addAsmPrinter(PassManagerWrapper &PMW, CreateMCStreamer) const;
+ void addAsmPrinterBegin(PassManagerWrapper &PMW,
+ CreateMCStreamer CreateStreamer) const;
+ void addAsmPrinter(PassManagerWrapper &PMW,
+ CreateMCStreamer CreateStreamer) const;
+ void addAsmPrinterEnd(PassManagerWrapper &PMW,
+ CreateMCStreamer CreateStreamer) const;
};
void X86CodeGenPassBuilder::addIRPasses(PassManagerWrapper &PMW) const {
@@ -250,9 +255,19 @@ void X86CodeGenPassBuilder::addPreEmitPass2(PassManagerWrapper &PMW) const {
}
}
+void X86CodeGenPassBuilder::addAsmPrinterBegin(
+ PassManagerWrapper &PMW, CreateMCStreamer CreateStreamer) const {
+ // TODO: Add AsmPrinterBegin
+}
+
void X86CodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW,
- CreateMCStreamer) const {
- // TODO: Add AsmPrinter.
+ CreateMCStreamer) const {
+ // TODO: Add AsmPrinter
+}
+
+void X86CodeGenPassBuilder::addAsmPrinterEnd(
+ PassManagerWrapper &PMW, CreateMCStreamer CreateStreamer) const {
+ // TODO: Add AsmPrinterEnd
}
} // namespace
``````````
</details>
https://github.com/llvm/llvm-project/pull/182795
More information about the llvm-branch-commits
mailing list