5757//
5858// ===----------------------------------------------------------------------===//
5959
60+ #include " SILoadStoreOptimizer.h"
6061#include " AMDGPU.h"
6162#include " GCNSubtarget.h"
6263#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -104,7 +105,7 @@ struct AddressRegs {
104105// GFX10 image_sample instructions can have 12 vaddrs + srsrc + ssamp.
105106const unsigned MaxAddressRegs = 12 + 1 + 1 ;
106107
107- class SILoadStoreOptimizer : public MachineFunctionPass {
108+ class SILoadStoreOptimizer {
108109 struct CombineInfo {
109110 MachineBasicBlock::iterator I;
110111 unsigned EltSize;
@@ -295,17 +296,21 @@ class SILoadStoreOptimizer : public MachineFunctionPass {
295296 static InstClassEnum getCommonInstClass (const CombineInfo &CI,
296297 const CombineInfo &Paired);
297298
298- public:
299- static char ID;
300-
301- SILoadStoreOptimizer () : MachineFunctionPass(ID) {
302- initializeSILoadStoreOptimizerPass (*PassRegistry::getPassRegistry ());
303- }
304-
305299 bool optimizeInstsWithSameBaseAddr (std::list<CombineInfo> &MergeList,
306300 bool &OptimizeListAgain);
307301 bool optimizeBlock (std::list<std::list<CombineInfo> > &MergeableInsts);
308302
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+
309314 bool runOnMachineFunction (MachineFunction &MF) override ;
310315
311316 StringRef getPassName () const override { return " SI Load Store Optimizer" ; }
@@ -882,18 +887,18 @@ void SILoadStoreOptimizer::CombineInfo::setMI(MachineBasicBlock::iterator MI,
882887
883888} // end anonymous namespace.
884889
885- INITIALIZE_PASS_BEGIN (SILoadStoreOptimizer , DEBUG_TYPE,
890+ INITIALIZE_PASS_BEGIN (SILoadStoreOptimizerLegacy , DEBUG_TYPE,
886891 " SI Load Store Optimizer" , false , false )
887892INITIALIZE_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 )
890895
891- char SILoadStoreOptimizer ::ID = 0;
896+ char SILoadStoreOptimizerLegacy ::ID = 0;
892897
893- char &llvm::SILoadStoreOptimizerID = SILoadStoreOptimizer ::ID;
898+ char &llvm::SILoadStoreOptimizerLegacyID = SILoadStoreOptimizerLegacy ::ID;
894899
895- FunctionPass *llvm::createSILoadStoreOptimizerPass () {
896- return new SILoadStoreOptimizer ();
900+ FunctionPass *llvm::createSILoadStoreOptimizerLegacyPass () {
901+ return new SILoadStoreOptimizerLegacy ();
897902}
898903
899904static void addDefsUsesToList (const MachineInstr &MI,
@@ -2522,10 +2527,15 @@ SILoadStoreOptimizer::optimizeInstsWithSameBaseAddr(
25222527 return Modified;
25232528}
25242529
2525- bool SILoadStoreOptimizer ::runOnMachineFunction (MachineFunction &MF) {
2530+ bool SILoadStoreOptimizerLegacy ::runOnMachineFunction (MachineFunction &MF) {
25262531 if (skipFunction (MF.getFunction ()))
25272532 return false ;
2533+ return SILoadStoreOptimizer (
2534+ &getAnalysis<AAResultsWrapperPass>().getAAResults ())
2535+ .run (MF);
2536+ }
25282537
2538+ bool SILoadStoreOptimizer::run (MachineFunction &MF) {
25292539 STM = &MF.getSubtarget <GCNSubtarget>();
25302540 if (!STM->loadStoreOptEnabled ())
25312541 return false ;
@@ -2534,7 +2544,6 @@ bool SILoadStoreOptimizer::runOnMachineFunction(MachineFunction &MF) {
25342544 TRI = &TII->getRegisterInfo ();
25352545
25362546 MRI = &MF.getRegInfo ();
2537- AA = &getAnalysis<AAResultsWrapperPass>().getAAResults ();
25382547
25392548 LLVM_DEBUG (dbgs () << " Running SILoadStoreOptimizer\n " );
25402549
@@ -2571,3 +2580,24 @@ bool SILoadStoreOptimizer::runOnMachineFunction(MachineFunction &MF) {
25712580
25722581 return Modified;
25732582}
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