Skip to content

Commit f34385d

Browse files
authored
[AMDGPU][NPM] Port GCNCreateVOPD to NPM (#130059)
1 parent a5b9548 commit f34385d

File tree

5 files changed

+47
-22
lines changed

5 files changed

+47
-22
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,12 @@ class SIMemoryLegalizerPass : public PassInfoMixin<SIMemoryLegalizerPass> {
365365
static bool isRequired() { return true; }
366366
};
367367

368+
class GCNCreateVOPDPass : public PassInfoMixin<GCNCreateVOPDPass> {
369+
public:
370+
PreservedAnalyses run(MachineFunction &MF,
371+
MachineFunctionAnalysisManager &AM);
372+
};
373+
368374
FunctionPass *createAMDGPUAnnotateUniformValuesLegacy();
369375

370376
ModulePass *createAMDGPUPrintfRuntimeBinding();
@@ -450,7 +456,7 @@ extern char &SIFormMemoryClausesID;
450456
void initializeSIPostRABundlerLegacyPass(PassRegistry &);
451457
extern char &SIPostRABundlerLegacyID;
452458

453-
void initializeGCNCreateVOPDPass(PassRegistry &);
459+
void initializeGCNCreateVOPDLegacyPass(PassRegistry &);
454460
extern char &GCNCreateVOPDID;
455461

456462
void initializeAMDGPUUnifyDivergentExitNodesPass(PassRegistry&);

llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def

+1
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ MACHINE_FUNCTION_PASS("amdgpu-reserve-wwm-regs", AMDGPUReserveWWMRegsPass())
103103
MACHINE_FUNCTION_PASS("amdgpu-rewrite-partial-reg-uses", GCNRewritePartialRegUsesPass())
104104
MACHINE_FUNCTION_PASS("amdgpu-pre-ra-optimizations", GCNPreRAOptimizationsPass())
105105
MACHINE_FUNCTION_PASS("amdgpu-nsa-reassign", GCNNSAReassignPass())
106+
MACHINE_FUNCTION_PASS("gcn-create-vopd", GCNCreateVOPDPass())
106107
MACHINE_FUNCTION_PASS("gcn-dpp-combine", GCNDPPCombinePass())
107108
MACHINE_FUNCTION_PASS("si-fix-sgpr-copies", SIFixSGPRCopiesPass())
108109
MACHINE_FUNCTION_PASS("si-fix-vgpr-copies", SIFixVGPRCopiesPass())

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() {
547547
initializeSIPreAllocateWWMRegsLegacyPass(*PR);
548548
initializeSIFormMemoryClausesLegacyPass(*PR);
549549
initializeSIPostRABundlerLegacyPass(*PR);
550-
initializeGCNCreateVOPDPass(*PR);
550+
initializeGCNCreateVOPDLegacyPass(*PR);
551551
initializeAMDGPUUnifyDivergentExitNodesPass(*PR);
552552
initializeAMDGPUAAWrapperPassPass(*PR);
553553
initializeAMDGPUExternalAAWrapperPass(*PR);
@@ -2156,7 +2156,7 @@ void AMDGPUCodeGenPassBuilder::addPostRegAlloc(AddMachinePass &addPass) const {
21562156

21572157
void AMDGPUCodeGenPassBuilder::addPreEmitPass(AddMachinePass &addPass) const {
21582158
if (isPassEnabled(EnableVOPD, CodeGenOptLevel::Less)) {
2159-
// TODO: addPass(GCNCreateVOPDPass());
2159+
addPass(GCNCreateVOPDPass());
21602160
}
21612161

21622162
addPass(SIMemoryLegalizerPass());

llvm/lib/Target/AMDGPU/GCNCreateVOPD.cpp

+35-19
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,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)

llvm/test/CodeGen/AMDGPU/vopd-combine.mir

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -verify-machineinstrs -run-pass=postmisched %s -o - | FileCheck -check-prefix=SCHED %s
55
# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -verify-machineinstrs -run-pass=postmisched,gcn-create-vopd %s -o - | FileCheck -check-prefixes=PAIR,PAIR-GFX12 %s
66

7+
# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -passes=postmisched,gcn-create-vopd %s -o - | FileCheck -check-prefixes=PAIR,PAIR-GFX12 %s
8+
79
--- |
810
@lds = external addrspace(3) global [8 x i8]
911
define void @vopd_schedule() { ret void }

0 commit comments

Comments
 (0)