Skip to content

Commit f31d6d2

Browse files
committed
AMDGPU: Handle gfx950XDL Write VGPR wait state change
These have an additional wait state compared to gfx940. modified wait states for GFX940_XDL_N_PassWritesVGPROverlappedSrcABWaitStates GFX940_XDL_N_PassWriteVgprVALUWawWaitStates GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates
1 parent 02fa340 commit f31d6d2

File tree

3 files changed

+111
-63
lines changed

3 files changed

+111
-63
lines changed

llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2290,12 +2290,14 @@ GFX940_SMFMA_N_PassWritesVGPROverlappedSrcABWaitStates(int NumPasses) {
22902290
return NumPasses + 2;
22912291
}
22922292

2293-
static int GFX940_XDL_N_PassWritesVGPROverlappedSrcABWaitStates(int NumPasses) {
2294-
// 2 pass -> 5
2295-
// 4 pass -> 7
2296-
// 8 pass -> 11
2297-
// 16 pass -> 19
2298-
return NumPasses + 3;
2293+
static int GFX940_XDL_N_PassWritesVGPROverlappedSrcABWaitStates(int NumPasses,
2294+
bool IsGFX950) {
2295+
// xdl def cycles | gfx940 | gfx950
2296+
// 2 pass | 5 5
2297+
// 4 pass | 7 8
2298+
// 8 pass | 11 12
2299+
// 16 pass | 19 20
2300+
return NumPasses + 3 + (NumPasses != 2 && IsGFX950);
22992301
}
23002302

23012303
int GCNHazardRecognizer::checkMAIHazards90A(MachineInstr *MI) {
@@ -2464,7 +2466,7 @@ int GCNHazardRecognizer::checkMAIHazards90A(MachineInstr *MI) {
24642466
NeedWaitStates =
24652467
isXDL(ST, *MI1)
24662468
? GFX940_XDL_N_PassWritesVGPROverlappedSrcABWaitStates(
2467-
NumPasses)
2469+
NumPasses, ST.hasGFX950Insts())
24682470
: GFX940_SMFMA_N_PassWritesVGPROverlappedSrcABWaitStates(
24692471
NumPasses);
24702472
break;
@@ -2596,20 +2598,24 @@ static int GFX940_SMFMA_N_PassWriteVgprVALUWawWaitStates(int NumPasses) {
25962598
return NumPasses + 2;
25972599
}
25982600

2599-
static int GFX940_XDL_N_PassWriteVgprVALUWawWaitStates(int NumPasses) {
2600-
// 2 pass -> 5
2601-
// 4 pass -> 7
2602-
// 8 pass -> 11
2603-
// 16 pass -> 19
2604-
return NumPasses + 3;
2601+
static int GFX940_XDL_N_PassWriteVgprVALUWawWaitStates(int NumPasses,
2602+
bool IsGFX950) {
2603+
// xdl def cycles | gfx940 | gfx950
2604+
// 2 pass | 5 5
2605+
// 4 pass | 7 8
2606+
// 8 pass | 11 12
2607+
// 16 pass | 19 20
2608+
return NumPasses + 3 + (NumPasses != 2 && IsGFX950);
26052609
}
26062610

2607-
static int GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates(int NumPasses) {
2608-
// 2 pass -> 5
2609-
// 4 pass -> 7
2610-
// 8 pass -> 11
2611-
// 16 pass -> 19
2612-
return NumPasses + 3;
2611+
static int GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates(int NumPasses,
2612+
bool IsGFX950) {
2613+
// xdl def cycles | gfx940 | gfx950
2614+
// 2 pass | 5 5
2615+
// 4 pass | 7 8
2616+
// 8 pass | 11 12
2617+
// 16 pass | 19 20
2618+
return NumPasses + 3 + (NumPasses != 2 && IsGFX950);
26132619
}
26142620

26152621
static int GFX940_SMFMA_N_PassWriteVgprVALUMemExpReadWaitStates(int NumPasses) {
@@ -2760,7 +2766,8 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
27602766
} else if (ST.hasGFX940Insts()) {
27612767
NeedWaitStates =
27622768
isXDL(ST, *MFMA)
2763-
? GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates(NumPasses)
2769+
? GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates(
2770+
NumPasses, ST.hasGFX950Insts())
27642771
: GFX940_SMFMA_N_PassWriteVgprVALUMemExpReadWaitStates(
27652772
NumPasses);
27662773
} else {
@@ -2846,7 +2853,8 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
28462853
} else if (ST.hasGFX940Insts()) {
28472854
NeedWaitStates =
28482855
isXDL(ST, *MFMA)
2849-
? GFX940_XDL_N_PassWriteVgprVALUWawWaitStates(NumPasses)
2856+
? GFX940_XDL_N_PassWriteVgprVALUWawWaitStates(
2857+
NumPasses, ST.hasGFX950Insts())
28502858
: GFX940_SMFMA_N_PassWriteVgprVALUWawWaitStates(NumPasses);
28512859
} else {
28522860
switch (NumPasses) {

0 commit comments

Comments
 (0)