Skip to content

Commit c0b2239

Browse files
committed
[AMDGPU] Make the iterative schedulers selectable via amdgpu-sched-strategy (llvm#135042)
Currently, the only way for users to try these schedulers is via `-misched=` . However, this overrides the default scheduler for all targets. This causes problems for various toolchains / drivers which spawn jobs for both x86 and AMDGPU -- e.g. hipcc. On the other hand, `amdgpu-sched-strategy` only changes the scheduler for AMDGPU target.
1 parent 7aa0aca commit c0b2239

File tree

5 files changed

+27
-7
lines changed

5 files changed

+27
-7
lines changed

llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -424,10 +424,10 @@ static cl::opt<bool>
424424
cl::desc("Enable loop data prefetch on AMDGPU"),
425425
cl::Hidden, cl::init(false));
426426

427-
static cl::opt<bool> EnableMaxIlpSchedStrategy(
428-
"amdgpu-enable-max-ilp-scheduling-strategy",
429-
cl::desc("Enable scheduling strategy to maximize ILP for a single wave."),
430-
cl::Hidden, cl::init(false));
427+
static cl::opt<std::string>
428+
AMDGPUSchedStrategy("amdgpu-sched-strategy",
429+
cl::desc("Select custom AMDGPU scheduling strategy."),
430+
cl::Hidden, cl::init(""));
431431

432432
static cl::opt<bool> EnableRewritePartialRegUses(
433433
"amdgpu-enable-rewrite-partial-reg-uses",
@@ -1287,9 +1287,24 @@ ScheduleDAGInstrs *GCNPassConfig::createMachineScheduler(
12871287
if (ST.enableSIScheduler())
12881288
return createSIMachineScheduler(C);
12891289

1290-
if (EnableMaxIlpSchedStrategy)
1290+
Attribute SchedStrategyAttr =
1291+
C->MF->getFunction().getFnAttribute("amdgpu-sched-strategy");
1292+
StringRef SchedStrategy = SchedStrategyAttr.isValid()
1293+
? SchedStrategyAttr.getValueAsString()
1294+
: AMDGPUSchedStrategy;
1295+
1296+
if (SchedStrategy == "max-ilp")
12911297
return createGCNMaxILPMachineScheduler(C);
12921298

1299+
if (SchedStrategy == "iterative-ilp")
1300+
return createIterativeILPMachineScheduler(C);
1301+
1302+
if (SchedStrategy == "iterative-minreg")
1303+
return createMinRegScheduler(C);
1304+
1305+
if (SchedStrategy == "iterative-maxocc")
1306+
return createIterativeGCNMaxOccupancyMachineScheduler(C);
1307+
12931308
return createGCNMaxOccupancyMachineScheduler(C);
12941309
}
12951310

llvm/test/CodeGen/AMDGPU/schedule-ilp-liveness-tracking.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2
2-
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -amdgpu-enable-max-ilp-scheduling-strategy -verify-machineinstrs -run-pass=machine-scheduler -verify-misched -o - %s | FileCheck %s
2+
# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -amdgpu-sched-strategy=max-ilp -verify-machineinstrs -run-pass=machine-scheduler -verify-misched -o - %s | FileCheck %s
33

44
---
55
name: max-ilp-liveness-tracking

llvm/test/CodeGen/AMDGPU/schedule-ilp.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; RUN: llc -mtriple=amdgcn -mcpu=tonga -misched=gcn-iterative-ilp -verify-machineinstrs < %s | FileCheck %s
22
; RUN: llc -mtriple=amdgcn -mcpu=tonga -misched=gcn-max-ilp -verify-machineinstrs < %s | FileCheck %s
3-
; RUN: llc -mtriple=amdgcn -mcpu=tonga -amdgpu-enable-max-ilp-scheduling-strategy -verify-machineinstrs < %s | FileCheck %s
3+
; RUN: llc -mtriple=amdgcn -mcpu=tonga -amdgpu-sched-strategy=max-ilp -verify-machineinstrs < %s | FileCheck %s
44

55
; CHECK: NumVgprs: {{[0-9][0-9][0-9]$}}
66

llvm/test/CodeGen/AMDGPU/schedule-regpressure-limit2.ll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
; RUN: llc -mtriple=amdgcn -mcpu=tahiti -enable-amdgpu-aa=0 -misched=gcn-iterative-minreg -verify-machineinstrs < %s | FileCheck --check-prefix=SI-MINREG %s
22
; RUN: llc -mtriple=amdgcn -mcpu=tahiti -enable-amdgpu-aa=0 -misched=gcn-iterative-max-occupancy-experimental -verify-machineinstrs < %s | FileCheck --check-prefix=SI-MAXOCC %s
3+
; RUN: llc -mtriple=amdgcn -mcpu=tahiti -enable-amdgpu-aa=0 -amdgpu-sched-strategy=iterative-minreg -verify-machineinstrs < %s | FileCheck --check-prefix=SI-MINREG %s
4+
; RUN: llc -mtriple=amdgcn -mcpu=tahiti -enable-amdgpu-aa=0 -amdgpu-sched-strategy=iterative-maxocc -verify-machineinstrs < %s | FileCheck --check-prefix=SI-MAXOCC %s
35
; RUN: llc -mtriple=amdgcn -mcpu=fiji -enable-amdgpu-aa=0 -misched=gcn-iterative-minreg -verify-machineinstrs < %s | FileCheck --check-prefix=VI %s
46
; RUN: llc -mtriple=amdgcn -mcpu=fiji -enable-amdgpu-aa=0 -misched=gcn-iterative-max-occupancy-experimental -verify-machineinstrs < %s | FileCheck --check-prefix=VI %s
7+
; RUN: llc -mtriple=amdgcn -mcpu=fiji -enable-amdgpu-aa=0 -amdgpu-sched-strategy=iterative-minreg -verify-machineinstrs < %s | FileCheck --check-prefix=VI %s
8+
; RUN: llc -mtriple=amdgcn -mcpu=fiji -enable-amdgpu-aa=0 -amdgpu-sched-strategy=iterative-maxocc -verify-machineinstrs < %s | FileCheck --check-prefix=VI %s
59

610
; SI-MINREG: NumSgprs: {{[1-9]$}}
711
; SI-MINREG: NumVgprs: {{[1-9]$}}

llvm/test/CodeGen/AMDGPU/schedule-regpressure-limit3.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; RUN: llc -mtriple=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck --check-prefix=MISCHED %s
22
; RUN: llc -mtriple=amdgcn -mcpu=tonga -misched=gcn-iterative-ilp -verify-machineinstrs < %s | FileCheck --check-prefix=GCN-ILP %s
3+
; RUN: llc -mtriple=amdgcn -mcpu=tonga -amdgpu-sched-strategy=iterative-ilp -verify-machineinstrs < %s | FileCheck --check-prefix=GCN-ILP %s
34

45
; Test the scheduler when only one wave is requested. The result should be high register usage and max ILP.
56

0 commit comments

Comments
 (0)