Skip to content

Commit 9ba0133

Browse files
committed
[AMDGPU][NPM] Port GCNCreateVOPD to NPM
1 parent 399b997 commit 9ba0133

File tree

4 files changed

+43
-22
lines changed

4 files changed

+43
-22
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,11 @@ class SIModeRegisterPass : public PassInfoMixin<SIModeRegisterPass> {
358358
PreservedAnalyses run(MachineFunction &F, MachineFunctionAnalysisManager &AM);
359359
};
360360

361+
class GCNCreateVOPDPass : public PassInfoMixin<GCNCreateVOPDPass> {
362+
public:
363+
PreservedAnalyses run(MachineFunction &MF, MachineFunctionAnalysisManager &AM);
364+
};
365+
361366
FunctionPass *createAMDGPUAnnotateUniformValuesLegacy();
362367

363368
ModulePass *createAMDGPUPrintfRuntimeBinding();
@@ -443,7 +448,7 @@ extern char &SIFormMemoryClausesID;
443448
void initializeSIPostRABundlerLegacyPass(PassRegistry &);
444449
extern char &SIPostRABundlerLegacyID;
445450

446-
void initializeGCNCreateVOPDPass(PassRegistry &);
451+
void initializeGCNCreateVOPDLegacyPass(PassRegistry &);
447452
extern char &GCNCreateVOPDID;
448453

449454
void initializeAMDGPUUnifyDivergentExitNodesPass(PassRegistry&);

llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ MACHINE_FUNCTION_PASS("amdgpu-rewrite-partial-reg-uses", GCNRewritePartialRegUse
103103
MACHINE_FUNCTION_PASS("amdgpu-pre-ra-optimizations", GCNPreRAOptimizationsPass())
104104
MACHINE_FUNCTION_PASS("amdgpu-nsa-reassign", GCNNSAReassignPass())
105105
MACHINE_FUNCTION_PASS("gcn-dpp-combine", GCNDPPCombinePass())
106+
MACHINE_FUNCTION_PASS("gcn-create-vopd", GCNCreateVOPDPass())
106107
MACHINE_FUNCTION_PASS("si-fix-sgpr-copies", SIFixSGPRCopiesPass())
107108
MACHINE_FUNCTION_PASS("si-fix-vgpr-copies", SIFixVGPRCopiesPass())
108109
MACHINE_FUNCTION_PASS("si-fold-operands", SIFoldOperandsPass());

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() {
546546
initializeSIPreAllocateWWMRegsLegacyPass(*PR);
547547
initializeSIFormMemoryClausesLegacyPass(*PR);
548548
initializeSIPostRABundlerLegacyPass(*PR);
549-
initializeGCNCreateVOPDPass(*PR);
549+
initializeGCNCreateVOPDLegacyPass(*PR);
550550
initializeAMDGPUUnifyDivergentExitNodesPass(*PR);
551551
initializeAMDGPUAAWrapperPassPass(*PR);
552552
initializeAMDGPUExternalAAWrapperPass(*PR);
@@ -2149,7 +2149,7 @@ void AMDGPUCodeGenPassBuilder::addPostRegAlloc(AddMachinePass &addPass) const {
21492149

21502150
void AMDGPUCodeGenPassBuilder::addPreEmitPass(AddMachinePass &addPass) const {
21512151
if (isPassEnabled(EnableVOPD, CodeGenOptLevel::Less)) {
2152-
// TODO: addPass(GCNCreateVOPDPass());
2152+
addPass(GCNCreateVOPDPass());
21532153
}
21542154
// TODO: addPass(SIMemoryLegalizerPass());
21552155
// TODO: addPass(SIInsertWaitcntsPass());

llvm/lib/Target/AMDGPU/GCNCreateVOPD.cpp

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
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

3738
namespace {
3839

39-
class GCNCreateVOPD : public MachineFunctionPass {
40+
class GCNCreateVOPD {
4041
private:
4142
class VOPDCombineInfo {
4243
public:
@@ -49,20 +50,8 @@ class GCNCreateVOPD : public MachineFunctionPass {
4950
};
5051

5152
public:
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,39 @@ 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 llvm::GCNCreateVOPDPass::run(MachineFunction &MF,
177+
MachineFunctionAnalysisManager &AM) {
178+
if (!GCNCreateVOPD().run(MF))
179+
return PreservedAnalyses::all();
180+
return getMachineFunctionPassPreservedAnalyses().preserveSet<CFGAnalyses>();
181+
}
182+
183+
char GCNCreateVOPDLegacy::ID = 0;
169184

170-
char &llvm::GCNCreateVOPDID = GCNCreateVOPD::ID;
185+
char &llvm::GCNCreateVOPDID = GCNCreateVOPDLegacy::ID;
171186

172-
INITIALIZE_PASS(GCNCreateVOPD, DEBUG_TYPE, "GCN Create VOPD Instructions",
187+
INITIALIZE_PASS(GCNCreateVOPDLegacy, DEBUG_TYPE, "GCN Create VOPD Instructions",
173188
false, false)

0 commit comments

Comments
 (0)