27
27
#include " llvm/CodeGen/MachineBasicBlock.h"
28
28
#include " llvm/CodeGen/MachineInstr.h"
29
29
#include " llvm/CodeGen/MachineOperand.h"
30
+ #include " llvm/CodeGen/MachinePassManager.h"
30
31
#include " llvm/Support/Debug.h"
31
32
32
33
#define DEBUG_TYPE " gcn-create-vopd"
@@ -36,7 +37,7 @@ using namespace llvm;
36
37
37
38
namespace {
38
39
39
- class GCNCreateVOPD : public MachineFunctionPass {
40
+ class GCNCreateVOPD {
40
41
private:
41
42
class VOPDCombineInfo {
42
43
public:
@@ -49,20 +50,8 @@ class GCNCreateVOPD : public MachineFunctionPass {
49
50
};
50
51
51
52
public:
52
- static char ID;
53
53
const GCNSubtarget *ST = nullptr ;
54
54
55
- GCNCreateVOPD () : MachineFunctionPass(ID) {}
56
-
57
- void getAnalysisUsage (AnalysisUsage &AU) const override {
58
- AU.setPreservesCFG ();
59
- MachineFunctionPass::getAnalysisUsage (AU);
60
- }
61
-
62
- StringRef getPassName () const override {
63
- return " GCN Create VOPD Instructions" ;
64
- }
65
-
66
55
bool doReplace (const SIInstrInfo *SII, VOPDCombineInfo &CI) {
67
56
auto *FirstMI = CI.FirstMI ;
68
57
auto *SecondMI = CI.SecondMI ;
@@ -112,9 +101,7 @@ class GCNCreateVOPD : public MachineFunctionPass {
112
101
return true ;
113
102
}
114
103
115
- bool runOnMachineFunction (MachineFunction &MF) override {
116
- if (skipFunction (MF.getFunction ()))
117
- return false ;
104
+ bool run (MachineFunction &MF) {
118
105
ST = &MF.getSubtarget <GCNSubtarget>();
119
106
if (!AMDGPU::hasVOPD (*ST) || !ST->isWave32 ())
120
107
return false ;
@@ -163,11 +150,40 @@ class GCNCreateVOPD : public MachineFunctionPass {
163
150
}
164
151
};
165
152
153
+ class GCNCreateVOPDLegacy : public MachineFunctionPass {
154
+ public:
155
+ static char ID;
156
+ GCNCreateVOPDLegacy () : MachineFunctionPass(ID) {}
157
+
158
+ void getAnalysisUsage (AnalysisUsage &AU) const override {
159
+ AU.setPreservesCFG ();
160
+ MachineFunctionPass::getAnalysisUsage (AU);
161
+ }
162
+
163
+ StringRef getPassName () const override {
164
+ return " GCN Create VOPD Instructions" ;
165
+ }
166
+ bool runOnMachineFunction (MachineFunction &MF) override {
167
+ if (skipFunction (MF.getFunction ()))
168
+ return false ;
169
+
170
+ return GCNCreateVOPD ().run (MF);
171
+ }
172
+ };
173
+
166
174
} // namespace
167
175
168
- char GCNCreateVOPD::ID = 0 ;
176
+ PreservedAnalyses
177
+ llvm::GCNCreateVOPDPass::run (MachineFunction &MF,
178
+ MachineFunctionAnalysisManager &AM) {
179
+ if (!GCNCreateVOPD ().run (MF))
180
+ return PreservedAnalyses::all ();
181
+ return getMachineFunctionPassPreservedAnalyses ().preserveSet <CFGAnalyses>();
182
+ }
183
+
184
+ char GCNCreateVOPDLegacy::ID = 0 ;
169
185
170
- char &llvm::GCNCreateVOPDID = GCNCreateVOPD ::ID;
186
+ char &llvm::GCNCreateVOPDID = GCNCreateVOPDLegacy ::ID;
171
187
172
- INITIALIZE_PASS (GCNCreateVOPD , DEBUG_TYPE, " GCN Create VOPD Instructions" ,
188
+ INITIALIZE_PASS (GCNCreateVOPDLegacy , DEBUG_TYPE, " GCN Create VOPD Instructions" ,
173
189
false , false )
0 commit comments