1212// /
1313// ===----------------------------------------------------------------------===//
1414
15+ #include " SIOptimizeExecMaskingPreRA.h"
1516#include " AMDGPU.h"
1617#include " GCNSubtarget.h"
1718#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -25,7 +26,7 @@ using namespace llvm;
2526
2627namespace {
2728
28- class SIOptimizeExecMaskingPreRA : public MachineFunctionPass {
29+ class SIOptimizeExecMaskingPreRA {
2930private:
3031 const SIRegisterInfo *TRI;
3132 const SIInstrInfo *TII;
@@ -42,11 +43,18 @@ class SIOptimizeExecMaskingPreRA : public MachineFunctionPass {
4243 bool optimizeVcndVcmpPair (MachineBasicBlock &MBB);
4344 bool optimizeElseBranch (MachineBasicBlock &MBB);
4445
46+ public:
47+ SIOptimizeExecMaskingPreRA (LiveIntervals *LIS) : LIS(LIS) {}
48+ bool run (MachineFunction &MF);
49+ };
50+
51+ class SIOptimizeExecMaskingPreRALegacy : public MachineFunctionPass {
4552public:
4653 static char ID;
4754
48- SIOptimizeExecMaskingPreRA () : MachineFunctionPass(ID) {
49- initializeSIOptimizeExecMaskingPreRAPass (*PassRegistry::getPassRegistry ());
55+ SIOptimizeExecMaskingPreRALegacy () : MachineFunctionPass(ID) {
56+ initializeSIOptimizeExecMaskingPreRALegacyPass (
57+ *PassRegistry::getPassRegistry ());
5058 }
5159
5260 bool runOnMachineFunction (MachineFunction &MF) override ;
@@ -64,18 +72,18 @@ class SIOptimizeExecMaskingPreRA : public MachineFunctionPass {
6472
6573} // End anonymous namespace.
6674
67- INITIALIZE_PASS_BEGIN (SIOptimizeExecMaskingPreRA , DEBUG_TYPE,
75+ INITIALIZE_PASS_BEGIN (SIOptimizeExecMaskingPreRALegacy , DEBUG_TYPE,
6876 " SI optimize exec mask operations pre-RA" , false , false )
6977INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
70- INITIALIZE_PASS_END(SIOptimizeExecMaskingPreRA , DEBUG_TYPE,
78+ INITIALIZE_PASS_END(SIOptimizeExecMaskingPreRALegacy , DEBUG_TYPE,
7179 " SI optimize exec mask operations pre-RA" , false , false )
7280
73- char SIOptimizeExecMaskingPreRA ::ID = 0;
81+ char SIOptimizeExecMaskingPreRALegacy ::ID = 0;
7482
75- char &llvm::SIOptimizeExecMaskingPreRAID = SIOptimizeExecMaskingPreRA ::ID;
83+ char &llvm::SIOptimizeExecMaskingPreRAID = SIOptimizeExecMaskingPreRALegacy ::ID;
7684
7785FunctionPass *llvm::createSIOptimizeExecMaskingPreRAPass () {
78- return new SIOptimizeExecMaskingPreRA ();
86+ return new SIOptimizeExecMaskingPreRALegacy ();
7987}
8088
8189// See if there is a def between \p AndIdx and \p SelIdx that needs to live
@@ -340,15 +348,28 @@ bool SIOptimizeExecMaskingPreRA::optimizeElseBranch(MachineBasicBlock &MBB) {
340348 return true ;
341349}
342350
343- bool SIOptimizeExecMaskingPreRA::runOnMachineFunction (MachineFunction &MF) {
351+ PreservedAnalyses
352+ SIOptimizeExecMaskingPreRAPass::run (MachineFunction &MF,
353+ MachineFunctionAnalysisManager &MFAM) {
354+ auto &LIS = MFAM.getResult <LiveIntervalsAnalysis>(MF);
355+ SIOptimizeExecMaskingPreRA (&LIS).run (MF);
356+ return PreservedAnalyses::all ();
357+ }
358+
359+ bool SIOptimizeExecMaskingPreRALegacy::runOnMachineFunction (
360+ MachineFunction &MF) {
344361 if (skipFunction (MF.getFunction ()))
345362 return false ;
346363
364+ auto *LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
365+ return SIOptimizeExecMaskingPreRA (LIS).run (MF);
366+ }
367+
368+ bool SIOptimizeExecMaskingPreRA::run (MachineFunction &MF) {
347369 const GCNSubtarget &ST = MF.getSubtarget <GCNSubtarget>();
348370 TRI = ST.getRegisterInfo ();
349371 TII = ST.getInstrInfo ();
350372 MRI = &MF.getRegInfo ();
351- LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
352373
353374 const bool Wave32 = ST.isWave32 ();
354375 AndOpc = Wave32 ? AMDGPU::S_AND_B32 : AMDGPU::S_AND_B64;
0 commit comments