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 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
