57
57
//
58
58
// ===----------------------------------------------------------------------===//
59
59
60
+ #include " SILoadStoreOptimizer.h"
60
61
#include " AMDGPU.h"
61
62
#include " GCNSubtarget.h"
62
63
#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -104,7 +105,7 @@ struct AddressRegs {
104
105
// GFX10 image_sample instructions can have 12 vaddrs + srsrc + ssamp.
105
106
const unsigned MaxAddressRegs = 12 + 1 + 1 ;
106
107
107
- class SILoadStoreOptimizer : public MachineFunctionPass {
108
+ class SILoadStoreOptimizer {
108
109
struct CombineInfo {
109
110
MachineBasicBlock::iterator I;
110
111
unsigned EltSize;
@@ -295,17 +296,21 @@ class SILoadStoreOptimizer : public MachineFunctionPass {
295
296
static InstClassEnum getCommonInstClass (const CombineInfo &CI,
296
297
const CombineInfo &Paired);
297
298
298
- public:
299
- static char ID;
300
-
301
- SILoadStoreOptimizer () : MachineFunctionPass(ID) {
302
- initializeSILoadStoreOptimizerPass (*PassRegistry::getPassRegistry ());
303
- }
304
-
305
299
bool optimizeInstsWithSameBaseAddr (std::list<CombineInfo> &MergeList,
306
300
bool &OptimizeListAgain);
307
301
bool optimizeBlock (std::list<std::list<CombineInfo> > &MergeableInsts);
308
302
303
+ public:
304
+ SILoadStoreOptimizer (AliasAnalysis *AA) : AA(AA) {}
305
+ bool run (MachineFunction &MF);
306
+ };
307
+
308
+ class SILoadStoreOptimizerLegacy : public MachineFunctionPass {
309
+ public:
310
+ static char ID;
311
+
312
+ SILoadStoreOptimizerLegacy () : MachineFunctionPass(ID) {}
313
+
309
314
bool runOnMachineFunction (MachineFunction &MF) override ;
310
315
311
316
StringRef getPassName () const override { return " SI Load Store Optimizer" ; }
@@ -882,18 +887,18 @@ void SILoadStoreOptimizer::CombineInfo::setMI(MachineBasicBlock::iterator MI,
882
887
883
888
} // end anonymous namespace.
884
889
885
- INITIALIZE_PASS_BEGIN (SILoadStoreOptimizer , DEBUG_TYPE,
890
+ INITIALIZE_PASS_BEGIN (SILoadStoreOptimizerLegacy , DEBUG_TYPE,
886
891
" SI Load Store Optimizer" , false , false )
887
892
INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass)
888
- INITIALIZE_PASS_END(SILoadStoreOptimizer , DEBUG_TYPE, " SI Load Store Optimizer " ,
889
- false , false )
893
+ INITIALIZE_PASS_END(SILoadStoreOptimizerLegacy , DEBUG_TYPE,
894
+ " SI Load Store Optimizer " , false , false )
890
895
891
- char SILoadStoreOptimizer ::ID = 0;
896
+ char SILoadStoreOptimizerLegacy ::ID = 0;
892
897
893
- char &llvm::SILoadStoreOptimizerID = SILoadStoreOptimizer ::ID;
898
+ char &llvm::SILoadStoreOptimizerLegacyID = SILoadStoreOptimizerLegacy ::ID;
894
899
895
- FunctionPass *llvm::createSILoadStoreOptimizerPass () {
896
- return new SILoadStoreOptimizer ();
900
+ FunctionPass *llvm::createSILoadStoreOptimizerLegacyPass () {
901
+ return new SILoadStoreOptimizerLegacy ();
897
902
}
898
903
899
904
static void addDefsUsesToList (const MachineInstr &MI,
@@ -2522,10 +2527,15 @@ SILoadStoreOptimizer::optimizeInstsWithSameBaseAddr(
2522
2527
return Modified;
2523
2528
}
2524
2529
2525
- bool SILoadStoreOptimizer ::runOnMachineFunction (MachineFunction &MF) {
2530
+ bool SILoadStoreOptimizerLegacy ::runOnMachineFunction (MachineFunction &MF) {
2526
2531
if (skipFunction (MF.getFunction ()))
2527
2532
return false ;
2533
+ return SILoadStoreOptimizer (
2534
+ &getAnalysis<AAResultsWrapperPass>().getAAResults ())
2535
+ .run (MF);
2536
+ }
2528
2537
2538
+ bool SILoadStoreOptimizer::run (MachineFunction &MF) {
2529
2539
STM = &MF.getSubtarget <GCNSubtarget>();
2530
2540
if (!STM->loadStoreOptEnabled ())
2531
2541
return false ;
@@ -2534,7 +2544,6 @@ bool SILoadStoreOptimizer::runOnMachineFunction(MachineFunction &MF) {
2534
2544
TRI = &TII->getRegisterInfo ();
2535
2545
2536
2546
MRI = &MF.getRegInfo ();
2537
- AA = &getAnalysis<AAResultsWrapperPass>().getAAResults ();
2538
2547
2539
2548
LLVM_DEBUG (dbgs () << " Running SILoadStoreOptimizer\n " );
2540
2549
@@ -2571,3 +2580,24 @@ bool SILoadStoreOptimizer::runOnMachineFunction(MachineFunction &MF) {
2571
2580
2572
2581
return Modified;
2573
2582
}
2583
+
2584
+ PreservedAnalyses
2585
+ SILoadStoreOptimizerPass::run (MachineFunction &MF,
2586
+ MachineFunctionAnalysisManager &MFAM) {
2587
+ MFPropsModifier _ (*this , MF);
2588
+
2589
+ if (MF.getFunction ().hasOptNone ())
2590
+ return PreservedAnalyses::all ();
2591
+
2592
+ auto &FAM = MFAM.getResult <FunctionAnalysisManagerMachineFunctionProxy>(MF)
2593
+ .getManager ();
2594
+ AAResults &AA = FAM.getResult <AAManager>(MF.getFunction ());
2595
+
2596
+ bool Changed = SILoadStoreOptimizer (&AA).run (MF);
2597
+ if (!Changed)
2598
+ return PreservedAnalyses::all ();
2599
+
2600
+ PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses ();
2601
+ PA.preserveSet <CFGAnalyses>();
2602
+ return PA;
2603
+ }
0 commit comments