Skip to content

Commit c9a8ed5

Browse files
VigneshwarJDavid Salinas
authored andcommitted
AMDGPU: Handle gfx950 XDL Write-VGPR-VALU-WAW wait state change (llvm#126132)
There are additional wait states for XDL write VALU WAW hazard in gfx950 compared to gfx940.
1 parent 09566fa commit c9a8ed5

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2596,12 +2596,14 @@ static int GFX940_SMFMA_N_PassWriteVgprVALUWawWaitStates(int NumPasses) {
25962596
return NumPasses + 2;
25972597
}
25982598

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

26072609
static int GFX940_XDL_N_PassWriteVgprVALUMemExpReadWaitStates(int NumPasses,
@@ -2849,7 +2851,8 @@ int GCNHazardRecognizer::checkMAIVALUHazards(MachineInstr *MI) {
28492851
} else if (ST.hasGFX940Insts()) {
28502852
NeedWaitStates =
28512853
isXDL(ST, *MFMA)
2852-
? GFX940_XDL_N_PassWriteVgprVALUWawWaitStates(NumPasses)
2854+
? GFX940_XDL_N_PassWriteVgprVALUWawWaitStates(
2855+
NumPasses, ST.hasGFX950Insts())
28532856
: GFX940_SMFMA_N_PassWriteVgprVALUWawWaitStates(NumPasses);
28542857
} else {
28552858
switch (NumPasses) {

llvm/test/CodeGen/AMDGPU/mai-hazards-gfx940.mir

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -954,7 +954,8 @@ body: |
954954
# GCN-LABEL: name: xdl_smfma16x16_write_vgpr_valu_write
955955
# GCN: V_MFMA
956956
# GCN-NEXT: S_NOP 7
957-
# GCN-NEXT: S_NOP 2
957+
# GFX940-NEXT: S_NOP 2
958+
# GFX950-NEXT: S_NOP 3
958959
# GCN-NEXT: V_MOV_B32
959960
name: xdl_smfma16x16_write_vgpr_valu_write
960961
body: |
@@ -966,7 +967,8 @@ body: |
966967
# GCN: V_MFMA
967968
# GCN-NEXT: S_NOP 7
968969
# GCN-NEXT: S_NOP 7
969-
# GCN-NEXT: S_NOP 2
970+
# GFX940-NEXT: S_NOP 2
971+
# GFX950-NEXT: S_NOP 3
970972
# GCN-NEXT: V_MOV_B32
971973
name: xdl_smfma32x32_write_vgpr_valu_write
972974
body: |
@@ -987,7 +989,8 @@ body: |
987989
# GCN-LABEL: name: xdl_smfma16x16_write_vgpr_valu_f16_write
988990
# GCN: V_MFMA
989991
# GCN-NEXT: S_NOP 7
990-
# GCN-NEXT: S_NOP 2
992+
# GFX940-NEXT: S_NOP 2
993+
# GFX950-NEXT: S_NOP 3
991994
# GCN-NEXT: V_FMA_F16_e64
992995
name: xdl_smfma16x16_write_vgpr_valu_f16_write
993996
body: |
@@ -999,7 +1002,8 @@ body: |
9991002
# GCN: V_MFMA
10001003
# GCN-NEXT: S_NOP 7
10011004
# GCN-NEXT: S_NOP 7
1002-
# GCN-NEXT: S_NOP 2
1005+
# GFX940-NEXT: S_NOP 2
1006+
# GFX950-NEXT: S_NOP 3
10031007
# GCN-NEXT: V_FMA_F16_e64
10041008
name: xdl_smfma32x32_write_vgpr_valu_f16_write
10051009
body: |
@@ -1020,7 +1024,8 @@ body: |
10201024
# GCN-LABEL: name: xdl_smfma16x16_write_vgpr_valu_sdwa_write
10211025
# GCN: V_MFMA
10221026
# GCN-NEXT: S_NOP 7
1023-
# GCN-NEXT: S_NOP 2
1027+
# GFX940-NEXT: S_NOP 2
1028+
# GFX950-NEXT: S_NOP 3
10241029
# GCN-NEXT: V_MOV_B32_sdwa
10251030
name: xdl_smfma16x16_write_vgpr_valu_sdwa_write
10261031
body: |
@@ -1754,7 +1759,8 @@ body: |
17541759
...
17551760
# GCN-LABEL: name: xdl_sgemm16X16X16_mfma_write_vgpr_valu_write
17561761
# GCN: V_MFMA
1757-
# GCN-NEXT: S_NOP 6
1762+
# GFX940-NEXT: S_NOP 6
1763+
# GFX950-NEXT: S_NOP 7
17581764
# GCN-NEXT: V_MOV_B32
17591765
name: xdl_sgemm16X16X16_mfma_write_vgpr_valu_write
17601766
body: |
@@ -2064,7 +2070,8 @@ body: |
20642070
...
20652071
# GCN-LABEL: name: smfmac16x16_read_vgpr_srcc_valu_write
20662072
# GCN: V_SMFMAC
2067-
# GCN-NEXT: S_NOP 6
2073+
# GFX940-NEXT: S_NOP 6
2074+
# GFX950-NEXT: S_NOP 7
20682075
# GCN-NEXT: V_MOV_B32
20692076
name: smfmac16x16_read_vgpr_srcc_valu_write
20702077
body: |
@@ -2094,7 +2101,8 @@ body: |
20942101
# GCN-LABEL: name: smfmac32x32_read_vgpr_srcc_valu_write
20952102
# GCN: V_SMFMAC
20962103
# GCN-NEXT: S_NOP 7
2097-
# GCN-NEXT: S_NOP 2
2104+
# GFX940-NEXT: S_NOP 2
2105+
# GFX950-NEXT: S_NOP 3
20982106
# GCN-NEXT: V_MOV_B32
20992107
name: smfmac32x32_read_vgpr_srcc_valu_write
21002108
body: |

0 commit comments

Comments
 (0)