67
67
// /
68
68
// ===----------------------------------------------------------------------===//
69
69
70
+ #include " SIWholeQuadMode.h"
70
71
#include " AMDGPU.h"
71
72
#include " GCNSubtarget.h"
72
73
#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -148,11 +149,19 @@ struct WorkItem {
148
149
WorkItem (MachineInstr *MI) : MI(MI) {}
149
150
};
150
151
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
+
152
161
private:
162
+ const GCNSubtarget *ST;
153
163
const SIInstrInfo *TII;
154
164
const SIRegisterInfo *TRI;
155
- const GCNSubtarget *ST;
156
165
MachineRegisterInfo *MRI;
157
166
LiveIntervals *LIS;
158
167
MachineDominatorTree *MDT;
@@ -225,12 +234,13 @@ class SIWholeQuadMode : public MachineFunctionPass {
225
234
void lowerInitExec (MachineInstr &MI);
226
235
MachineBasicBlock::iterator lowerInitExecInstrs (MachineBasicBlock &Entry,
227
236
bool &Changed);
237
+ };
228
238
239
+ class SIWholeQuadModeLegacy : public MachineFunctionPass {
229
240
public:
230
241
static char ID;
231
242
232
- SIWholeQuadMode () :
233
- MachineFunctionPass (ID) { }
243
+ SIWholeQuadModeLegacy () : MachineFunctionPass(ID) {}
234
244
235
245
bool runOnMachineFunction (MachineFunction &MF) override ;
236
246
@@ -250,23 +260,22 @@ class SIWholeQuadMode : public MachineFunctionPass {
250
260
MachineFunctionProperties::Property::IsSSA);
251
261
}
252
262
};
253
-
254
263
} // end anonymous namespace
255
264
256
- char SIWholeQuadMode ::ID = 0 ;
265
+ char SIWholeQuadModeLegacy ::ID = 0 ;
257
266
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 )
260
269
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
261
270
INITIALIZE_PASS_DEPENDENCY(MachineDominatorTreeWrapperPass)
262
271
INITIALIZE_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 )
265
274
266
- char &llvm::SIWholeQuadModeID = SIWholeQuadMode ::ID;
275
+ char &llvm::SIWholeQuadModeID = SIWholeQuadModeLegacy ::ID;
267
276
268
- FunctionPass *llvm::createSIWholeQuadModePass () {
269
- return new SIWholeQuadMode ;
277
+ FunctionPass *llvm::createSIWholeQuadModeLegacyPass () {
278
+ return new SIWholeQuadModeLegacy ;
270
279
}
271
280
272
281
#ifndef NDEBUG
@@ -1689,7 +1698,7 @@ SIWholeQuadMode::lowerInitExecInstrs(MachineBasicBlock &Entry, bool &Changed) {
1689
1698
return InsertPt;
1690
1699
}
1691
1700
1692
- bool SIWholeQuadMode::runOnMachineFunction (MachineFunction &MF) {
1701
+ bool SIWholeQuadMode::run (MachineFunction &MF) {
1693
1702
LLVM_DEBUG (dbgs () << " SI Whole Quad Mode on " << MF.getName ()
1694
1703
<< " ------------- \n " );
1695
1704
LLVM_DEBUG (MF.dump (););
@@ -1704,18 +1713,6 @@ bool SIWholeQuadMode::runOnMachineFunction(MachineFunction &MF) {
1704
1713
SetInactiveInstrs.clear ();
1705
1714
StateTransition.clear ();
1706
1715
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
-
1719
1716
if (ST->isWave32 ()) {
1720
1717
AndOpc = AMDGPU::S_AND_B32;
1721
1718
AndTermOpc = AMDGPU::S_AND_B32_term;
@@ -1816,3 +1813,38 @@ bool SIWholeQuadMode::runOnMachineFunction(MachineFunction &MF) {
1816
1813
1817
1814
return Changed;
1818
1815
}
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