11
11
//
12
12
// ===----------------------------------------------------------------------===//
13
13
14
+ #include " SIPreAllocateWWMRegs.h"
14
15
#include " AMDGPU.h"
15
16
#include " GCNSubtarget.h"
16
17
#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -34,7 +35,7 @@ static cl::opt<bool>
34
35
35
36
namespace {
36
37
37
- class SIPreAllocateWWMRegs : public MachineFunctionPass {
38
+ class SIPreAllocateWWMRegs {
38
39
private:
39
40
const SIInstrInfo *TII;
40
41
const SIRegisterInfo *TRI;
@@ -48,13 +49,21 @@ class SIPreAllocateWWMRegs : public MachineFunctionPass {
48
49
#ifndef NDEBUG
49
50
void printWWMInfo (const MachineInstr &MI);
50
51
#endif
52
+ bool processDef (MachineOperand &MO);
53
+ void rewriteRegs (MachineFunction &MF);
54
+
55
+ public:
56
+ SIPreAllocateWWMRegs (LiveIntervals *LIS, LiveRegMatrix *Matrix,
57
+ VirtRegMap *VRM)
58
+ : LIS(LIS), Matrix(Matrix), VRM(VRM) {}
59
+ bool run (MachineFunction &MF);
60
+ };
51
61
62
+ class SIPreAllocateWWMRegsLegacy : public MachineFunctionPass {
52
63
public:
53
64
static char ID;
54
65
55
- SIPreAllocateWWMRegs () : MachineFunctionPass(ID) {
56
- initializeSIPreAllocateWWMRegsPass (*PassRegistry::getPassRegistry ());
57
- }
66
+ SIPreAllocateWWMRegsLegacy () : MachineFunctionPass(ID) {}
58
67
59
68
bool runOnMachineFunction (MachineFunction &MF) override ;
60
69
@@ -65,28 +74,24 @@ class SIPreAllocateWWMRegs : public MachineFunctionPass {
65
74
AU.setPreservesAll ();
66
75
MachineFunctionPass::getAnalysisUsage (AU);
67
76
}
68
-
69
- private:
70
- bool processDef (MachineOperand &MO);
71
- void rewriteRegs (MachineFunction &MF);
72
77
};
73
78
74
79
} // End anonymous namespace.
75
80
76
- INITIALIZE_PASS_BEGIN (SIPreAllocateWWMRegs , DEBUG_TYPE,
77
- " SI Pre-allocate WWM Registers" , false , false )
81
+ INITIALIZE_PASS_BEGIN (SIPreAllocateWWMRegsLegacy , DEBUG_TYPE,
82
+ " SI Pre-allocate WWM Registers" , false , false )
78
83
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
79
84
INITIALIZE_PASS_DEPENDENCY(VirtRegMapWrapperLegacy)
80
85
INITIALIZE_PASS_DEPENDENCY(LiveRegMatrixWrapperLegacy)
81
- INITIALIZE_PASS_END(SIPreAllocateWWMRegs , DEBUG_TYPE,
82
- " SI Pre-allocate WWM Registers" , false , false )
86
+ INITIALIZE_PASS_END(SIPreAllocateWWMRegsLegacy , DEBUG_TYPE,
87
+ " SI Pre-allocate WWM Registers" , false , false )
83
88
84
- char SIPreAllocateWWMRegs ::ID = 0;
89
+ char SIPreAllocateWWMRegsLegacy ::ID = 0;
85
90
86
- char &llvm::SIPreAllocateWWMRegsID = SIPreAllocateWWMRegs ::ID;
91
+ char &llvm::SIPreAllocateWWMRegsLegacyID = SIPreAllocateWWMRegsLegacy ::ID;
87
92
88
- FunctionPass *llvm::createSIPreAllocateWWMRegsPass () {
89
- return new SIPreAllocateWWMRegs ();
93
+ FunctionPass *llvm::createSIPreAllocateWWMRegsLegacyPass () {
94
+ return new SIPreAllocateWWMRegsLegacy ();
90
95
}
91
96
92
97
bool SIPreAllocateWWMRegs::processDef (MachineOperand &MO) {
@@ -184,7 +189,14 @@ SIPreAllocateWWMRegs::printWWMInfo(const MachineInstr &MI) {
184
189
185
190
#endif
186
191
187
- bool SIPreAllocateWWMRegs::runOnMachineFunction (MachineFunction &MF) {
192
+ bool SIPreAllocateWWMRegsLegacy::runOnMachineFunction (MachineFunction &MF) {
193
+ auto *LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
194
+ auto *Matrix = &getAnalysis<LiveRegMatrixWrapperLegacy>().getLRM ();
195
+ auto *VRM = &getAnalysis<VirtRegMapWrapperLegacy>().getVRM ();
196
+ return SIPreAllocateWWMRegs (LIS, Matrix, VRM).run (MF);
197
+ }
198
+
199
+ bool SIPreAllocateWWMRegs::run (MachineFunction &MF) {
188
200
LLVM_DEBUG (dbgs () << " SIPreAllocateWWMRegs: function " << MF.getName () << " \n " );
189
201
190
202
const GCNSubtarget &ST = MF.getSubtarget <GCNSubtarget>();
@@ -193,10 +205,6 @@ bool SIPreAllocateWWMRegs::runOnMachineFunction(MachineFunction &MF) {
193
205
TRI = &TII->getRegisterInfo ();
194
206
MRI = &MF.getRegInfo ();
195
207
196
- LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
197
- Matrix = &getAnalysis<LiveRegMatrixWrapperLegacy>().getLRM ();
198
- VRM = &getAnalysis<VirtRegMapWrapperLegacy>().getVRM ();
199
-
200
208
RegClassInfo.runOnMachineFunction (MF);
201
209
202
210
bool PreallocateSGPRSpillVGPRs =
@@ -251,3 +259,13 @@ bool SIPreAllocateWWMRegs::runOnMachineFunction(MachineFunction &MF) {
251
259
rewriteRegs (MF);
252
260
return true ;
253
261
}
262
+
263
+ PreservedAnalyses
264
+ SIPreAllocateWWMRegsPass::run (MachineFunction &MF,
265
+ MachineFunctionAnalysisManager &MFAM) {
266
+ auto *LIS = &MFAM.getResult <LiveIntervalsAnalysis>(MF);
267
+ auto *Matrix = &MFAM.getResult <LiveRegMatrixAnalysis>(MF);
268
+ auto *VRM = &MFAM.getResult <VirtRegMapAnalysis>(MF);
269
+ SIPreAllocateWWMRegs (LIS, Matrix, VRM).run (MF);
270
+ return PreservedAnalyses::all ();
271
+ }
0 commit comments