16
16
#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
17
17
#include " SIMachineFunctionInfo.h"
18
18
#include " llvm/CodeGen/MachineDominators.h"
19
+ #include " llvm/CodeGen/MachinePassManager.h"
19
20
20
21
using namespace llvm ;
21
22
22
23
#define DEBUG_TYPE " si-late-branch-lowering"
23
24
24
25
namespace {
25
26
26
- class SILateBranchLowering : public MachineFunctionPass {
27
+ class SILateBranchLowering {
27
28
private:
28
29
const SIRegisterInfo *TRI = nullptr ;
29
30
const SIInstrInfo *TII = nullptr ;
@@ -34,14 +35,23 @@ class SILateBranchLowering : public MachineFunctionPass {
34
35
void earlyTerm (MachineInstr &MI, MachineBasicBlock *EarlyExitBlock);
35
36
36
37
public:
37
- static char ID;
38
+ SILateBranchLowering (MachineDominatorTree *MDT) : MDT(MDT) {}
39
+
40
+ bool run (MachineFunction &MF);
38
41
39
42
unsigned MovOpc;
40
43
Register ExecReg;
44
+ };
41
45
42
- SILateBranchLowering () : MachineFunctionPass(ID) {}
46
+ class SILateBranchLoweringLegacy : public MachineFunctionPass {
47
+ public:
48
+ static char ID;
49
+ SILateBranchLoweringLegacy () : MachineFunctionPass(ID) {}
43
50
44
- bool runOnMachineFunction (MachineFunction &MF) override ;
51
+ bool runOnMachineFunction (MachineFunction &MF) override {
52
+ auto *MDT = &getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree ();
53
+ return SILateBranchLowering (MDT).run (MF);
54
+ }
45
55
46
56
StringRef getPassName () const override {
47
57
return " SI Final Branch Preparation" ;
@@ -56,15 +66,15 @@ class SILateBranchLowering : public MachineFunctionPass {
56
66
57
67
} // end anonymous namespace
58
68
59
- char SILateBranchLowering ::ID = 0 ;
69
+ char SILateBranchLoweringLegacy ::ID = 0 ;
60
70
61
- INITIALIZE_PASS_BEGIN (SILateBranchLowering , DEBUG_TYPE,
71
+ INITIALIZE_PASS_BEGIN (SILateBranchLoweringLegacy , DEBUG_TYPE,
62
72
" SI insert s_cbranch_execz instructions" , false , false )
63
73
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
64
- INITIALIZE_PASS_END(SILateBranchLowering , DEBUG_TYPE,
74
+ INITIALIZE_PASS_END(SILateBranchLoweringLegacy , DEBUG_TYPE,
65
75
" SI insert s_cbranch_execz instructions" , false , false )
66
76
67
- char &llvm::SILateBranchLoweringPassID = SILateBranchLowering ::ID;
77
+ char &llvm::SILateBranchLoweringPassID = SILateBranchLoweringLegacy ::ID;
68
78
69
79
static void generateEndPgm (MachineBasicBlock &MBB,
70
80
MachineBasicBlock::iterator I, DebugLoc DL,
@@ -192,11 +202,21 @@ void SILateBranchLowering::earlyTerm(MachineInstr &MI,
192
202
MDT->insertEdge (&MBB, EarlyExitBlock);
193
203
}
194
204
195
- bool SILateBranchLowering::runOnMachineFunction (MachineFunction &MF) {
205
+ PreservedAnalyses
206
+ llvm::SILateBranchLoweringPass::run (MachineFunction &MF,
207
+ MachineFunctionAnalysisManager &MFAM) {
208
+ auto *MDT = &MFAM.getResult <MachineDominatorTreeAnalysis>(MF);
209
+ if (!SILateBranchLowering (MDT).run (MF))
210
+ return PreservedAnalyses::all ();
211
+
212
+ return getMachineFunctionPassPreservedAnalyses ()
213
+ .preserve <MachineDominatorTreeAnalysis>();
214
+ }
215
+
216
+ bool SILateBranchLowering::run (MachineFunction &MF) {
196
217
const GCNSubtarget &ST = MF.getSubtarget <GCNSubtarget>();
197
218
TII = ST.getInstrInfo ();
198
219
TRI = &TII->getRegisterInfo ();
199
- MDT = &getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree ();
200
220
201
221
MovOpc = ST.isWave32 () ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
202
222
ExecReg = ST.isWave32 () ? AMDGPU::EXEC_LO : AMDGPU::EXEC;
0 commit comments