================ @@ -146,11 +149,139 @@ static cl::opt<unsigned> SplitThresholdForRegWithHint( static RegisterRegAlloc greedyRegAlloc("greedy", "greedy register allocator", createGreedyRegisterAllocator); -char RAGreedy::ID = 0; -char &llvm::RAGreedyID = RAGreedy::ID; +namespace { +class RAGreedyLegacy : public MachineFunctionPass { + RegAllocFilterFunc F; -INITIALIZE_PASS_BEGIN(RAGreedy, "greedy", - "Greedy Register Allocator", false, false) +public: + RAGreedyLegacy(const RegAllocFilterFunc F = nullptr); + + static char ID; + /// Return the pass name. + StringRef getPassName() const override { return "Greedy Register Allocator"; } + + /// RAGreedy analysis usage. + void getAnalysisUsage(AnalysisUsage &AU) const override; + /// Perform register allocation. + bool runOnMachineFunction(MachineFunction &mf) override; + + MachineFunctionProperties getRequiredProperties() const override { + return MachineFunctionProperties().set( + MachineFunctionProperties::Property::NoPHIs); + } + + MachineFunctionProperties getClearedProperties() const override { + return MachineFunctionProperties().set( + MachineFunctionProperties::Property::IsSSA); + } +}; + +} // end anonymous namespace + +RAGreedyLegacy::RAGreedyLegacy(const RegAllocFilterFunc F) + : MachineFunctionPass(ID), F(F) { + initializeRAGreedyLegacyPass(*PassRegistry::getPassRegistry()); +} + +RAGreedy::RAGreedy(const RegAllocFilterFunc F) : RegAllocBase(F) {} + +void RAGreedy::setAnalyses(RequiredAnalyses &Analyses) { + VRM = Analyses.VRM; + LIS = Analyses.LIS; + Matrix = Analyses.LRM; + Indexes = Analyses.Indexes; + MBFI = Analyses.MBFI; + DomTree = Analyses.DomTree; + Loops = Analyses.Loops; + ORE = Analyses.ORE; + Bundles = Analyses.Bundles; + SpillPlacer = Analyses.SpillPlacer; + DebugVars = Analyses.DebugVars; + LSS = Analyses.LSS; + EvictProvider = Analyses.EvictProvider; + PriorityProvider = Analyses.PriorityProvider; +} + +void RAGreedyPass::printPipeline(raw_ostream &OS, function_ref<StringRef(StringRef)> MapClassName2PassName) const { + StringRef FilterName = Opts.FilterName.empty() ? "all" : Opts.FilterName; + OS << "regallocgreedy<" << FilterName << ">"; +} + +PreservedAnalyses RAGreedyPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + MFPropsModifier _(*this, MF); + + RAGreedy Impl(Opts.Filter); + RAGreedy::RequiredAnalyses Analyses; + + Analyses.LIS = &MFAM.getResult<LiveIntervalsAnalysis>(MF); + Analyses.LRM = &MFAM.getResult<LiveRegMatrixAnalysis>(MF); + Analyses.LSS = &MFAM.getResult<LiveStacksAnalysis>(MF); + Analyses.Indexes = &MFAM.getResult<SlotIndexesAnalysis>(MF); + Analyses.MBFI = &MFAM.getResult<MachineBlockFrequencyAnalysis>(MF); + Analyses.DomTree = &MFAM.getResult<MachineDominatorTreeAnalysis>(MF); + Analyses.ORE = &MFAM.getResult<MachineOptimizationRemarkEmitterAnalysis>(MF); + Analyses.Loops = &MFAM.getResult<MachineLoopAnalysis>(MF); + Analyses.Bundles = &MFAM.getResult<EdgeBundlesAnalysis>(MF); + Analyses.SpillPlacer = &MFAM.getResult<SpillPlacementAnalysis>(MF); + Analyses.DebugVars = &MFAM.getResult<LiveDebugVariablesAnalysis>(MF); + Analyses.EvictProvider = + MFAM.getResult<RegAllocEvictionAdvisorAnalysis>(MF).Provider; + Analyses.PriorityProvider = + MFAM.getResult<RegAllocPriorityAdvisorAnalysis>(MF).Provider; + Analyses.VRM = &MFAM.getResult<VirtRegMapAnalysis>(MF); + + Impl.setAnalyses(Analyses); + bool Changed = Impl.run(MF); + if (!Changed) + return PreservedAnalyses::all(); + auto PA = getMachineFunctionPassPreservedAnalyses(); + PA.preserveSet<CFGAnalyses>(); + PA.preserve<MachineBlockFrequencyAnalysis>(); + PA.preserve<LiveIntervalsAnalysis>(); + PA.preserve<SlotIndexesAnalysis>(); + PA.preserve<LiveDebugVariablesAnalysis>(); + PA.preserve<LiveStacksAnalysis>(); + PA.preserve<MachineDominatorTreeAnalysis>(); + PA.preserve<MachineLoopAnalysis>(); ---------------- arsenm wrote:
These should be redundant with CFGAnalyses? https://github.com/llvm/llvm-project/pull/119540 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits