[llvm] [NVPTX] Add NewPM boilerplate to AsmPrinter (PR #215022)
Alex MacLean via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 8 13:41:56 PDT 2026
https://github.com/AlexMaclean created https://github.com/llvm/llvm-project/pull/215022
None
>From 187e9765506e02ab1f9d2b56502cd1719aadd6fe Mon Sep 17 00:00:00 2001
From: Alex Maclean <amaclean at nvidia.com>
Date: Sat, 8 Aug 2026 13:39:06 -0700
Subject: [PATCH] [NVPTX] Add NewPM boilerplate to AsmPrinter
---
llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp | 37 ++++++++++++++++++--
llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h | 37 ++++++++++++++++++++
llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp | 11 ++++++
3 files changed, 82 insertions(+), 3 deletions(-)
create mode 100644 llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h
diff --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
index b550e985aa243..9f8051ebc2ed8 100644
--- a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp
@@ -11,6 +11,7 @@
//
//===----------------------------------------------------------------------===//
+#include "NVPTXAsmPrinter.h"
#include "MCTargetDesc/NVPTXBaseInfo.h"
#include "MCTargetDesc/NVPTXInstPrinter.h"
#include "MCTargetDesc/NVPTXTargetStreamer.h"
@@ -43,6 +44,7 @@
#include "llvm/Analysis/ConstantFolding.h"
#include "llvm/CodeGen/Analysis.h"
#include "llvm/CodeGen/AsmPrinter.h"
+#include "llvm/CodeGen/AsmPrinterAnalysis.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
@@ -839,16 +841,17 @@ void NVPTXAsmPrinter::emitJumpTable(const MachineJumpTableEntry &MJT,
// llvm.loop.unroll.disable or llvm.loop.unroll.count=1.
bool NVPTXAsmPrinter::isLoopHeaderOfNoUnroll(
const MachineBasicBlock &MBB) const {
- MachineLoopInfo &LI = getAnalysis<MachineLoopInfoWrapperPass>().getLI();
+ const MachineLoopInfo *LI = GetMLI(*MF);
+ assert(LI && "NVPTXAsmPrinter requires MachineLoopInfo");
// We insert .pragma "nounroll" only to the loop header.
- if (!LI.isLoopHeader(&MBB))
+ if (!LI->isLoopHeader(&MBB))
return false;
// llvm.loop.unroll.disable is marked on the back edges of a loop. Therefore,
// we iterate through each back edge of the loop with header MBB, and check
// whether its metadata contains llvm.loop.unroll.disable.
for (const MachineBasicBlock *PMBB : MBB.predecessors()) {
- if (LI.getLoopFor(PMBB) != LI.getLoopFor(&MBB)) {
+ if (LI->getLoopFor(PMBB) != LI->getLoopFor(&MBB)) {
// Edges from other loops to MBB are not back edges.
continue;
}
@@ -2760,3 +2763,31 @@ LLVMInitializeNVPTXAsmPrinter() {
RegisterAsmPrinter<NVPTXAsmPrinter> X(getTheNVPTXTarget32());
RegisterAsmPrinter<NVPTXAsmPrinter> Y(getTheNVPTXTarget64());
}
+
+PreservedAnalyses NVPTXAsmPrinterBeginPass::run(Module &M,
+ ModuleAnalysisManager &MAM) {
+ AsmPrinter &Printer = MAM.getResult<AsmPrinterAnalysis>(M).getPrinter();
+ setupModuleAsmPrinter(M, MAM, Printer);
+ Printer.doInitialization(M);
+ return PreservedAnalyses::all();
+}
+
+PreservedAnalyses
+NVPTXAsmPrinterPass::run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM) {
+ AsmPrinter &Printer =
+ MFAM.getResult<ModuleAnalysisManagerMachineFunctionProxy>(MF)
+ .getCachedResult<AsmPrinterAnalysis>(*MF.getFunction().getParent())
+ ->getPrinter();
+ setupMachineFunctionAsmPrinter(MFAM, MF, Printer);
+ Printer.runOnMachineFunction(MF);
+ return PreservedAnalyses::all();
+}
+
+PreservedAnalyses NVPTXAsmPrinterEndPass::run(Module &M,
+ ModuleAnalysisManager &MAM) {
+ AsmPrinter &Printer = MAM.getResult<AsmPrinterAnalysis>(M).getPrinter();
+ setupModuleAsmPrinter(M, MAM, Printer);
+ Printer.doFinalization(M);
+ return PreservedAnalyses::all();
+}
diff --git a/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h
new file mode 100644
index 0000000000000..bab59ced279bd
--- /dev/null
+++ b/llvm/lib/Target/NVPTX/NVPTXAsmPrinter.h
@@ -0,0 +1,37 @@
+//===-- NVPTXAsmPrinter.h - NVPTX LLVM assembly writer ----------*- C++ -*-===//
+//
+// 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_NVPTX_NVPTXASMPRINTER_H
+#define LLVM_LIB_TARGET_NVPTX_NVPTXASMPRINTER_H
+
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class NVPTXAsmPrinterBeginPass
+ : public RequiredPassInfoMixin<NVPTXAsmPrinterBeginPass> {
+public:
+ PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+};
+
+class NVPTXAsmPrinterPass : public RequiredPassInfoMixin<NVPTXAsmPrinterPass> {
+public:
+ PreservedAnalyses run(MachineFunction &MF,
+ MachineFunctionAnalysisManager &MFAM);
+};
+
+class NVPTXAsmPrinterEndPass
+ : public RequiredPassInfoMixin<NVPTXAsmPrinterEndPass> {
+public:
+ PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
+};
+
+} // end namespace llvm
+
+#endif // LLVM_LIB_TARGET_NVPTX_NVPTXASMPRINTER_H
diff --git a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp
index 3c548bc581686..ea2c7aa8b27ed 100644
--- a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp
+++ b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp
@@ -14,6 +14,7 @@
#include "NVPTX.h"
#include "NVPTXAliasAnalysis.h"
#include "NVPTXAllocaHoisting.h"
+#include "NVPTXAsmPrinter.h"
#include "NVPTXAtomicLower.h"
#include "NVPTXCtorDtorLowering.h"
#include "NVPTXLowerAggrCopies.h"
@@ -212,6 +213,16 @@ void NVPTXTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
#define GET_PASS_REGISTRY "NVPTXPassRegistry.def"
#include "llvm/Passes/TargetPassRegistry.inc"
+ // TODO: Move this into the base CodeGenPassBuilder once all targets that
+ // currently implement it have a ported asm-printer pass.
+ if (PIC) {
+ PIC->addClassToPassName(NVPTXAsmPrinterBeginPass::name(),
+ "nvptx-asm-printer-begin");
+ PIC->addClassToPassName(NVPTXAsmPrinterPass::name(), "nvptx-asm-printer");
+ PIC->addClassToPassName(NVPTXAsmPrinterEndPass::name(),
+ "nvptx-asm-printer-end");
+ }
+
PB.registerPipelineStartEPCallback(
[this](ModulePassManager &PM, OptimizationLevel Level) {
// We do not want to fold out calls to nvvm.reflect early if the user
More information about the llvm-commits
mailing list