diff options
author | Akshat Oke <Akshat.Oke@amd.com> | 2025-05-19 11:02:19 +0000 |
---|---|---|
committer | Akshat Oke <Akshat.Oke@amd.com> | 2025-05-19 11:12:09 +0000 |
commit | 8c46890c0e04500528155f1dab2300969bfef1ce (patch) | |
tree | 42e85e1e01ac33f344239d3a89d3be7a37a91042 | |
parent | 61d3ad963c9a8764a20c01c26374000d9ba5975d (diff) | |
download | llvm-users/optimisan/avoid-mmi-mir-printer.zip llvm-users/optimisan/avoid-mmi-mir-printer.tar.gz llvm-users/optimisan/avoid-mmi-mir-printer.tar.bz2 |
Avoid MMI in MIRPrinterusers/optimisan/avoid-mmi-mir-printer
-rw-r--r-- | llvm/include/llvm/CodeGen/MIRPrinter.h | 4 | ||||
-rw-r--r-- | llvm/include/llvm/CodeGen/MachineModuleSlotTracker.h | 8 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MIRPrinter.cpp | 29 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MIRPrintingPass.cpp | 14 | ||||
-rw-r--r-- | 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 37d9f8f..5187ae8 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 3bf0fde..df6488c 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 368b9eb..a4861fb 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 28aeb7f..f821507 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 8f10435..ad2a4ac 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); |