26
26
//
27
27
// ===----------------------------------------------------------------------===//
28
28
29
+ #include " llvm/CodeGen/RenameIndependentSubregs.h"
29
30
#include " LiveRangeUtils.h"
30
31
#include " PHIEliminationUtils.h"
31
32
#include " llvm/CodeGen/LiveInterval.h"
@@ -43,25 +44,11 @@ using namespace llvm;
43
44
44
45
namespace {
45
46
46
- class RenameIndependentSubregs : public MachineFunctionPass {
47
+ class RenameIndependentSubregs {
47
48
public:
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) {}
63
50
64
- bool runOnMachineFunction (MachineFunction &MF) override ;
51
+ bool run (MachineFunction &MF);
65
52
66
53
private:
67
54
struct SubRangeInfo {
@@ -106,17 +93,36 @@ class RenameIndependentSubregs : public MachineFunctionPass {
106
93
const TargetInstrInfo *TII = nullptr ;
107
94
};
108
95
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
+
109
115
} // end anonymous namespace
110
116
111
- char RenameIndependentSubregs ::ID;
117
+ char RenameIndependentSubregsLegacy ::ID;
112
118
113
- char &llvm::RenameIndependentSubregsID = RenameIndependentSubregs ::ID;
119
+ char &llvm::RenameIndependentSubregsID = RenameIndependentSubregsLegacy ::ID;
114
120
115
- INITIALIZE_PASS_BEGIN (RenameIndependentSubregs , DEBUG_TYPE,
121
+ INITIALIZE_PASS_BEGIN (RenameIndependentSubregsLegacy , DEBUG_TYPE,
116
122
" Rename Independent Subregisters" , false , false )
117
123
INITIALIZE_PASS_DEPENDENCY(SlotIndexesWrapperPass)
118
124
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
119
- INITIALIZE_PASS_END(RenameIndependentSubregs , DEBUG_TYPE,
125
+ INITIALIZE_PASS_END(RenameIndependentSubregsLegacy , DEBUG_TYPE,
120
126
" Rename Independent Subregisters" , false , false )
121
127
122
128
bool RenameIndependentSubregs::renameComponents(LiveInterval &LI) const {
@@ -381,7 +387,25 @@ void RenameIndependentSubregs::computeMainRangesFixFlags(
381
387
}
382
388
}
383
389
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) {
385
409
// Skip renaming if liveness of subregister is not tracked.
386
410
MRI = &MF.getRegInfo ();
387
411
if (!MRI->subRegLivenessEnabled ())
@@ -390,7 +414,6 @@ bool RenameIndependentSubregs::runOnMachineFunction(MachineFunction &MF) {
390
414
LLVM_DEBUG (dbgs () << " Renaming independent subregister live ranges in "
391
415
<< MF.getName () << ' \n ' );
392
416
393
- LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
394
417
TII = MF.getSubtarget ().getInstrInfo ();
395
418
396
419
// Iterate over all vregs. Note that we query getNumVirtRegs() the newly
0 commit comments