12
12
// /
13
13
// ===----------------------------------------------------------------------===//
14
14
15
+ #include " SIOptimizeExecMaskingPreRA.h"
15
16
#include " AMDGPU.h"
16
17
#include " GCNSubtarget.h"
17
18
#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -25,7 +26,7 @@ using namespace llvm;
25
26
26
27
namespace {
27
28
28
- class SIOptimizeExecMaskingPreRA : public MachineFunctionPass {
29
+ class SIOptimizeExecMaskingPreRA {
29
30
private:
30
31
const SIRegisterInfo *TRI;
31
32
const SIInstrInfo *TII;
@@ -42,11 +43,18 @@ class SIOptimizeExecMaskingPreRA : public MachineFunctionPass {
42
43
bool optimizeVcndVcmpPair (MachineBasicBlock &MBB);
43
44
bool optimizeElseBranch (MachineBasicBlock &MBB);
44
45
46
+ public:
47
+ SIOptimizeExecMaskingPreRA (LiveIntervals *LIS) : LIS(LIS) {}
48
+ bool run (MachineFunction &MF);
49
+ };
50
+
51
+ class SIOptimizeExecMaskingPreRALegacy : public MachineFunctionPass {
45
52
public:
46
53
static char ID;
47
54
48
- SIOptimizeExecMaskingPreRA () : MachineFunctionPass(ID) {
49
- initializeSIOptimizeExecMaskingPreRAPass (*PassRegistry::getPassRegistry ());
55
+ SIOptimizeExecMaskingPreRALegacy () : MachineFunctionPass(ID) {
56
+ initializeSIOptimizeExecMaskingPreRALegacyPass (
57
+ *PassRegistry::getPassRegistry ());
50
58
}
51
59
52
60
bool runOnMachineFunction (MachineFunction &MF) override ;
@@ -64,18 +72,18 @@ class SIOptimizeExecMaskingPreRA : public MachineFunctionPass {
64
72
65
73
} // End anonymous namespace.
66
74
67
- INITIALIZE_PASS_BEGIN (SIOptimizeExecMaskingPreRA , DEBUG_TYPE,
75
+ INITIALIZE_PASS_BEGIN (SIOptimizeExecMaskingPreRALegacy , DEBUG_TYPE,
68
76
" SI optimize exec mask operations pre-RA" , false , false )
69
77
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
70
- INITIALIZE_PASS_END(SIOptimizeExecMaskingPreRA , DEBUG_TYPE,
78
+ INITIALIZE_PASS_END(SIOptimizeExecMaskingPreRALegacy , DEBUG_TYPE,
71
79
" SI optimize exec mask operations pre-RA" , false , false )
72
80
73
- char SIOptimizeExecMaskingPreRA ::ID = 0;
81
+ char SIOptimizeExecMaskingPreRALegacy ::ID = 0;
74
82
75
- char &llvm::SIOptimizeExecMaskingPreRAID = SIOptimizeExecMaskingPreRA ::ID;
83
+ char &llvm::SIOptimizeExecMaskingPreRAID = SIOptimizeExecMaskingPreRALegacy ::ID;
76
84
77
85
FunctionPass *llvm::createSIOptimizeExecMaskingPreRAPass () {
78
- return new SIOptimizeExecMaskingPreRA ();
86
+ return new SIOptimizeExecMaskingPreRALegacy ();
79
87
}
80
88
81
89
// 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) {
340
348
return true ;
341
349
}
342
350
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) {
344
361
if (skipFunction (MF.getFunction ()))
345
362
return false ;
346
363
364
+ auto *LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
365
+ return SIOptimizeExecMaskingPreRA (LIS).run (MF);
366
+ }
367
+
368
+ bool SIOptimizeExecMaskingPreRA::run (MachineFunction &MF) {
347
369
const GCNSubtarget &ST = MF.getSubtarget <GCNSubtarget>();
348
370
TRI = ST.getRegisterInfo ();
349
371
TII = ST.getInstrInfo ();
350
372
MRI = &MF.getRegInfo ();
351
- LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
352
373
353
374
const bool Wave32 = ST.isWave32 ();
354
375
AndOpc = Wave32 ? AMDGPU::S_AND_B32 : AMDGPU::S_AND_B64;
0 commit comments