Skip to content

Commit a13a51b

Browse files
authored
[AMDGPU][NPM] Port AMDGPUSetWavePriority to NPM (#130064)
1 parent d7afafd commit a13a51b

File tree

5 files changed

+50
-17
lines changed

5 files changed

+50
-17
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,13 @@ class SILateBranchLoweringPass
399399
static bool isRequired() { return true; }
400400
};
401401

402+
class AMDGPUSetWavePriorityPass
403+
: public PassInfoMixin<AMDGPUSetWavePriorityPass> {
404+
public:
405+
PreservedAnalyses run(MachineFunction &MF,
406+
MachineFunctionAnalysisManager &MFAM);
407+
};
408+
402409
FunctionPass *createAMDGPUAnnotateUniformValuesLegacy();
403410

404411
ModulePass *createAMDGPUPrintfRuntimeBinding();
@@ -511,7 +518,7 @@ void initializeGCNPreRAOptimizationsLegacyPass(PassRegistry &);
511518
extern char &GCNPreRAOptimizationsID;
512519

513520
FunctionPass *createAMDGPUSetWavePriorityPass();
514-
void initializeAMDGPUSetWavePriorityPass(PassRegistry &);
521+
void initializeAMDGPUSetWavePriorityLegacyPass(PassRegistry &);
515522

516523
void initializeGCNRewritePartialRegUsesLegacyPass(llvm::PassRegistry &);
517524
extern char &GCNRewritePartialRegUsesID;

llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ MACHINE_FUNCTION_PASS("amdgpu-mark-last-scratch-load", AMDGPUMarkLastScratchLoad
102102
MACHINE_FUNCTION_PASS("amdgpu-pre-ra-long-branch-reg", GCNPreRALongBranchRegPass())
103103
MACHINE_FUNCTION_PASS("amdgpu-reserve-wwm-regs", AMDGPUReserveWWMRegsPass())
104104
MACHINE_FUNCTION_PASS("amdgpu-rewrite-partial-reg-uses", GCNRewritePartialRegUsesPass())
105+
MACHINE_FUNCTION_PASS("amdgpu-set-wave-priority", AMDGPUSetWavePriorityPass())
105106
MACHINE_FUNCTION_PASS("amdgpu-pre-ra-optimizations", GCNPreRAOptimizationsPass())
106107
MACHINE_FUNCTION_PASS("amdgpu-nsa-reassign", GCNNSAReassignPass())
107108
MACHINE_FUNCTION_PASS("gcn-create-vopd", GCNCreateVOPDPass())
@@ -133,7 +134,6 @@ MACHINE_FUNCTION_PASS("si-wqm", SIWholeQuadModePass())
133134
#define DUMMY_MACHINE_FUNCTION_PASS(NAME, CREATE_PASS)
134135
DUMMY_MACHINE_FUNCTION_PASS("amdgpu-pre-ra-optimizations", GCNPreRAOptimizationsPass())
135136
DUMMY_MACHINE_FUNCTION_PASS("amdgpu-rewrite-partial-reg-uses", GCNRewritePartialRegUsesPass())
136-
DUMMY_MACHINE_FUNCTION_PASS("amdgpu-set-wave-priority", AMDGPUSetWavePriorityPass())
137137

138138
DUMMY_MACHINE_FUNCTION_PASS("si-pre-emit-peephole", SIPreEmitPeepholePass())
139139
// TODO: Move amdgpu-preload-kern-arg-prolog to MACHINE_FUNCTION_PASS since it

llvm/lib/Target/AMDGPU/AMDGPUSetWavePriority.cpp

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "SIInstrInfo.h"
2020
#include "llvm/ADT/PostOrderIterator.h"
2121
#include "llvm/CodeGen/MachineFunctionPass.h"
22+
#include "llvm/CodeGen/MachinePassManager.h"
2223

2324
using namespace llvm;
2425

@@ -40,15 +41,11 @@ struct MBBInfo {
4041

4142
using MBBInfoSet = DenseMap<const MachineBasicBlock *, MBBInfo>;
4243

43-
class AMDGPUSetWavePriority : public MachineFunctionPass {
44+
class AMDGPUSetWavePriority {
4445
public:
4546
static char ID;
4647

47-
AMDGPUSetWavePriority() : MachineFunctionPass(ID) {}
48-
49-
StringRef getPassName() const override { return "Set wave priority"; }
50-
51-
bool runOnMachineFunction(MachineFunction &MF) override;
48+
bool run(MachineFunction &MF);
5249

5350
private:
5451
MachineInstr *BuildSetprioMI(MachineBasicBlock &MBB,
@@ -58,15 +55,31 @@ class AMDGPUSetWavePriority : public MachineFunctionPass {
5855
const SIInstrInfo *TII;
5956
};
6057

58+
class AMDGPUSetWavePriorityLegacy : public MachineFunctionPass {
59+
public:
60+
static char ID;
61+
62+
AMDGPUSetWavePriorityLegacy() : MachineFunctionPass(ID) {}
63+
64+
StringRef getPassName() const override { return "Set wave priority"; }
65+
66+
bool runOnMachineFunction(MachineFunction &MF) override {
67+
if (skipFunction(MF.getFunction()))
68+
return false;
69+
70+
return AMDGPUSetWavePriority().run(MF);
71+
}
72+
};
73+
6174
} // End anonymous namespace.
6275

63-
INITIALIZE_PASS(AMDGPUSetWavePriority, DEBUG_TYPE, "Set wave priority", false,
64-
false)
76+
INITIALIZE_PASS(AMDGPUSetWavePriorityLegacy, DEBUG_TYPE, "Set wave priority",
77+
false, false)
6578

66-
char AMDGPUSetWavePriority::ID = 0;
79+
char AMDGPUSetWavePriorityLegacy::ID = 0;
6780

6881
FunctionPass *llvm::createAMDGPUSetWavePriorityPass() {
69-
return new AMDGPUSetWavePriority();
82+
return new AMDGPUSetWavePriorityLegacy();
7083
}
7184

7285
MachineInstr *
@@ -96,12 +109,21 @@ static bool isVMEMLoad(const MachineInstr &MI) {
96109
return SIInstrInfo::isVMEM(MI) && MI.mayLoad();
97110
}
98111

99-
bool AMDGPUSetWavePriority::runOnMachineFunction(MachineFunction &MF) {
112+
PreservedAnalyses
113+
llvm::AMDGPUSetWavePriorityPass::run(MachineFunction &MF,
114+
MachineFunctionAnalysisManager &MFAM) {
115+
if (!AMDGPUSetWavePriority().run(MF))
116+
return PreservedAnalyses::all();
117+
118+
return getMachineFunctionPassPreservedAnalyses();
119+
}
120+
121+
bool AMDGPUSetWavePriority::run(MachineFunction &MF) {
100122
const unsigned HighPriority = 3;
101123
const unsigned LowPriority = 0;
102124

103125
Function &F = MF.getFunction();
104-
if (skipFunction(F) || !AMDGPU::isEntryFunctionCC(F.getCallingConv()))
126+
if (!AMDGPU::isEntryFunctionCC(F.getCallingConv()))
105127
return false;
106128

107129
const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2168,9 +2168,8 @@ void AMDGPUCodeGenPassBuilder::addPreEmitPass(AddMachinePass &addPass) const {
21682168

21692169
addPass(SILateBranchLoweringPass());
21702170

2171-
if (isPassEnabled(EnableSetWavePriority, CodeGenOptLevel::Less)) {
2172-
// TODO: addPass(AMDGPUSetWavePriorityPass());
2173-
}
2171+
if (isPassEnabled(EnableSetWavePriority, CodeGenOptLevel::Less))
2172+
addPass(AMDGPUSetWavePriorityPass());
21742173

21752174
if (TM.getOptLevel() > CodeGenOptLevel::None) {
21762175
// TODO: addPass(SIPreEmitPeepholePass());

llvm/test/CodeGen/AMDGPU/set-wave-priority.ll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
; RUN: llc -mtriple=amdgcn -amdgpu-set-wave-priority=true -o - %s | \
22
; RUN: FileCheck %s
33

4+
; RUN: llc -mtriple=amdgcn -stop-after=si-late-branch-lowering -o - %s | \
5+
; RUN: llc -x mir -mtriple=amdgcn -passes=amdgpu-set-wave-priority -o - | \
6+
; RUN: llc -x mir -mtriple=amdgcn -start-after=si-late-branch-lowering -o - | \
7+
; RUN: FileCheck %s
8+
49
; CHECK-LABEL: no_setprio:
510
; CHECK-NOT: s_setprio
611
; CHECK: ; return to shader part epilog

0 commit comments

Comments
 (0)