2727#include " llvm/CodeGen/MachineBasicBlock.h"
2828#include " llvm/CodeGen/MachineInstr.h"
2929#include " llvm/CodeGen/MachineOperand.h"
30+ #include " llvm/CodeGen/MachinePassManager.h"
3031#include " llvm/Support/Debug.h"
3132
3233#define DEBUG_TYPE " gcn-create-vopd"
@@ -36,7 +37,7 @@ using namespace llvm;
3637
3738namespace {
3839
39- class GCNCreateVOPD : public MachineFunctionPass {
40+ class GCNCreateVOPD {
4041private:
4142 class VOPDCombineInfo {
4243 public:
@@ -49,20 +50,8 @@ class GCNCreateVOPD : public MachineFunctionPass {
4950 };
5051
5152public:
52- static char ID;
5353 const GCNSubtarget *ST = nullptr ;
5454
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-
6655 bool doReplace (const SIInstrInfo *SII, VOPDCombineInfo &CI) {
6756 auto *FirstMI = CI.FirstMI ;
6857 auto *SecondMI = CI.SecondMI ;
@@ -112,9 +101,7 @@ class GCNCreateVOPD : public MachineFunctionPass {
112101 return true ;
113102 }
114103
115- bool runOnMachineFunction (MachineFunction &MF) override {
116- if (skipFunction (MF.getFunction ()))
117- return false ;
104+ bool run (MachineFunction &MF) {
118105 ST = &MF.getSubtarget <GCNSubtarget>();
119106 if (!AMDGPU::hasVOPD (*ST) || !ST->isWave32 ())
120107 return false ;
@@ -163,11 +150,40 @@ class GCNCreateVOPD : public MachineFunctionPass {
163150 }
164151};
165152
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+
166174} // namespace
167175
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 ;
169185
170- char &llvm::GCNCreateVOPDID = GCNCreateVOPD ::ID;
186+ char &llvm::GCNCreateVOPDID = GCNCreateVOPDLegacy ::ID;
171187
172- INITIALIZE_PASS (GCNCreateVOPD , DEBUG_TYPE, " GCN Create VOPD Instructions" ,
188+ INITIALIZE_PASS (GCNCreateVOPDLegacy , DEBUG_TYPE, " GCN Create VOPD Instructions" ,
173189 false , false )
0 commit comments