[llvm] 9a25866 - CodeGen: Avoid using MachineFunction::getMMI in MachineModuleSlotTracker (#100310)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 24 01:27:03 PDT 2024
Author: Matt Arsenault
Date: 2024-07-24T12:27:00+04:00
New Revision: 9a258664024d12a06ba8eb9344e270a9bb5f5d87
URL: https://github.com/llvm/llvm-project/commit/9a258664024d12a06ba8eb9344e270a9bb5f5d87
DIFF: https://github.com/llvm/llvm-project/commit/9a258664024d12a06ba8eb9344e270a9bb5f5d87.diff
LOG: CodeGen: Avoid using MachineFunction::getMMI in MachineModuleSlotTracker (#100310)
Added:
Modified:
llvm/include/llvm/CodeGen/MIRPrinter.h
llvm/include/llvm/CodeGen/MachineModuleSlotTracker.h
llvm/lib/CodeGen/MIRPrinter.cpp
llvm/lib/CodeGen/MIRPrintingPass.cpp
llvm/lib/CodeGen/MachineModuleSlotTracker.cpp
llvm/tools/llvm-reduce/ReducerWorkItem.cpp
llvm/unittests/MIR/MachineMetadata.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/MIRPrinter.h b/llvm/include/llvm/CodeGen/MIRPrinter.h
index d0a11e1c4a2fd..e98ef72243b8d 100644
--- a/llvm/include/llvm/CodeGen/MIRPrinter.h
+++ b/llvm/include/llvm/CodeGen/MIRPrinter.h
@@ -46,7 +46,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 MachineFunction &MF);
+void printMIR(raw_ostream &OS, const MachineModuleInfo &MMI,
+ 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 fc7635edd82c7..3bf0fde1e26ef 100644
--- a/llvm/include/llvm/CodeGen/MachineModuleSlotTracker.h
+++ b/llvm/include/llvm/CodeGen/MachineModuleSlotTracker.h
@@ -33,7 +33,8 @@ class MachineModuleSlotTracker : public ModuleSlotTracker {
bool ShouldInitializeAllMetadata);
public:
- MachineModuleSlotTracker(const MachineFunction *MF,
+ MachineModuleSlotTracker(const MachineModuleInfo &MMI,
+ const MachineFunction *MF,
bool ShouldInitializeAllMetadata = true);
~MachineModuleSlotTracker();
diff --git a/llvm/lib/CodeGen/MIRPrinter.cpp b/llvm/lib/CodeGen/MIRPrinter.cpp
index 48c3e0d7a97e6..63fb887b09b0d 100644
--- a/llvm/lib/CodeGen/MIRPrinter.cpp
+++ b/llvm/lib/CodeGen/MIRPrinter.cpp
@@ -101,13 +101,15 @@ namespace llvm {
/// format.
class MIRPrinter {
raw_ostream &OS;
+ const MachineModuleInfo &MMI;
DenseMap<const uint32_t *, unsigned> RegisterMaskIds;
/// Maps from stack object indices to operand indices which will be used when
/// printing frame index machine operands.
DenseMap<int, FrameIndexOperand> StackObjectOperandMapping;
public:
- MIRPrinter(raw_ostream &OS) : OS(OS) {}
+ MIRPrinter(raw_ostream &OS, const MachineModuleInfo &MMI)
+ : OS(OS), MMI(MMI) {}
void print(const MachineFunction &MF);
@@ -222,7 +224,7 @@ void MIRPrinter::print(const MachineFunction &MF) {
MachineFunctionProperties::Property::TracksDebugUserValues);
convert(YamlMF, MF.getRegInfo(), MF.getSubtarget().getRegisterInfo());
- MachineModuleSlotTracker MST(&MF);
+ MachineModuleSlotTracker MST(MMI, &MF);
MST.incorporateFunction(MF.getFunction());
convert(MST, YamlMF.FrameInfo, MF.getFrameInfo());
convertStackObjects(YamlMF, MF, MST);
@@ -1005,12 +1007,13 @@ void llvm::printMIR(raw_ostream &OS, const Module &M) {
Out << const_cast<Module &>(M);
}
-void llvm::printMIR(raw_ostream &OS, const MachineFunction &MF) {
+void llvm::printMIR(raw_ostream &OS, const MachineModuleInfo &MMI,
+ 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()), WriteNewDbgInfoFormat);
- MIRPrinter Printer(OS);
+ MIRPrinter Printer(OS, MMI);
Printer.print(MF);
}
diff --git a/llvm/lib/CodeGen/MIRPrintingPass.cpp b/llvm/lib/CodeGen/MIRPrintingPass.cpp
index f70c0731ffafa..fc79410f97b58 100644
--- a/llvm/lib/CodeGen/MIRPrintingPass.cpp
+++ b/llvm/lib/CodeGen/MIRPrintingPass.cpp
@@ -13,7 +13,9 @@
#include "llvm/CodeGen/MIRPrinter.h"
#include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/Passes.h"
+#include "llvm/IR/Function.h"
#include "llvm/InitializePasses.h"
using namespace llvm;
@@ -24,8 +26,13 @@ PreservedAnalyses PrintMIRPreparePass::run(Module &M, ModuleAnalysisManager &) {
}
PreservedAnalyses PrintMIRPass::run(MachineFunction &MF,
- MachineFunctionAnalysisManager &) {
- printMIR(OS, MF);
+ MachineFunctionAnalysisManager &MFAM) {
+ auto &MAMP = MFAM.getResult<ModuleAnalysisManagerMachineFunctionProxy>(MF);
+ Module *M = MF.getFunction().getParent();
+ const MachineModuleInfo &MMI =
+ MAMP.getCachedResult<MachineModuleAnalysis>(*M)->getMMI();
+
+ printMIR(OS, MMI, MF);
return PreservedAnalyses::all();
}
@@ -51,7 +58,11 @@ struct MIRPrintingPass : public MachineFunctionPass {
bool runOnMachineFunction(MachineFunction &MF) override {
std::string Str;
raw_string_ostream StrOS(Str);
- printMIR(StrOS, MF);
+
+ const MachineModuleInfo &MMI =
+ getAnalysis<MachineModuleInfoWrapperPass>().getMMI();
+
+ printMIR(StrOS, MMI, MF);
MachineFunctions.append(Str);
return false;
}
diff --git a/llvm/lib/CodeGen/MachineModuleSlotTracker.cpp b/llvm/lib/CodeGen/MachineModuleSlotTracker.cpp
index 965539ddaca8d..8f10435e7998e 100644
--- a/llvm/lib/CodeGen/MachineModuleSlotTracker.cpp
+++ b/llvm/lib/CodeGen/MachineModuleSlotTracker.cpp
@@ -64,10 +64,11 @@ void MachineModuleSlotTracker::collectMachineMDNodes(
}
MachineModuleSlotTracker::MachineModuleSlotTracker(
- const MachineFunction *MF, bool ShouldInitializeAllMetadata)
+ const MachineModuleInfo &MMI, const MachineFunction *MF,
+ bool ShouldInitializeAllMetadata)
: ModuleSlotTracker(MF->getFunction().getParent(),
ShouldInitializeAllMetadata),
- TheFunction(MF->getFunction()), TheMMI(MF->getMMI()) {
+ TheFunction(MF->getFunction()), TheMMI(MMI) {
setProcessHook([this](AbstractSlotTrackerStorage *AST, const Module *M,
bool ShouldInitializeAllMetadata) {
this->processMachineModule(AST, M, ShouldInitializeAllMetadata);
diff --git a/llvm/tools/llvm-reduce/ReducerWorkItem.cpp b/llvm/tools/llvm-reduce/ReducerWorkItem.cpp
index 78e6f72d7032d..629996d74194e 100644
--- a/llvm/tools/llvm-reduce/ReducerWorkItem.cpp
+++ b/llvm/tools/llvm-reduce/ReducerWorkItem.cpp
@@ -432,7 +432,7 @@ void ReducerWorkItem::print(raw_ostream &ROS, void *p) const {
printMIR(ROS, *M);
for (Function &F : *M) {
if (auto *MF = MMI->getMachineFunction(F))
- printMIR(ROS, *MF);
+ printMIR(ROS, *MMI, *MF);
}
} else {
M->print(ROS, /*AssemblyAnnotationWriter=*/nullptr,
diff --git a/llvm/unittests/MIR/MachineMetadata.cpp b/llvm/unittests/MIR/MachineMetadata.cpp
index 364ab187c2858..9b1c3ef1c465a 100644
--- a/llvm/unittests/MIR/MachineMetadata.cpp
+++ b/llvm/unittests/MIR/MachineMetadata.cpp
@@ -253,7 +253,7 @@ body: |
auto *NewMMO = MF->getMachineMemOperand(OldMMO, AAInfo);
MI.setMemRefs(*MF, NewMMO);
- MachineModuleSlotTracker MST(MF);
+ MachineModuleSlotTracker MST(MMI, MF);
// Print that MI with new machine metadata, which slot numbers should be
// assigned.
EXPECT_EQ("%1:gpr32 = LDRWui %0, 0 :: (load (s32) from %ir.p, "
@@ -277,7 +277,7 @@ body: |
EXPECT_EQ(Collected, Generated);
// FileCheck the output from MIR printer.
- std::string Output = print([&](raw_ostream &OS) { printMIR(OS, *MF); });
+ std::string Output = print([&](raw_ostream &OS) { printMIR(OS, MMI, *MF); });
std::string CheckString = R"(
CHECK: machineMetadataNodes:
CHECK-DAG: ![[MMDOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"domain"}
@@ -403,7 +403,7 @@ body: |
auto *NewMMO = MF->getMachineMemOperand(OldMMO, AAInfo);
MI.setMemRefs(*MF, NewMMO);
- MachineModuleSlotTracker MST(MF);
+ MachineModuleSlotTracker MST(MMI, MF);
// Print that MI with new machine metadata, which slot numbers should be
// assigned.
EXPECT_EQ("%1:gr32 = MOV32rm %0, 1, $noreg, 0, $noreg :: (load (s32) from %ir.p, "
@@ -427,7 +427,7 @@ body: |
EXPECT_EQ(Collected, Generated);
// FileCheck the output from MIR printer.
- std::string Output = print([&](raw_ostream &OS) { printMIR(OS, *MF); });
+ std::string Output = print([&](raw_ostream &OS) { printMIR(OS, MMI, *MF); });
std::string CheckString = R"(
CHECK: machineMetadataNodes:
CHECK-DAG: ![[MMDOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"domain"}
@@ -501,7 +501,7 @@ body: |
auto *NewMMO = MF->getMachineMemOperand(OldMMO, AAInfo);
MI.setMemRefs(*MF, NewMMO);
- MachineModuleSlotTracker MST(MF);
+ MachineModuleSlotTracker MST(MMI, MF);
// Print that MI with new machine metadata, which slot numbers should be
// assigned.
EXPECT_EQ(
@@ -526,7 +526,7 @@ body: |
EXPECT_EQ(Collected, Generated);
// FileCheck the output from MIR printer.
- std::string Output = print([&](raw_ostream &OS) { printMIR(OS, *MF); });
+ std::string Output = print([&](raw_ostream &OS) { printMIR(OS, MMI, *MF); });
std::string CheckString = R"(
CHECK: machineMetadataNodes:
CHECK-DAG: ![[MMDOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"domain"}
More information about the llvm-commits
mailing list