6
6
//
7
7
// ===----------------------------------------------------------------------===//
8
8
9
+ #include " SIOptimizeExecMasking.h"
9
10
#include " AMDGPU.h"
10
11
#include " GCNSubtarget.h"
11
12
#include " MCTargetDesc/AMDGPUMCTargetDesc.h"
@@ -23,7 +24,7 @@ using namespace llvm;
23
24
24
25
namespace {
25
26
26
- class SIOptimizeExecMasking : public MachineFunctionPass {
27
+ class SIOptimizeExecMasking {
27
28
MachineFunction *MF = nullptr ;
28
29
const GCNSubtarget *ST = nullptr ;
29
30
const SIRegisterInfo *TRI = nullptr ;
@@ -61,11 +62,16 @@ class SIOptimizeExecMasking : public MachineFunctionPass {
61
62
void tryRecordOrSaveexecXorSequence (MachineInstr &MI);
62
63
bool optimizeOrSaveexecXorSequences ();
63
64
65
+ public:
66
+ bool run (MachineFunction &MF);
67
+ };
68
+
69
+ class SIOptimizeExecMaskingLegacy : public MachineFunctionPass {
64
70
public:
65
71
static char ID;
66
72
67
- SIOptimizeExecMasking () : MachineFunctionPass(ID) {
68
- initializeSIOptimizeExecMaskingPass (*PassRegistry::getPassRegistry ());
73
+ SIOptimizeExecMaskingLegacy () : MachineFunctionPass(ID) {
74
+ initializeSIOptimizeExecMaskingLegacyPass (*PassRegistry::getPassRegistry ());
69
75
}
70
76
71
77
bool runOnMachineFunction (MachineFunction &MF) override ;
@@ -82,15 +88,28 @@ class SIOptimizeExecMasking : public MachineFunctionPass {
82
88
83
89
} // End anonymous namespace.
84
90
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,
86
105
" SI optimize exec mask operations" , false , false )
87
106
INITIALIZE_PASS_DEPENDENCY(LiveIntervalsWrapperPass)
88
- INITIALIZE_PASS_END(SIOptimizeExecMasking , DEBUG_TYPE,
107
+ INITIALIZE_PASS_END(SIOptimizeExecMaskingLegacy , DEBUG_TYPE,
89
108
" SI optimize exec mask operations" , false , false )
90
109
91
- char SIOptimizeExecMasking ::ID = 0;
110
+ char SIOptimizeExecMaskingLegacy ::ID = 0;
92
111
93
- char &llvm::SIOptimizeExecMaskingID = SIOptimizeExecMasking ::ID;
112
+ char &llvm::SIOptimizeExecMaskingLegacyID = SIOptimizeExecMaskingLegacy ::ID;
94
113
95
114
// / If \p MI is a copy from exec, return the register copied to.
96
115
Register SIOptimizeExecMasking::isCopyFromExec (const MachineInstr &MI) const {
@@ -786,10 +805,14 @@ bool SIOptimizeExecMasking::optimizeOrSaveexecXorSequences() {
786
805
return Changed;
787
806
}
788
807
789
- bool SIOptimizeExecMasking ::runOnMachineFunction (MachineFunction &MF) {
808
+ bool SIOptimizeExecMaskingLegacy ::runOnMachineFunction (MachineFunction &MF) {
790
809
if (skipFunction (MF.getFunction ()))
791
810
return false ;
792
811
812
+ return SIOptimizeExecMasking ().run (MF);
813
+ }
814
+
815
+ bool SIOptimizeExecMasking::run (MachineFunction &MF) {
793
816
this ->MF = &MF;
794
817
ST = &MF.getSubtarget <GCNSubtarget>();
795
818
TRI = ST->getRegisterInfo ();
0 commit comments