66//
77// ===----------------------------------------------------------------------===//
88
9+ #include " SIOptimizeExecMasking.h"
910#include " AMDGPU.h"
1011#include " GCNSubtarget.h"
1112#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -23,7 +24,7 @@ using namespace llvm;
2324
2425namespace {
2526
26- class SIOptimizeExecMasking : public MachineFunctionPass {
27+ class SIOptimizeExecMasking {
2728 MachineFunction *MF = nullptr ;
2829 const GCNSubtarget *ST = nullptr ;
2930 const SIRegisterInfo *TRI = nullptr ;
@@ -61,11 +62,16 @@ class SIOptimizeExecMasking : public MachineFunctionPass {
6162 void tryRecordOrSaveexecXorSequence (MachineInstr &MI);
6263 bool optimizeOrSaveexecXorSequences ();
6364
65+ public:
66+ bool run (MachineFunction &MF);
67+ };
68+
69+ class SIOptimizeExecMaskingLegacy : public MachineFunctionPass {
6470public:
6571 static char ID;
6672
67- SIOptimizeExecMasking () : MachineFunctionPass(ID) {
68- initializeSIOptimizeExecMaskingPass (*PassRegistry::getPassRegistry ());
73+ SIOptimizeExecMaskingLegacy () : MachineFunctionPass(ID) {
74+ initializeSIOptimizeExecMaskingLegacyPass (*PassRegistry::getPassRegistry ());
6975 }
7076
7177 bool runOnMachineFunction (MachineFunction &MF) override ;
@@ -82,15 +88,28 @@ class SIOptimizeExecMasking : public MachineFunctionPass {
8288
8389} // End anonymous namespace.
8490
85- INITIALIZE_PASS_BEGIN (SIOptimizeExecMasking, DEBUG_TYPE,
91+ PreservedAnalyses
92+ SIOptimizeExecMaskingPass::run (MachineFunction &MF,
93+ MachineFunctionAnalysisManager &) {
94+ SIOptimizeExecMasking Impl;
95+
96+ if (!Impl.run (MF))
97+ return PreservedAnalyses::all ();
98+
99+ auto PA = getMachineFunctionPassPreservedAnalyses ();
100+ PA.preserveSet <CFGAnalyses>();
101+ return PA;
102+ }
103+
104+ INITIALIZE_PASS_BEGIN (SIOptimizeExecMaskingLegacy, DEBUG_TYPE,
86105 " SI optimize exec mask operations" , false , false )
87106INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
88- INITIALIZE_PASS_END(SIOptimizeExecMasking , DEBUG_TYPE,
107+ INITIALIZE_PASS_END(SIOptimizeExecMaskingLegacy , DEBUG_TYPE,
89108 " SI optimize exec mask operations" , false , false )
90109
91- char SIOptimizeExecMasking ::ID = 0;
110+ char SIOptimizeExecMaskingLegacy ::ID = 0;
92111
93- char &llvm::SIOptimizeExecMaskingID = SIOptimizeExecMasking ::ID;
112+ char &llvm::SIOptimizeExecMaskingLegacyID = SIOptimizeExecMaskingLegacy ::ID;
94113
95114// / If \p MI is a copy from exec, return the register copied to.
96115Register SIOptimizeExecMasking::isCopyFromExec (const MachineInstr &MI) const {
@@ -786,10 +805,14 @@ bool SIOptimizeExecMasking::optimizeOrSaveexecXorSequences() {
786805 return Changed;
787806}
788807
789- bool SIOptimizeExecMasking ::runOnMachineFunction (MachineFunction &MF) {
808+ bool SIOptimizeExecMaskingLegacy ::runOnMachineFunction (MachineFunction &MF) {
790809 if (skipFunction (MF.getFunction ()))
791810 return false ;
792811
812+ return SIOptimizeExecMasking ().run (MF);
813+ }
814+
815+ bool SIOptimizeExecMasking::run (MachineFunction &MF) {
793816 this ->MF = &MF;
794817 ST = &MF.getSubtarget <GCNSubtarget>();
795818 TRI = ST->getRegisterInfo ();
0 commit comments