https://github.com/optimisan created https://github.com/llvm/llvm-project/pull/129853
None >From a01bc11d08290eab70e8e48858791cfbeb4123e6 Mon Sep 17 00:00:00 2001 From: Akshat Oke <akshat....@amd.com> Date: Wed, 5 Mar 2025 08:59:23 +0000 Subject: [PATCH] [CodeGen][NPM] Port MachineBlockPlacementStats to NPM --- .../llvm/CodeGen/MachineBlockPlacement.h | 8 ++++ llvm/include/llvm/InitializePasses.h | 2 +- .../llvm/Passes/MachinePassRegistry.def | 2 +- llvm/lib/CodeGen/CodeGen.cpp | 2 +- llvm/lib/CodeGen/MachineBlockPlacement.cpp | 45 ++++++++++++++----- 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/llvm/include/llvm/CodeGen/MachineBlockPlacement.h b/llvm/include/llvm/CodeGen/MachineBlockPlacement.h index 8003b52fa6a3c..3d23ce7001071 100644 --- a/llvm/include/llvm/CodeGen/MachineBlockPlacement.h +++ b/llvm/include/llvm/CodeGen/MachineBlockPlacement.h @@ -25,6 +25,14 @@ class MachineBlockPlacementPass MachineFunctionAnalysisManager &MFAM); }; +class MachineBlockPlacementStatsPass + : public PassInfoMixin<MachineBlockPlacementStatsPass> { + +public: + PreservedAnalyses run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM); +}; + } // namespace llvm #endif // LLVM_CODEGEN_MACHINEBLOCKPLACEMENT_H diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h index 1ed7cbe976b9b..5f8e55d783161 100644 --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -185,7 +185,7 @@ void initializeMIRNamerPass(PassRegistry &); void initializeMIRPrintingPassPass(PassRegistry &); void initializeMachineBlockFrequencyInfoWrapperPassPass(PassRegistry &); void initializeMachineBlockPlacementLegacyPass(PassRegistry &); -void initializeMachineBlockPlacementStatsPass(PassRegistry &); +void initializeMachineBlockPlacementStatsLegacyPass(PassRegistry &); void initializeMachineBranchProbabilityInfoWrapperPassPass(PassRegistry &); void initializeMachineCFGPrinterPass(PassRegistry &); void initializeMachineCSELegacyPass(PassRegistry &); diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def index 8957011ca948c..d032087fa7073 100644 --- a/llvm/include/llvm/Passes/MachinePassRegistry.def +++ b/llvm/include/llvm/Passes/MachinePassRegistry.def @@ -137,6 +137,7 @@ MACHINE_FUNCTION_ANALYSIS("virtregmap", VirtRegMapAnalysis()) #ifndef MACHINE_FUNCTION_PASS #define MACHINE_FUNCTION_PASS(NAME, CREATE_PASS) #endif +MACHINE_FUNCTION_PASS("block-placement-stats", MachineBlockPlacementStatsPass()) MACHINE_FUNCTION_PASS("dead-mi-elimination", DeadMachineInstructionElimPass()) MACHINE_FUNCTION_PASS("early-ifcvt", EarlyIfConverterPass()) MACHINE_FUNCTION_PASS("early-machinelicm", EarlyMachineLICMPass()) @@ -250,7 +251,6 @@ DUMMY_MACHINE_MODULE_PASS("mir-strip-debug", StripDebugMachineModulePass) #endif DUMMY_MACHINE_FUNCTION_PASS("bbsections-prepare", BasicBlockSectionsPass) DUMMY_MACHINE_FUNCTION_PASS("bbsections-profile-reader", BasicBlockSectionsProfileReaderPass) -DUMMY_MACHINE_FUNCTION_PASS("block-placement-stats", MachineBlockPlacementStatsPass) DUMMY_MACHINE_FUNCTION_PASS("branch-folder", BranchFolderPass) DUMMY_MACHINE_FUNCTION_PASS("break-false-deps", BreakFalseDepsPass) DUMMY_MACHINE_FUNCTION_PASS("cfguard-longjmp", CFGuardLongjmpPass) diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp index 93729f08a8721..2cc4bf14e9804 100644 --- a/llvm/lib/CodeGen/CodeGen.cpp +++ b/llvm/lib/CodeGen/CodeGen.cpp @@ -73,7 +73,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializeMIRProfileLoaderPassPass(Registry); initializeMachineBlockFrequencyInfoWrapperPassPass(Registry); initializeMachineBlockPlacementLegacyPass(Registry); - initializeMachineBlockPlacementStatsPass(Registry); + initializeMachineBlockPlacementStatsLegacyPass(Registry); initializeMachineCFGPrinterPass(Registry); initializeMachineCSELegacyPass(Registry); initializeMachineCombinerPass(Registry); diff --git a/llvm/lib/CodeGen/MachineBlockPlacement.cpp b/llvm/lib/CodeGen/MachineBlockPlacement.cpp index 322655c0c998b..b6dd374cf1b31 100644 --- a/llvm/lib/CodeGen/MachineBlockPlacement.cpp +++ b/llvm/lib/CodeGen/MachineBlockPlacement.cpp @@ -3829,21 +3829,35 @@ namespace { /// placement. This is separate from the actual placement pass so that they can /// be computed in the absence of any placement transformations or when using /// alternative placement strategies. -class MachineBlockPlacementStats : public MachineFunctionPass { +class MachineBlockPlacementStats { /// A handle to the branch probability pass. const MachineBranchProbabilityInfo *MBPI; /// A handle to the function-wide block frequency pass. const MachineBlockFrequencyInfo *MBFI; +public: + MachineBlockPlacementStats(const MachineBranchProbabilityInfo *MBPI, + const MachineBlockFrequencyInfo *MBFI) + : MBPI(MBPI), MBFI(MBFI) {} + bool run(MachineFunction &MF); +}; + +class MachineBlockPlacementStatsLegacy : public MachineFunctionPass { public: static char ID; // Pass identification, replacement for typeid - MachineBlockPlacementStats() : MachineFunctionPass(ID) { - initializeMachineBlockPlacementStatsPass(*PassRegistry::getPassRegistry()); + MachineBlockPlacementStatsLegacy() : MachineFunctionPass(ID) { + initializeMachineBlockPlacementStatsLegacyPass( + *PassRegistry::getPassRegistry()); } - bool runOnMachineFunction(MachineFunction &F) override; + bool runOnMachineFunction(MachineFunction &F) override { + auto *MBPI = + &getAnalysis<MachineBranchProbabilityInfoWrapperPass>().getMBPI(); + auto *MBFI = &getAnalysis<MachineBlockFrequencyInfoWrapperPass>().getMBFI(); + return MachineBlockPlacementStats(MBPI, MBFI).run(F); + } void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired<MachineBranchProbabilityInfoWrapperPass>(); @@ -3855,18 +3869,28 @@ class MachineBlockPlacementStats : public MachineFunctionPass { } // end anonymous namespace -char MachineBlockPlacementStats::ID = 0; +char MachineBlockPlacementStatsLegacy::ID = 0; -char &llvm::MachineBlockPlacementStatsID = MachineBlockPlacementStats::ID; +char &llvm::MachineBlockPlacementStatsID = MachineBlockPlacementStatsLegacy::ID; -INITIALIZE_PASS_BEGIN(MachineBlockPlacementStats, "block-placement-stats", +INITIALIZE_PASS_BEGIN(MachineBlockPlacementStatsLegacy, "block-placement-stats", "Basic Block Placement Stats", false, false) INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfoWrapperPass) INITIALIZE_PASS_DEPENDENCY(MachineBlockFrequencyInfoWrapperPass) -INITIALIZE_PASS_END(MachineBlockPlacementStats, "block-placement-stats", +INITIALIZE_PASS_END(MachineBlockPlacementStatsLegacy, "block-placement-stats", "Basic Block Placement Stats", false, false) -bool MachineBlockPlacementStats::runOnMachineFunction(MachineFunction &F) { +PreservedAnalyses +MachineBlockPlacementStatsPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + auto &MBPI = MFAM.getResult<MachineBranchProbabilityAnalysis>(MF); + auto &MBFI = MFAM.getResult<MachineBlockFrequencyAnalysis>(MF); + + MachineBlockPlacementStats(&MBPI, &MBFI).run(MF); + return PreservedAnalyses::all(); +} + +bool MachineBlockPlacementStats::run(MachineFunction &F) { // Check for single-block functions and skip them. if (std::next(F.begin()) == F.end()) return false; @@ -3874,9 +3898,6 @@ bool MachineBlockPlacementStats::runOnMachineFunction(MachineFunction &F) { if (!isFunctionInPrintList(F.getName())) return false; - MBPI = &getAnalysis<MachineBranchProbabilityInfoWrapperPass>().getMBPI(); - MBFI = &getAnalysis<MachineBlockFrequencyInfoWrapperPass>().getMBFI(); - for (MachineBasicBlock &MBB : F) { BlockFrequency BlockFreq = MBFI->getBlockFreq(&MBB); Statistic &NumBranches = _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits