[llvm] Avoid MMI in MIRPrinter (PR #140530)
Akshat Oke via llvm-commits
llvm-commits at lists.llvm.org
Mon May 19 04:15:41 PDT 2025
https://github.com/optimisan created https://github.com/llvm/llvm-project/pull/140530
None
>From 8c46890c0e04500528155f1dab2300969bfef1ce Mon Sep 17 00:00:00 2001
From: Akshat Oke <Akshat.Oke at amd.com>
Date: Mon, 19 May 2025 11:02:19 +0000
Subject: [PATCH] Avoid MMI in MIRPrinter
---
llvm/include/llvm/CodeGen/MIRPrinter.h | 4 +--
.../llvm/CodeGen/MachineModuleSlotTracker.h | 8 +++--
llvm/lib/CodeGen/MIRPrinter.cpp | 29 ++++++++++++++-----
llvm/lib/CodeGen/MIRPrintingPass.cpp | 14 ++++-----
llvm/lib/CodeGen/MachineModuleSlotTracker.cpp | 9 +++---
5 files changed, 39 insertions(+), 25 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/MIRPrinter.h b/llvm/include/llvm/CodeGen/MIRPrinter.h
index 37d9f8ff502db..5187ae8ed3cd4 100644
--- a/llvm/include/llvm/CodeGen/MIRPrinter.h
+++ b/llvm/include/llvm/CodeGen/MIRPrinter.h
@@ -49,8 +49,8 @@ void printMIR(raw_ostream &OS, const Module &M);
/// Print a machine function using the MIR serialization format to the given
/// output stream.
-void printMIR(raw_ostream &OS, const MachineModuleInfo &MMI,
- const MachineFunction &MF);
+void printMIR(raw_ostream &OS, MachineModuleInfo *MMI,
+ FunctionAnalysisManager *MFA, const MachineFunction &MF);
/// Determine a possible list of successors of a basic block based on the
/// basic block machine operand being used inside the block. This should give
diff --git a/llvm/include/llvm/CodeGen/MachineModuleSlotTracker.h b/llvm/include/llvm/CodeGen/MachineModuleSlotTracker.h
index 3bf0fde1e26ef..df6488c0b0ed2 100644
--- a/llvm/include/llvm/CodeGen/MachineModuleSlotTracker.h
+++ b/llvm/include/llvm/CodeGen/MachineModuleSlotTracker.h
@@ -19,9 +19,12 @@ class MachineModuleInfo;
class MachineFunction;
class Module;
+using MFGetterFnT = std::function<MachineFunction *(const Function &)>;
+
class MachineModuleSlotTracker : public ModuleSlotTracker {
const Function &TheFunction;
- const MachineModuleInfo &TheMMI;
+ MFGetterFnT MachineFunctionGetterFn;
+
unsigned MDNStartSlot = 0, MDNEndSlot = 0;
void processMachineFunctionMetadata(AbstractSlotTrackerStorage *AST,
@@ -33,8 +36,7 @@ class MachineModuleSlotTracker : public ModuleSlotTracker {
bool ShouldInitializeAllMetadata);
public:
- MachineModuleSlotTracker(const MachineModuleInfo &MMI,
- const MachineFunction *MF,
+ MachineModuleSlotTracker(MFGetterFnT Fn, const MachineFunction *MF,
bool ShouldInitializeAllMetadata = true);
~MachineModuleSlotTracker();
diff --git a/llvm/lib/CodeGen/MIRPrinter.cpp b/llvm/lib/CodeGen/MIRPrinter.cpp
index 368b9eb1ff469..a4861fbc38025 100644
--- a/llvm/lib/CodeGen/MIRPrinter.cpp
+++ b/llvm/lib/CodeGen/MIRPrinter.cpp
@@ -24,9 +24,11 @@
#include "llvm/CodeGen/MachineConstantPool.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/MachineFunctionAnalysis.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineJumpTableInfo.h"
#include "llvm/CodeGen/MachineMemOperand.h"
+#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineModuleSlotTracker.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
@@ -103,8 +105,8 @@ struct MFPrintState {
/// Synchronization scope names registered with LLVMContext.
SmallVector<StringRef, 8> SSNs;
- MFPrintState(const MachineModuleInfo &MMI, const MachineFunction &MF)
- : MST(MMI, &MF) {}
+ MFPrintState(MFGetterFnT Fn, const MachineFunction &MF)
+ : MST(std::move(Fn), &MF) {}
};
} // end anonymous namespace
@@ -168,9 +170,10 @@ static void convertCalledGlobals(yaml::MachineFunction &YMF,
const MachineFunction &MF,
MachineModuleSlotTracker &MST);
-static void printMF(raw_ostream &OS, const MachineModuleInfo &MMI,
+static void printMF(raw_ostream &OS, MFGetterFnT Fn,
const MachineFunction &MF) {
- MFPrintState State(MMI, MF);
+ MFPrintState State(std::move(Fn), MF);
+
State.RegisterMaskIds = initRegisterMaskIds(MF);
yaml::MachineFunction YamlMF;
@@ -983,11 +986,23 @@ void llvm::printMIR(raw_ostream &OS, const Module &M) {
Out << const_cast<Module &>(M);
}
-void llvm::printMIR(raw_ostream &OS, const MachineModuleInfo &MMI,
- const MachineFunction &MF) {
+void llvm::printMIR(raw_ostream &OS, MachineModuleInfo *MMI,
+ FunctionAnalysisManager *FAM, const MachineFunction &MF) {
// RemoveDIs: as there's no textual form for DbgRecords yet, print debug-info
// in dbg.value format.
ScopedDbgInfoFormatSetter FormatSetter(
const_cast<Function &>(MF.getFunction()), UseNewDbgInfoFormat);
- printMF(OS, MMI, MF);
+ if (MMI) {
+ printMF(
+ OS, [&](const Function &F) { return MMI->getMachineFunction(F); }, MF);
+ } else {
+ printMF(
+ OS,
+ [&](const Function &F) {
+ return &FAM->getResult<MachineFunctionAnalysis>(
+ const_cast<Function &>(F))
+ .getMF();
+ },
+ MF);
+ }
}
diff --git a/llvm/lib/CodeGen/MIRPrintingPass.cpp b/llvm/lib/CodeGen/MIRPrintingPass.cpp
index 28aeb7f116c6c..f8215076ec009 100644
--- a/llvm/lib/CodeGen/MIRPrintingPass.cpp
+++ b/llvm/lib/CodeGen/MIRPrintingPass.cpp
@@ -27,12 +27,10 @@ PreservedAnalyses PrintMIRPreparePass::run(Module &M, ModuleAnalysisManager &) {
PreservedAnalyses PrintMIRPass::run(MachineFunction &MF,
MachineFunctionAnalysisManager &MFAM) {
- auto &MAMP = MFAM.getResult<ModuleAnalysisManagerMachineFunctionProxy>(MF);
- Module *M = MF.getFunction().getParent();
- const MachineModuleInfo &MMI =
- MAMP.getCachedResult<MachineModuleAnalysis>(*M)->getMMI();
+ auto &FAM = MFAM.getResult<FunctionAnalysisManagerMachineFunctionProxy>(MF)
+ .getManager();
- printMIR(OS, MMI, MF);
+ printMIR(OS, nullptr, &FAM, MF);
return PreservedAnalyses::all();
}
@@ -59,10 +57,10 @@ struct MIRPrintingPass : public MachineFunctionPass {
std::string Str;
raw_string_ostream StrOS(Str);
- const MachineModuleInfo &MMI =
- getAnalysis<MachineModuleInfoWrapperPass>().getMMI();
+ MachineModuleInfo *MMI =
+ &getAnalysis<MachineModuleInfoWrapperPass>().getMMI();
- printMIR(StrOS, MMI, MF);
+ printMIR(StrOS, MMI, nullptr, MF);
MachineFunctions.append(Str);
return false;
}
diff --git a/llvm/lib/CodeGen/MachineModuleSlotTracker.cpp b/llvm/lib/CodeGen/MachineModuleSlotTracker.cpp
index 8f10435e7998e..ad2a4acc690d4 100644
--- a/llvm/lib/CodeGen/MachineModuleSlotTracker.cpp
+++ b/llvm/lib/CodeGen/MachineModuleSlotTracker.cpp
@@ -39,7 +39,7 @@ void MachineModuleSlotTracker::processMachineModule(
if (&F != &TheFunction)
continue;
MDNStartSlot = AST->getNextMetadataSlot();
- if (auto *MF = TheMMI.getMachineFunction(F))
+ if (auto *MF = MachineFunctionGetterFn(F))
processMachineFunctionMetadata(AST, *MF);
MDNEndSlot = AST->getNextMetadataSlot();
break;
@@ -52,7 +52,7 @@ void MachineModuleSlotTracker::processMachineFunction(
bool ShouldInitializeAllMetadata) {
if (!ShouldInitializeAllMetadata && F == &TheFunction) {
MDNStartSlot = AST->getNextMetadataSlot();
- if (auto *MF = TheMMI.getMachineFunction(*F))
+ if (auto *MF = MachineFunctionGetterFn(*F))
processMachineFunctionMetadata(AST, *MF);
MDNEndSlot = AST->getNextMetadataSlot();
}
@@ -64,11 +64,10 @@ void MachineModuleSlotTracker::collectMachineMDNodes(
}
MachineModuleSlotTracker::MachineModuleSlotTracker(
- const MachineModuleInfo &MMI, const MachineFunction *MF,
- bool ShouldInitializeAllMetadata)
+ MFGetterFnT Fn, const MachineFunction *MF, bool ShouldInitializeAllMetadata)
: ModuleSlotTracker(MF->getFunction().getParent(),
ShouldInitializeAllMetadata),
- TheFunction(MF->getFunction()), TheMMI(MMI) {
+ TheFunction(MF->getFunction()), MachineFunctionGetterFn(Fn) {
setProcessHook([this](AbstractSlotTrackerStorage *AST, const Module *M,
bool ShouldInitializeAllMetadata) {
this->processMachineModule(AST, M, ShouldInitializeAllMetadata);
More information about the llvm-commits
mailing list