2424// /
2525// ===----------------------------------------------------------------------===//
2626
27+ #include " GCNPreRAOptimizations.h"
2728#include " AMDGPU.h"
2829#include " GCNSubtarget.h"
2930#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -37,7 +38,7 @@ using namespace llvm;
3738
3839namespace {
3940
40- class GCNPreRAOptimizations : public MachineFunctionPass {
41+ class GCNPreRAOptimizationsImpl {
4142private:
4243 const SIInstrInfo *TII;
4344 const SIRegisterInfo *TRI;
@@ -46,11 +47,17 @@ class GCNPreRAOptimizations : public MachineFunctionPass {
4647
4748 bool processReg (Register Reg);
4849
50+ public:
51+ GCNPreRAOptimizationsImpl (LiveIntervals *LS) : LIS(LS) {}
52+ bool run (MachineFunction &MF);
53+ };
54+
55+ class GCNPreRAOptimizationsLegacy : public MachineFunctionPass {
4956public:
5057 static char ID;
5158
52- GCNPreRAOptimizations () : MachineFunctionPass(ID) {
53- initializeGCNPreRAOptimizationsPass (*PassRegistry::getPassRegistry ());
59+ GCNPreRAOptimizationsLegacy () : MachineFunctionPass(ID) {
60+ initializeGCNPreRAOptimizationsLegacyPass (*PassRegistry::getPassRegistry ());
5461 }
5562
5663 bool runOnMachineFunction (MachineFunction &MF) override ;
@@ -65,24 +72,23 @@ class GCNPreRAOptimizations : public MachineFunctionPass {
6572 MachineFunctionPass::getAnalysisUsage (AU);
6673 }
6774};
68-
6975} // End anonymous namespace.
7076
71- INITIALIZE_PASS_BEGIN (GCNPreRAOptimizations , DEBUG_TYPE,
77+ INITIALIZE_PASS_BEGIN (GCNPreRAOptimizationsLegacy , DEBUG_TYPE,
7278 " AMDGPU Pre-RA optimizations" , false , false )
7379INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
74- INITIALIZE_PASS_END(GCNPreRAOptimizations , DEBUG_TYPE, " Pre-RA optimizations " ,
75- false , false )
80+ INITIALIZE_PASS_END(GCNPreRAOptimizationsLegacy , DEBUG_TYPE,
81+ " Pre-RA optimizations " , false , false )
7682
77- char GCNPreRAOptimizations ::ID = 0;
83+ char GCNPreRAOptimizationsLegacy ::ID = 0;
7884
79- char &llvm::GCNPreRAOptimizationsID = GCNPreRAOptimizations ::ID;
85+ char &llvm::GCNPreRAOptimizationsID = GCNPreRAOptimizationsLegacy ::ID;
8086
81- FunctionPass *llvm::createGCNPreRAOptimizationsPass () {
82- return new GCNPreRAOptimizations ();
87+ FunctionPass *llvm::createGCNPreRAOptimizationsLegacyPass () {
88+ return new GCNPreRAOptimizationsLegacy ();
8389}
8490
85- bool GCNPreRAOptimizations ::processReg (Register Reg) {
91+ bool GCNPreRAOptimizationsImpl ::processReg (Register Reg) {
8692 MachineInstr *Def0 = nullptr ;
8793 MachineInstr *Def1 = nullptr ;
8894 uint64_t Init = 0 ;
@@ -212,14 +218,25 @@ bool GCNPreRAOptimizations::processReg(Register Reg) {
212218 return true ;
213219}
214220
215- bool GCNPreRAOptimizations ::runOnMachineFunction (MachineFunction &MF) {
221+ bool GCNPreRAOptimizationsLegacy ::runOnMachineFunction (MachineFunction &MF) {
216222 if (skipFunction (MF.getFunction ()))
217223 return false ;
224+ LiveIntervals *LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
225+ return GCNPreRAOptimizationsImpl (LIS).run (MF);
226+ }
227+
228+ PreservedAnalyses
229+ GCNPreRAOptimizationsPass::run (MachineFunction &MF,
230+ MachineFunctionAnalysisManager &MFAM) {
231+ LiveIntervals *LIS = &MFAM.getResult <LiveIntervalsAnalysis>(MF);
232+ GCNPreRAOptimizationsImpl (LIS).run (MF);
233+ return PreservedAnalyses::all ();
234+ }
218235
236+ bool GCNPreRAOptimizationsImpl::run (MachineFunction &MF) {
219237 const GCNSubtarget &ST = MF.getSubtarget <GCNSubtarget>();
220238 TII = ST.getInstrInfo ();
221239 MRI = &MF.getRegInfo ();
222- LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
223240 TRI = ST.getRegisterInfo ();
224241
225242 bool Changed = false ;
0 commit comments