llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-x86 Author: Akshat Oke (optimisan) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/114745.diff 7 Files Affected: - (modified) llvm/include/llvm/CodeGen/MachineCycleAnalysis.h (+21) - (modified) llvm/include/llvm/InitializePasses.h (+1-1) - (modified) llvm/include/llvm/Passes/MachinePassRegistry.def (+2-1) - (modified) llvm/lib/CodeGen/CodeGen.cpp (+1-1) - (modified) llvm/lib/CodeGen/MachineCycleAnalysis.cpp (+29-9) - (modified) llvm/lib/Passes/PassBuilder.cpp (+1) - (modified) llvm/test/CodeGen/X86/cycle-info.mir (+2) ``````````diff diff --git a/llvm/include/llvm/CodeGen/MachineCycleAnalysis.h b/llvm/include/llvm/CodeGen/MachineCycleAnalysis.h index 1888dd053ce65e..64cf30e6ddf3b8 100644 --- a/llvm/include/llvm/CodeGen/MachineCycleAnalysis.h +++ b/llvm/include/llvm/CodeGen/MachineCycleAnalysis.h @@ -16,6 +16,7 @@ #include "llvm/ADT/GenericCycleInfo.h" #include "llvm/CodeGen/MachineFunctionPass.h" +#include "llvm/CodeGen/MachinePassManager.h" #include "llvm/CodeGen/MachineSSAContext.h" namespace llvm { @@ -46,6 +47,26 @@ class MachineCycleInfoWrapperPass : public MachineFunctionPass { // version. bool isCycleInvariant(const MachineCycle *Cycle, MachineInstr &I); +class MachineCycleAnalysis : public AnalysisInfoMixin<MachineCycleAnalysis> { + friend AnalysisInfoMixin<MachineCycleAnalysis>; + static AnalysisKey Key; + +public: + using Result = MachineCycleInfo; + + Result run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM); +}; + +class MachineCycleInfoPrinterPass + : public PassInfoMixin<MachineCycleInfoPrinterPass> { + raw_ostream &OS; + +public: + explicit MachineCycleInfoPrinterPass(raw_ostream &OS) : OS(OS) {} + PreservedAnalyses run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM); +}; + } // end namespace llvm #endif // LLVM_CODEGEN_MACHINECYCLEANALYSIS_H diff --git a/llvm/include/llvm/InitializePasses.h b/llvm/include/llvm/InitializePasses.h index 54c070401ec8a4..b040e7c096d1f5 100644 --- a/llvm/include/llvm/InitializePasses.h +++ b/llvm/include/llvm/InitializePasses.h @@ -191,7 +191,7 @@ void initializeMachineCFGPrinterPass(PassRegistry &); void initializeMachineCSELegacyPass(PassRegistry &); void initializeMachineCombinerPass(PassRegistry &); void initializeMachineCopyPropagationPass(PassRegistry &); -void initializeMachineCycleInfoPrinterPassPass(PassRegistry &); +void initializeMachineCycleInfoPrinterLegacyPass(PassRegistry &); void initializeMachineCycleInfoWrapperPassPass(PassRegistry &); void initializeMachineDominanceFrontierPass(PassRegistry &); void initializeMachineDominatorTreeWrapperPassPass(PassRegistry &); diff --git a/llvm/include/llvm/Passes/MachinePassRegistry.def b/llvm/include/llvm/Passes/MachinePassRegistry.def index 9d12a120ff7ac6..bfe8caba0ce0b3 100644 --- a/llvm/include/llvm/Passes/MachinePassRegistry.def +++ b/llvm/include/llvm/Passes/MachinePassRegistry.def @@ -101,6 +101,7 @@ MACHINE_FUNCTION_ANALYSIS("live-vars", LiveVariablesAnalysis()) MACHINE_FUNCTION_ANALYSIS("machine-block-freq", MachineBlockFrequencyAnalysis()) MACHINE_FUNCTION_ANALYSIS("machine-branch-prob", MachineBranchProbabilityAnalysis()) +MACHINE_FUNCTION_ANALYSIS("machine-cycles", MachineCycleAnalysis()) MACHINE_FUNCTION_ANALYSIS("machine-dom-tree", MachineDominatorTreeAnalysis()) MACHINE_FUNCTION_ANALYSIS("machine-loops", MachineLoopAnalysis()) MACHINE_FUNCTION_ANALYSIS("machine-opt-remark-emitter", @@ -151,6 +152,7 @@ MACHINE_FUNCTION_PASS("print<machine-branch-prob>", MACHINE_FUNCTION_PASS("print<machine-dom-tree>", MachineDominatorTreePrinterPass(dbgs())) MACHINE_FUNCTION_PASS("print<machine-loops>", MachineLoopPrinterPass(dbgs())) +MACHINE_FUNCTION_PASS("print<machine-cycles>", MachineCycleInfoPrinterPass(dbgs())) MACHINE_FUNCTION_PASS("print<machine-post-dom-tree>", MachinePostDominatorTreePrinterPass(dbgs())) MACHINE_FUNCTION_PASS("print<slot-indexes>", SlotIndexesPrinterPass(dbgs())) @@ -241,7 +243,6 @@ DUMMY_MACHINE_FUNCTION_PASS("post-RA-sched", PostRASchedulerPass) DUMMY_MACHINE_FUNCTION_PASS("postmisched", PostMachineSchedulerPass) DUMMY_MACHINE_FUNCTION_PASS("postra-machine-sink", PostRAMachineSinkingPass) DUMMY_MACHINE_FUNCTION_PASS("postrapseudos", ExpandPostRAPseudosPass) -DUMMY_MACHINE_FUNCTION_PASS("print-machine-cycles", MachineCycleInfoPrinterPass) DUMMY_MACHINE_FUNCTION_PASS("print-machine-uniformity", MachineUniformityInfoPrinterPass) DUMMY_MACHINE_FUNCTION_PASS("processimpdefs", ProcessImplicitDefsPass) DUMMY_MACHINE_FUNCTION_PASS("prologepilog", PrologEpilogInserterPass) diff --git a/llvm/lib/CodeGen/CodeGen.cpp b/llvm/lib/CodeGen/CodeGen.cpp index 39fba1d0b527ef..adddb8daaa0e91 100644 --- a/llvm/lib/CodeGen/CodeGen.cpp +++ b/llvm/lib/CodeGen/CodeGen.cpp @@ -78,7 +78,7 @@ void llvm::initializeCodeGen(PassRegistry &Registry) { initializeMachineCSELegacyPass(Registry); initializeMachineCombinerPass(Registry); initializeMachineCopyPropagationPass(Registry); - initializeMachineCycleInfoPrinterPassPass(Registry); + initializeMachineCycleInfoPrinterLegacyPass(Registry); initializeMachineCycleInfoWrapperPassPass(Registry); initializeMachineDominatorTreeWrapperPassPass(Registry); initializeMachineFunctionPrinterPassPass(Registry); diff --git a/llvm/lib/CodeGen/MachineCycleAnalysis.cpp b/llvm/lib/CodeGen/MachineCycleAnalysis.cpp index 57f7a098ac1757..6e58439960e26b 100644 --- a/llvm/lib/CodeGen/MachineCycleAnalysis.cpp +++ b/llvm/lib/CodeGen/MachineCycleAnalysis.cpp @@ -54,43 +54,63 @@ void MachineCycleInfoWrapperPass::releaseMemory() { F = nullptr; } +AnalysisKey MachineCycleAnalysis::Key; + +MachineCycleInfo +MachineCycleAnalysis::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + MachineCycleInfo MCI; + MCI.compute(MF); + return MCI; +} + namespace { -class MachineCycleInfoPrinterPass : public MachineFunctionPass { +class MachineCycleInfoPrinterLegacy : public MachineFunctionPass { public: static char ID; - MachineCycleInfoPrinterPass(); + MachineCycleInfoPrinterLegacy(); bool runOnMachineFunction(MachineFunction &F) override; void getAnalysisUsage(AnalysisUsage &AU) const override; }; } // namespace -char MachineCycleInfoPrinterPass::ID = 0; +char MachineCycleInfoPrinterLegacy::ID = 0; -MachineCycleInfoPrinterPass::MachineCycleInfoPrinterPass() +MachineCycleInfoPrinterLegacy::MachineCycleInfoPrinterLegacy() : MachineFunctionPass(ID) { - initializeMachineCycleInfoPrinterPassPass(*PassRegistry::getPassRegistry()); + initializeMachineCycleInfoPrinterLegacyPass(*PassRegistry::getPassRegistry()); } -INITIALIZE_PASS_BEGIN(MachineCycleInfoPrinterPass, "print-machine-cycles", +INITIALIZE_PASS_BEGIN(MachineCycleInfoPrinterLegacy, "print-machine-cycles", "Print Machine Cycle Info Analysis", true, true) INITIALIZE_PASS_DEPENDENCY(MachineCycleInfoWrapperPass) -INITIALIZE_PASS_END(MachineCycleInfoPrinterPass, "print-machine-cycles", +INITIALIZE_PASS_END(MachineCycleInfoPrinterLegacy, "print-machine-cycles", "Print Machine Cycle Info Analysis", true, true) -void MachineCycleInfoPrinterPass::getAnalysisUsage(AnalysisUsage &AU) const { +void MachineCycleInfoPrinterLegacy::getAnalysisUsage(AnalysisUsage &AU) const { AU.setPreservesAll(); AU.addRequired<MachineCycleInfoWrapperPass>(); MachineFunctionPass::getAnalysisUsage(AU); } -bool MachineCycleInfoPrinterPass::runOnMachineFunction(MachineFunction &F) { +bool MachineCycleInfoPrinterLegacy::runOnMachineFunction(MachineFunction &F) { auto &CI = getAnalysis<MachineCycleInfoWrapperPass>(); CI.print(errs()); return false; } +PreservedAnalyses +MachineCycleInfoPrinterPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + OS << "MachineCycleInfo for function: " << MF.getName() << "\n"; + + auto &MCI = MFAM.getResult<MachineCycleAnalysis>(MF); + MCI.print(OS); + return PreservedAnalyses::all(); +} + bool llvm::isCycleInvariant(const MachineCycle *Cycle, MachineInstr &I) { MachineFunction *MF = I.getParent()->getParent(); MachineRegisterInfo *MRI = &MF->getRegInfo(); diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index a879918005cad8..b9148eae848706 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -104,6 +104,7 @@ #include "llvm/CodeGen/MachineBlockFrequencyInfo.h" #include "llvm/CodeGen/MachineBranchProbabilityInfo.h" #include "llvm/CodeGen/MachineCSE.h" +#include "llvm/CodeGen/MachineCycleAnalysis.h" #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineFunctionAnalysis.h" #include "llvm/CodeGen/MachineLICM.h" diff --git a/llvm/test/CodeGen/X86/cycle-info.mir b/llvm/test/CodeGen/X86/cycle-info.mir index 358ccb2c5e731d..2523d64110d065 100644 --- a/llvm/test/CodeGen/X86/cycle-info.mir +++ b/llvm/test/CodeGen/X86/cycle-info.mir @@ -1,5 +1,7 @@ # RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=print-machine-cycles -o - %s 2>&1 | FileCheck %s +# RUN: llc -mtriple=x86_64-unknown-linux-gnu -passes="print<machine-cycles>" -o - %s 2>&1 | FileCheck %s + ... --- # CHECK-LABEL: MachineCycleInfo for function: empty `````````` </details> https://github.com/llvm/llvm-project/pull/114745 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits