2626//
2727// ===----------------------------------------------------------------------===//
2828
29+ #include " llvm/CodeGen/RenameIndependentSubregs.h"
2930#include " LiveRangeUtils.h"
3031#include " PHIEliminationUtils.h"
3132#include " llvm/CodeGen/LiveInterval.h"
@@ -43,25 +44,11 @@ using namespace llvm;
4344
4445namespace {
4546
46- class RenameIndependentSubregs : public MachineFunctionPass {
47+ class RenameIndependentSubregs {
4748public:
48- static char ID;
49- RenameIndependentSubregs () : MachineFunctionPass(ID) {}
50-
51- StringRef getPassName () const override {
52- return " Rename Disconnected Subregister Components" ;
53- }
54-
55- void getAnalysisUsage (AnalysisUsage &AU) const override {
56- AU.setPreservesCFG ();
57- AU.addRequired <LiveIntervalsWrapperPass>();
58- AU.addPreserved <LiveIntervalsWrapperPass>();
59- AU.addRequired <SlotIndexesWrapperPass>();
60- AU.addPreserved <SlotIndexesWrapperPass>();
61- MachineFunctionPass::getAnalysisUsage (AU);
62- }
49+ RenameIndependentSubregs (LiveIntervals *LIS) : LIS(LIS) {}
6350
64- bool runOnMachineFunction (MachineFunction &MF) override ;
51+ bool run (MachineFunction &MF);
6552
6653private:
6754 struct SubRangeInfo {
@@ -106,17 +93,36 @@ class RenameIndependentSubregs : public MachineFunctionPass {
10693 const TargetInstrInfo *TII = nullptr ;
10794};
10895
96+ class RenameIndependentSubregsLegacy : public MachineFunctionPass {
97+ public:
98+ static char ID;
99+ RenameIndependentSubregsLegacy () : MachineFunctionPass(ID) {}
100+ bool runOnMachineFunction (MachineFunction &MF) override ;
101+ StringRef getPassName () const override {
102+ return " Rename Disconnected Subregister Components" ;
103+ }
104+
105+ void getAnalysisUsage (AnalysisUsage &AU) const override {
106+ AU.setPreservesCFG ();
107+ AU.addRequired <LiveIntervalsWrapperPass>();
108+ AU.addPreserved <LiveIntervalsWrapperPass>();
109+ AU.addRequired <SlotIndexesWrapperPass>();
110+ AU.addPreserved <SlotIndexesWrapperPass>();
111+ MachineFunctionPass::getAnalysisUsage (AU);
112+ }
113+ };
114+
109115} // end anonymous namespace
110116
111- char RenameIndependentSubregs ::ID;
117+ char RenameIndependentSubregsLegacy ::ID;
112118
113- char &llvm::RenameIndependentSubregsID = RenameIndependentSubregs ::ID;
119+ char &llvm::RenameIndependentSubregsID = RenameIndependentSubregsLegacy ::ID;
114120
115- INITIALIZE_PASS_BEGIN (RenameIndependentSubregs , DEBUG_TYPE,
121+ INITIALIZE_PASS_BEGIN (RenameIndependentSubregsLegacy , DEBUG_TYPE,
116122 " Rename Independent Subregisters" , false , false )
117123INITIALIZE_PASS_DEPENDENCY(SlotIndexesWrapperPass)
118124INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
119- INITIALIZE_PASS_END(RenameIndependentSubregs , DEBUG_TYPE,
125+ INITIALIZE_PASS_END(RenameIndependentSubregsLegacy , DEBUG_TYPE,
120126 " Rename Independent Subregisters" , false , false )
121127
122128bool RenameIndependentSubregs::renameComponents(LiveInterval &LI) const {
@@ -381,7 +387,25 @@ void RenameIndependentSubregs::computeMainRangesFixFlags(
381387 }
382388}
383389
384- bool RenameIndependentSubregs::runOnMachineFunction (MachineFunction &MF) {
390+ PreservedAnalyses
391+ RenameIndependentSubregsPass::run (MachineFunction &MF,
392+ MachineFunctionAnalysisManager &MFAM) {
393+ auto &LIS = MFAM.getResult <LiveIntervalsAnalysis>(MF);
394+ if (!RenameIndependentSubregs (&LIS).run (MF))
395+ return PreservedAnalyses::all ();
396+ auto PA = getMachineFunctionPassPreservedAnalyses ();
397+ PA.preserveSet <CFGAnalyses>();
398+ PA.preserve <LiveIntervalsAnalysis>();
399+ PA.preserve <SlotIndexesAnalysis>();
400+ return PA;
401+ }
402+
403+ bool RenameIndependentSubregsLegacy::runOnMachineFunction (MachineFunction &MF) {
404+ auto &LIS = getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
405+ return RenameIndependentSubregs (&LIS).run (MF);
406+ }
407+
408+ bool RenameIndependentSubregs::run (MachineFunction &MF) {
385409 // Skip renaming if liveness of subregister is not tracked.
386410 MRI = &MF.getRegInfo ();
387411 if (!MRI->subRegLivenessEnabled ())
@@ -390,7 +414,6 @@ bool RenameIndependentSubregs::runOnMachineFunction(MachineFunction &MF) {
390414 LLVM_DEBUG (dbgs () << " Renaming independent subregister live ranges in "
391415 << MF.getName () << ' \n ' );
392416
393- LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
394417 TII = MF.getSubtarget ().getInstrInfo ();
395418
396419 // Iterate over all vregs. Note that we query getNumVirtRegs() the newly
0 commit comments