1616#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
1717#include " SIMachineFunctionInfo.h"
1818#include " llvm/CodeGen/MachineDominators.h"
19+ #include " llvm/CodeGen/MachinePassManager.h"
1920
2021using namespace llvm ;
2122
2223#define DEBUG_TYPE " si-late-branch-lowering"
2324
2425namespace {
2526
26- class SILateBranchLowering : public MachineFunctionPass {
27+ class SILateBranchLowering {
2728private:
2829 const SIRegisterInfo *TRI = nullptr ;
2930 const SIInstrInfo *TII = nullptr ;
@@ -33,14 +34,23 @@ class SILateBranchLowering : public MachineFunctionPass {
3334 void earlyTerm (MachineInstr &MI, MachineBasicBlock *EarlyExitBlock);
3435
3536public:
36- static char ID;
37+ SILateBranchLowering (MachineDominatorTree *MDT) : MDT(MDT) {}
38+
39+ bool run (MachineFunction &MF);
3740
3841 unsigned MovOpc;
3942 Register ExecReg;
43+ };
4044
41- SILateBranchLowering () : MachineFunctionPass(ID) {}
45+ class SILateBranchLoweringLegacy : public MachineFunctionPass {
46+ public:
47+ static char ID;
48+ SILateBranchLoweringLegacy () : MachineFunctionPass(ID) {}
4249
43- bool runOnMachineFunction (MachineFunction &MF) override ;
50+ bool runOnMachineFunction (MachineFunction &MF) override {
51+ auto *MDT = &getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree ();
52+ return SILateBranchLowering (MDT).run (MF);
53+ }
4454
4555 StringRef getPassName () const override {
4656 return " SI Final Branch Preparation" ;
@@ -55,15 +65,15 @@ class SILateBranchLowering : public MachineFunctionPass {
5565
5666} // end anonymous namespace
5767
58- char SILateBranchLowering ::ID = 0 ;
68+ char SILateBranchLoweringLegacy ::ID = 0 ;
5969
60- INITIALIZE_PASS_BEGIN (SILateBranchLowering , DEBUG_TYPE,
70+ INITIALIZE_PASS_BEGIN (SILateBranchLoweringLegacy , DEBUG_TYPE,
6171 " SI insert s_cbranch_execz instructions" , false , false )
6272INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
63- INITIALIZE_PASS_END(SILateBranchLowering , DEBUG_TYPE,
73+ INITIALIZE_PASS_END(SILateBranchLoweringLegacy , DEBUG_TYPE,
6474 " SI insert s_cbranch_execz instructions" , false , false )
6575
66- char &llvm::SILateBranchLoweringPassID = SILateBranchLowering ::ID;
76+ char &llvm::SILateBranchLoweringPassID = SILateBranchLoweringLegacy ::ID;
6777
6878static void generateEndPgm (MachineBasicBlock &MBB,
6979 MachineBasicBlock::iterator I, DebugLoc DL,
@@ -144,11 +154,21 @@ void SILateBranchLowering::earlyTerm(MachineInstr &MI,
144154 MDT->insertEdge (&MBB, EarlyExitBlock);
145155}
146156
147- bool SILateBranchLowering::runOnMachineFunction (MachineFunction &MF) {
157+ PreservedAnalyses
158+ llvm::SILateBranchLoweringPass::run (MachineFunction &MF,
159+ MachineFunctionAnalysisManager &MFAM) {
160+ auto *MDT = &MFAM.getResult <MachineDominatorTreeAnalysis>(MF);
161+ if (!SILateBranchLowering (MDT).run (MF))
162+ return PreservedAnalyses::all ();
163+
164+ return getMachineFunctionPassPreservedAnalyses ()
165+ .preserve <MachineDominatorTreeAnalysis>();
166+ }
167+
168+ bool SILateBranchLowering::run (MachineFunction &MF) {
148169 const GCNSubtarget &ST = MF.getSubtarget <GCNSubtarget>();
149170 TII = ST.getInstrInfo ();
150171 TRI = &TII->getRegisterInfo ();
151- MDT = &getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree ();
152172
153173 MovOpc = ST.isWave32 () ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
154174 ExecReg = ST.isWave32 () ? AMDGPU::EXEC_LO : AMDGPU::EXEC;
0 commit comments