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 ;
@@ -34,14 +35,23 @@ class SILateBranchLowering : public MachineFunctionPass {
3435 void earlyTerm (MachineInstr &MI, MachineBasicBlock *EarlyExitBlock);
3536
3637public:
37- static char ID;
38+ SILateBranchLowering (MachineDominatorTree *MDT) : MDT(MDT) {}
39+
40+ bool run (MachineFunction &MF);
3841
3942 unsigned MovOpc;
4043 Register ExecReg;
44+ };
4145
42- SILateBranchLowering () : MachineFunctionPass(ID) {}
46+ class SILateBranchLoweringLegacy : public MachineFunctionPass {
47+ public:
48+ static char ID;
49+ SILateBranchLoweringLegacy () : MachineFunctionPass(ID) {}
4350
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+ }
4555
4656 StringRef getPassName () const override {
4757 return " SI Final Branch Preparation" ;
@@ -56,15 +66,15 @@ class SILateBranchLowering : public MachineFunctionPass {
5666
5767} // end anonymous namespace
5868
59- char SILateBranchLowering ::ID = 0 ;
69+ char SILateBranchLoweringLegacy ::ID = 0 ;
6070
61- INITIALIZE_PASS_BEGIN (SILateBranchLowering , DEBUG_TYPE,
71+ INITIALIZE_PASS_BEGIN (SILateBranchLoweringLegacy , DEBUG_TYPE,
6272 " SI insert s_cbranch_execz instructions" , false , false )
6373INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
64- INITIALIZE_PASS_END(SILateBranchLowering , DEBUG_TYPE,
74+ INITIALIZE_PASS_END(SILateBranchLoweringLegacy , DEBUG_TYPE,
6575 " SI insert s_cbranch_execz instructions" , false , false )
6676
67- char &llvm::SILateBranchLoweringPassID = SILateBranchLowering ::ID;
77+ char &llvm::SILateBranchLoweringPassID = SILateBranchLoweringLegacy ::ID;
6878
6979static void generateEndPgm (MachineBasicBlock &MBB,
7080 MachineBasicBlock::iterator I, DebugLoc DL,
@@ -192,11 +202,21 @@ void SILateBranchLowering::earlyTerm(MachineInstr &MI,
192202 MDT->insertEdge (&MBB, EarlyExitBlock);
193203}
194204
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) {
196217 const GCNSubtarget &ST = MF.getSubtarget <GCNSubtarget>();
197218 TII = ST.getInstrInfo ();
198219 TRI = &TII->getRegisterInfo ();
199- MDT = &getAnalysis<MachineDominatorTreeWrapperPass>().getDomTree ();
200220
201221 MovOpc = ST.isWave32 () ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
202222 ExecReg = ST.isWave32 () ? AMDGPU::EXEC_LO : AMDGPU::EXEC;
0 commit comments