Skip to content

Commit 6cc23fa

Browse files
optimisanarsenm
andauthored
[AMDGPU][NPM] Port AMDGPUMarkLastScratchLoad to NPM (#131738)
This finishes all passes for the optimized regalloc path. --------- Co-authored-by: Matt Arsenault <[email protected]>
1 parent 5ac680c commit 6cc23fa

File tree

5 files changed

+47
-13
lines changed

5 files changed

+47
-13
lines changed

llvm/lib/Target/AMDGPU/AMDGPU.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ extern char &AMDGPURegBankSelectID;
195195
void initializeAMDGPURegBankLegalizePass(PassRegistry &);
196196
extern char &AMDGPURegBankLegalizeID;
197197

198-
void initializeAMDGPUMarkLastScratchLoadPass(PassRegistry &);
198+
void initializeAMDGPUMarkLastScratchLoadLegacyPass(PassRegistry &);
199199
extern char &AMDGPUMarkLastScratchLoadID;
200200

201201
void initializeSILowerSGPRSpillsLegacyPass(PassRegistry &);
@@ -371,6 +371,13 @@ class GCNCreateVOPDPass : public PassInfoMixin<GCNCreateVOPDPass> {
371371
MachineFunctionAnalysisManager &AM);
372372
};
373373

374+
class AMDGPUMarkLastScratchLoadPass
375+
: public PassInfoMixin<AMDGPUMarkLastScratchLoadPass> {
376+
public:
377+
PreservedAnalyses run(MachineFunction &MF,
378+
MachineFunctionAnalysisManager &AM);
379+
};
380+
374381
FunctionPass *createAMDGPUAnnotateUniformValuesLegacy();
375382

376383
ModulePass *createAMDGPUPrintfRuntimeBinding();

llvm/lib/Target/AMDGPU/AMDGPUMarkLastScratchLoad.cpp

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,26 @@ using namespace llvm;
2525

2626
namespace {
2727

28-
class AMDGPUMarkLastScratchLoad : public MachineFunctionPass {
28+
class AMDGPUMarkLastScratchLoad {
2929
private:
3030
LiveStacks *LS = nullptr;
3131
LiveIntervals *LIS = nullptr;
3232
SlotIndexes *SI = nullptr;
3333
const SIInstrInfo *SII = nullptr;
3434

35+
public:
36+
AMDGPUMarkLastScratchLoad(LiveStacks *LS, LiveIntervals *LIS, SlotIndexes *SI)
37+
: LS(LS), LIS(LIS), SI(SI) {}
38+
bool run(MachineFunction &MF);
39+
};
40+
41+
class AMDGPUMarkLastScratchLoadLegacy : public MachineFunctionPass {
3542
public:
3643
static char ID;
3744

38-
AMDGPUMarkLastScratchLoad() : MachineFunctionPass(ID) {
39-
initializeAMDGPUMarkLastScratchLoadPass(*PassRegistry::getPassRegistry());
45+
AMDGPUMarkLastScratchLoadLegacy() : MachineFunctionPass(ID) {
46+
initializeAMDGPUMarkLastScratchLoadLegacyPass(
47+
*PassRegistry::getPassRegistry());
4048
}
4149

4250
bool runOnMachineFunction(MachineFunction &MF) override;
@@ -56,17 +64,34 @@ class AMDGPUMarkLastScratchLoad : public MachineFunctionPass {
5664

5765
} // end anonymous namespace
5866

59-
bool AMDGPUMarkLastScratchLoad::runOnMachineFunction(MachineFunction &MF) {
67+
bool AMDGPUMarkLastScratchLoadLegacy::runOnMachineFunction(
68+
MachineFunction &MF) {
6069
if (skipFunction(MF.getFunction()))
6170
return false;
6271

72+
auto &LS = getAnalysis<LiveStacksWrapperLegacy>().getLS();
73+
auto &LIS = getAnalysis<LiveIntervalsWrapperPass>().getLIS();
74+
auto &SI = getAnalysis<SlotIndexesWrapperPass>().getSI();
75+
76+
return AMDGPUMarkLastScratchLoad(&LS, &LIS, &SI).run(MF);
77+
}
78+
79+
PreservedAnalyses
80+
AMDGPUMarkLastScratchLoadPass::run(MachineFunction &MF,
81+
MachineFunctionAnalysisManager &MFAM) {
82+
auto &LS = MFAM.getResult<LiveStacksAnalysis>(MF);
83+
auto &LIS = MFAM.getResult<LiveIntervalsAnalysis>(MF);
84+
auto &SI = MFAM.getResult<SlotIndexesAnalysis>(MF);
85+
86+
AMDGPUMarkLastScratchLoad(&LS, &LIS, &SI).run(MF);
87+
return PreservedAnalyses::all();
88+
}
89+
90+
bool AMDGPUMarkLastScratchLoad::run(MachineFunction &MF) {
6391
const GCNSubtarget &ST = MF.getSubtarget<GCNSubtarget>();
6492
if (ST.getGeneration() < AMDGPUSubtarget::GFX12)
6593
return false;
6694

67-
LS = &getAnalysis<LiveStacksWrapperLegacy>().getLS();
68-
LIS = &getAnalysis<LiveIntervalsWrapperPass>().getLIS();
69-
SI = &getAnalysis<SlotIndexesWrapperPass>().getSI();
7095
SII = ST.getInstrInfo();
7196
SlotIndexes &Slots = *LIS->getSlotIndexes();
7297

@@ -130,13 +155,13 @@ bool AMDGPUMarkLastScratchLoad::runOnMachineFunction(MachineFunction &MF) {
130155
return Changed;
131156
}
132157

133-
char AMDGPUMarkLastScratchLoad::ID = 0;
158+
char AMDGPUMarkLastScratchLoadLegacy::ID = 0;
134159

135-
char &llvm::AMDGPUMarkLastScratchLoadID = AMDGPUMarkLastScratchLoad::ID;
160+
char &llvm::AMDGPUMarkLastScratchLoadID = AMDGPUMarkLastScratchLoadLegacy::ID;
136161

137-
INITIALIZE_PASS_BEGIN(AMDGPUMarkLastScratchLoad, DEBUG_TYPE,
162+
INITIALIZE_PASS_BEGIN(AMDGPUMarkLastScratchLoadLegacy, DEBUG_TYPE,
138163
"AMDGPU Mark last scratch load", false, false)
139164
INITIALIZE_PASS_DEPENDENCY(SlotIndexesWrapperPass)
140165
INITIALIZE_PASS_DEPENDENCY(LiveStacksWrapperLegacy)
141-
INITIALIZE_PASS_END(AMDGPUMarkLastScratchLoad, DEBUG_TYPE,
166+
INITIALIZE_PASS_END(AMDGPUMarkLastScratchLoadLegacy, DEBUG_TYPE,
142167
"AMDGPU Mark last scratch load", false, false)

llvm/lib/Target/AMDGPU/AMDGPUPassRegistry.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ FUNCTION_PASS_WITH_PARAMS(
9898
#endif
9999
MACHINE_FUNCTION_PASS("amdgpu-insert-delay-alu", AMDGPUInsertDelayAluPass())
100100
MACHINE_FUNCTION_PASS("amdgpu-isel", AMDGPUISelDAGToDAGPass(*this))
101+
MACHINE_FUNCTION_PASS("amdgpu-mark-last-scratch-load", AMDGPUMarkLastScratchLoadPass())
101102
MACHINE_FUNCTION_PASS("amdgpu-pre-ra-long-branch-reg", GCNPreRALongBranchRegPass())
102103
MACHINE_FUNCTION_PASS("amdgpu-reserve-wwm-regs", AMDGPUReserveWWMRegsPass())
103104
MACHINE_FUNCTION_PASS("amdgpu-rewrite-partial-reg-uses", GCNRewritePartialRegUsesPass())

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAMDGPUTarget() {
497497
initializeAMDGPURegBankSelectPass(*PR);
498498
initializeAMDGPURegBankLegalizePass(*PR);
499499
initializeSILowerWWMCopiesLegacyPass(*PR);
500-
initializeAMDGPUMarkLastScratchLoadPass(*PR);
500+
initializeAMDGPUMarkLastScratchLoadLegacyPass(*PR);
501501
initializeSILowerSGPRSpillsLegacyPass(*PR);
502502
initializeSIFixSGPRCopiesLegacyPass(*PR);
503503
initializeSIFixVGPRCopiesLegacyPass(*PR);

llvm/test/CodeGen/AMDGPU/vgpr-mark-last-scratch-load.mir

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
22
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -o - %s -run-pass=greedy -run-pass=amdgpu-mark-last-scratch-load -verify-machineinstrs | FileCheck -check-prefix=CHECK %s
3+
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 -o - %s -passes=greedy,amdgpu-mark-last-scratch-load | FileCheck -check-prefix=CHECK %s
34

45
--- |
56
define amdgpu_cs void @test_spill_12x32() "amdgpu-num-vgpr"="12" {

0 commit comments

Comments
 (0)