[llvm-branch-commits] [SPIRV][NewPM] Port AsmPrinter (PR #219111)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Aug 26 21:59:01 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-spir-v
Author: Aiden Grossman (boomanaiden154)
<details>
<summary>Changes</summary>
Standard NewPM AsmPrinter porting.
---
Full diff: https://github.com/llvm/llvm-project/pull/219111.diff
4 Files Affected:
- (modified) llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp (+36)
- (added) llvm/lib/Target/SPIRV/SPIRVAsmPrinter.h (+38)
- (modified) llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp (+17)
- (modified) llvm/lib/Target/SPIRV/SPIRVPassRegistry.def (+3)
``````````diff
diff --git a/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp b/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp
index 9f3edf6bac747..11f8674730a2e 100644
--- a/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.cpp
@@ -11,6 +11,7 @@
//
//===----------------------------------------------------------------------===//
+#include "SPIRVAsmPrinter.h"
#include "MCTargetDesc/SPIRVInstPrinter.h"
#include "SPIRV.h"
#include "SPIRVAuxDataHandler.h"
@@ -25,10 +26,15 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/CodeGen/AsmPrinter.h"
+#include "llvm/CodeGen/AsmPrinterAnalysis.h"
#include "llvm/CodeGen/MachineConstantPool.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
+#include "llvm/CodeGen/MachinePassManager.h"
#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
+#include "llvm/IR/Analysis.h"
+#include "llvm/IR/PassManager.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCAssembler.h"
#include "llvm/MC/MCInst.h"
@@ -974,3 +980,33 @@ LLVMInitializeSPIRVAsmPrinter() {
RegisterAsmPrinter<SPIRVAsmPrinter> Y(getTheSPIRV64Target());
RegisterAsmPrinter<SPIRVAsmPrinter> Z(getTheSPIRVLogicalTarget());
}
+
+PreservedAnalyses SPIRVAsmPrinterBeginPass::run(Module &M,
+ ModuleAnalysisManager &MAM) {
+ SPIRVAsmPrinter &AsmPrinter = static_cast<SPIRVAsmPrinter &>(
+ MAM.getResult<AsmPrinterAnalysis>(M).getPrinter());
+ setupModuleAsmPrinter(M, MAM, AsmPrinter);
+ AsmPrinter.doInitialization(M);
+ return PreservedAnalyses::all();
+}
+
+PreservedAnalyses
+SPIRVAsmPrinterPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ SPIRVAsmPrinter &AsmPrinter = static_cast<SPIRVAsmPrinter &>(
+ MFAM.getResult<ModuleAnalysisManagerMachineFunctionProxy>(MF)
+ .getCachedResult<AsmPrinterAnalysis>(*MF.getFunction().getParent())
+ ->getPrinter());
+ setupMachineFunctionAsmPrinter(MFAM, MF, AsmPrinter);
+ AsmPrinter.runOnMachineFunction(MF);
+ return PreservedAnalyses::all();
+}
+
+PreservedAnalyses SPIRVAsmPrinterEndPass::run(Module &M,
+ ModuleAnalysisManager &MAM) {
+ SPIRVAsmPrinter &AsmPrinter = static_cast<SPIRVAsmPrinter &>(
+ MAM.getResult<AsmPrinterAnalysis>(M).getPrinter());
+ setupModuleAsmPrinter(M, MAM, AsmPrinter);
+ AsmPrinter.doFinalization(M);
+ return PreservedAnalyses::all();
+}
diff --git a/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.h b/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.h
new file mode 100644
index 0000000000000..2816c5d3001ab
--- /dev/null
+++ b/llvm/lib/Target/SPIRV/SPIRVAsmPrinter.h
@@ -0,0 +1,38 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIB_TARGET_SPIRV_SPIRVASMPRINTER_H
+#define LLVM_LIB_TARGET_SPIRV_SPIRVASMPRINTER_H
+
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
+#include "llvm/IR/Analysis.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class SPIRVAsmPrinterBeginPass
+ : public RequiredPassInfoMixin<SPIRVAsmPrinterBeginPass> {
+public:
+ PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+};
+
+class SPIRVAsmPrinterPass : public RequiredPassInfoMixin<SPIRVAsmPrinterPass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM);
+};
+
+class SPIRVAsmPrinterEndPass
+ : public RequiredPassInfoMixin<SPIRVAsmPrinterEndPass> {
+public:
+ PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+};
+
+} // namespace llvm
+
+#endif // LLVM_LIB_TARGET_SPIRV_SPIRVASMPRINTER_H
diff --git a/llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp b/llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp
index 9f5afe9ca5c77..f47e2e56fd8a7 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVCodeGenPassBuilder.cpp
@@ -8,6 +8,7 @@
#include "Analysis/SPIRVConvergenceRegionAnalysis.h"
#include "SPIRV.h"
+#include "SPIRVAsmPrinter.h"
#include "SPIRVTargetMachine.h"
#include "llvm/CodeGen/AtomicExpand.h"
#include "llvm/CodeGen/BranchFoldingPass.h"
@@ -70,6 +71,10 @@ class SPIRVCodeGenPassBuilder : public CodeGenPassBuilder {
Error addFastRegAlloc(PassManagerWrapper &PMW) override;
Error addOptimizedRegAlloc(PassManagerWrapper &PMW) override;
+
+ void addAsmPrinterBegin(PassManagerWrapper &PMW) override;
+ void addAsmPrinter(PassManagerWrapper &PMW) override;
+ void addAsmPrinterEnd(PassManagerWrapper &PMW) override;
};
void SPIRVCodeGenPassBuilder::addIRPasses(PassManagerWrapper &PMW) {
@@ -181,6 +186,18 @@ Error SPIRVCodeGenPassBuilder::addOptimizedRegAlloc(PassManagerWrapper &PMW) {
return Error::success();
}
+void SPIRVCodeGenPassBuilder::addAsmPrinterBegin(PassManagerWrapper &PMW) {
+ addModulePass(SPIRVAsmPrinterBeginPass(), PMW);
+}
+
+void SPIRVCodeGenPassBuilder::addAsmPrinter(PassManagerWrapper &PMW) {
+ addMachineFunctionPass(SPIRVAsmPrinterPass(), PMW);
+}
+
+void SPIRVCodeGenPassBuilder::addAsmPrinterEnd(PassManagerWrapper &PMW) {
+ addModulePass(SPIRVAsmPrinterEndPass(), PMW);
+}
+
} // namespace
void SPIRVTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB){
diff --git a/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def b/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
index 070c8bfbc4898..eb73ae03ad366 100644
--- a/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
+++ b/llvm/lib/Target/SPIRV/SPIRVPassRegistry.def
@@ -16,6 +16,8 @@
#ifndef MODULE_PASS
#define MODULE_PASS(NAME, CREATE_PASS)
#endif
+MODULE_PASS("spirv-asm-printer-begin", SPIRVAsmPrinterBeginPass())
+MODULE_PASS("spirv-asm-printer-end", SPIRVAsmPrinterEndPass())
MODULE_PASS("spirv-cbuffer-access", SPIRVCBufferAccessPass())
MODULE_PASS("spirv-emit-intrinsics", SPIRVEmitIntrinsicsPass(*static_cast<const SPIRVTargetMachine *>(this)))
MODULE_PASS("spirv-finalize-shader-linkage", SPIRVFinalizeShaderLinkagePass(*static_cast<const SPIRVTargetMachine *>(this)))
@@ -45,6 +47,7 @@ FUNCTION_ANALYSIS("spirv-convergence-region", SPIRVConvergenceRegionAnalysis())
#ifndef MACHINE_FUNCTION_PASS
#define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
#endif
+MACHINE_FUNCTION_PASS("spirv-asm-printer", SPIRVAsmPrinterPass())
MACHINE_FUNCTION_PASS("spirv-postlegalizer", SPIRVPostLegalizerPass())
MACHINE_FUNCTION_PASS("spirv-prelegalizer", SPIRVPreLegalizerPass())
MACHINE_FUNCTION_PASS("spirv-prelegalizer-combiner", SPIRVPreLegalizerCombinerPass())
``````````
</details>
https://github.com/llvm/llvm-project/pull/219111
More information about the llvm-branch-commits
mailing list