6767// /
6868// ===----------------------------------------------------------------------===//
6969
70+ #include " SIWholeQuadMode.h"
7071#include " AMDGPU.h"
7172#include " GCNSubtarget.h"
7273#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -148,11 +149,19 @@ struct WorkItem {
148149 WorkItem (MachineInstr *MI) : MI(MI) {}
149150};
150151
151- class SIWholeQuadMode : public MachineFunctionPass {
152+ class SIWholeQuadMode {
153+ public:
154+ SIWholeQuadMode (MachineFunction &MF, LiveIntervals *LIS,
155+ MachineDominatorTree *MDT, MachinePostDominatorTree *PDT)
156+ : ST(&MF.getSubtarget<GCNSubtarget>()), TII(ST->getInstrInfo ()),
157+ TRI(&TII->getRegisterInfo ()), MRI(&MF.getRegInfo()), LIS(LIS), MDT(MDT),
158+ PDT(PDT) {}
159+ bool run (MachineFunction &MF);
160+
152161private:
162+ const GCNSubtarget *ST;
153163 const SIInstrInfo *TII;
154164 const SIRegisterInfo *TRI;
155- const GCNSubtarget *ST;
156165 MachineRegisterInfo *MRI;
157166 LiveIntervals *LIS;
158167 MachineDominatorTree *MDT;
@@ -225,12 +234,13 @@ class SIWholeQuadMode : public MachineFunctionPass {
225234 void lowerInitExec (MachineInstr &MI);
226235 MachineBasicBlock::iterator lowerInitExecInstrs (MachineBasicBlock &Entry,
227236 bool &Changed);
237+ };
228238
239+ class SIWholeQuadModeLegacy : public MachineFunctionPass {
229240public:
230241 static char ID;
231242
232- SIWholeQuadMode () :
233- MachineFunctionPass (ID) { }
243+ SIWholeQuadModeLegacy () : MachineFunctionPass(ID) {}
234244
235245 bool runOnMachineFunction (MachineFunction &MF) override ;
236246
@@ -250,23 +260,22 @@ class SIWholeQuadMode : public MachineFunctionPass {
250260 MachineFunctionProperties::Property::IsSSA);
251261 }
252262};
253-
254263} // end anonymous namespace
255264
256- char SIWholeQuadMode ::ID = 0 ;
265+ char SIWholeQuadModeLegacy ::ID = 0 ;
257266
258- INITIALIZE_PASS_BEGIN (SIWholeQuadMode , DEBUG_TYPE, " SI Whole Quad Mode" , false ,
259- false )
267+ INITIALIZE_PASS_BEGIN (SIWholeQuadModeLegacy , DEBUG_TYPE, " SI Whole Quad Mode" ,
268+ false , false )
260269INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
261270INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
262271INITIALIZE_PASS_DEPENDENCY(MachinePostDominatorTreeWrapperPass)
263- INITIALIZE_PASS_END(SIWholeQuadMode , DEBUG_TYPE, " SI Whole Quad Mode" , false ,
264- false )
272+ INITIALIZE_PASS_END(SIWholeQuadModeLegacy , DEBUG_TYPE, " SI Whole Quad Mode" ,
273+ false , false )
265274
266- char &llvm::SIWholeQuadModeID = SIWholeQuadMode ::ID;
275+ char &llvm::SIWholeQuadModeID = SIWholeQuadModeLegacy ::ID;
267276
268- FunctionPass *llvm::createSIWholeQuadModePass () {
269- return new SIWholeQuadMode ;
277+ FunctionPass *llvm::createSIWholeQuadModeLegacyPass () {
278+ return new SIWholeQuadModeLegacy ;
270279}
271280
272281#ifndef NDEBUG
@@ -1689,7 +1698,7 @@ SIWholeQuadMode::lowerInitExecInstrs(MachineBasicBlock &Entry, bool &Changed) {
16891698 return InsertPt;
16901699}
16911700
1692- bool SIWholeQuadMode::runOnMachineFunction (MachineFunction &MF) {
1701+ bool SIWholeQuadMode::run (MachineFunction &MF) {
16931702 LLVM_DEBUG (dbgs () << " SI Whole Quad Mode on " << MF.getName ()
16941703 << " ------------- \n " );
16951704 LLVM_DEBUG (MF.dump (););
@@ -1704,18 +1713,6 @@ bool SIWholeQuadMode::runOnMachineFunction(MachineFunction &MF) {
17041713 SetInactiveInstrs.clear ();
17051714 StateTransition.clear ();
17061715
1707- ST = &MF.getSubtarget <GCNSubtarget>();
1708-
1709- TII = ST->getInstrInfo ();
1710- TRI = &TII->getRegisterInfo ();
1711- MRI = &MF.getRegInfo ();
1712- LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
1713- auto *MDTWrapper = getAnalysisIfAvailable<MachineDominatorTreeWrapperPass>();
1714- MDT = MDTWrapper ? &MDTWrapper->getDomTree () : nullptr ;
1715- auto *PDTWrapper =
1716- getAnalysisIfAvailable<MachinePostDominatorTreeWrapperPass>();
1717- PDT = PDTWrapper ? &PDTWrapper->getPostDomTree () : nullptr ;
1718-
17191716 if (ST->isWave32 ()) {
17201717 AndOpc = AMDGPU::S_AND_B32;
17211718 AndTermOpc = AMDGPU::S_AND_B32_term;
@@ -1816,3 +1813,38 @@ bool SIWholeQuadMode::runOnMachineFunction(MachineFunction &MF) {
18161813
18171814 return Changed;
18181815}
1816+
1817+ bool SIWholeQuadModeLegacy::runOnMachineFunction (MachineFunction &MF) {
1818+ LiveIntervals *LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS ();
1819+ auto *MDTWrapper = getAnalysisIfAvailable<MachineDominatorTreeWrapperPass>();
1820+ MachineDominatorTree *MDT = MDTWrapper ? &MDTWrapper->getDomTree () : nullptr ;
1821+ auto *PDTWrapper =
1822+ getAnalysisIfAvailable<MachinePostDominatorTreeWrapperPass>();
1823+ MachinePostDominatorTree *PDT =
1824+ PDTWrapper ? &PDTWrapper->getPostDomTree () : nullptr ;
1825+ SIWholeQuadMode Impl (MF, LIS, MDT, PDT);
1826+ return Impl.run (MF);
1827+ }
1828+
1829+ PreservedAnalyses
1830+ SIWholeQuadModePass::run (MachineFunction &MF,
1831+ MachineFunctionAnalysisManager &MFAM) {
1832+ MFPropsModifier _ (*this , MF);
1833+
1834+ LiveIntervals *LIS = &MFAM.getResult <LiveIntervalsAnalysis>(MF);
1835+ MachineDominatorTree *MDT =
1836+ MFAM.getCachedResult <MachineDominatorTreeAnalysis>(MF);
1837+ MachinePostDominatorTree *PDT =
1838+ MFAM.getCachedResult <MachinePostDominatorTreeAnalysis>(MF);
1839+ SIWholeQuadMode Impl (MF, LIS, MDT, PDT);
1840+ bool Changed = Impl.run (MF);
1841+ if (!Changed)
1842+ return PreservedAnalyses::all ();
1843+
1844+ PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses ();
1845+ PA.preserve <SlotIndexesAnalysis>();
1846+ PA.preserve <LiveIntervalsAnalysis>();
1847+ PA.preserve <MachineDominatorTreeAnalysis>();
1848+ PA.preserve <MachinePostDominatorTreeAnalysis>();
1849+ return PA;
1850+ }
0 commit comments