Skip to content

Commit a4f35ab

Browse files
committed
[AMDGPU] Fix mai hazard VALU to LD/ST
Fixes: SWDEV-251863 Differential Revision: https://reviews.llvm.org/D89079
1 parent d1751d1 commit a4f35ab

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,7 @@ int GCNHazardRecognizer::checkMAILdStHazards(MachineInstr *MI) {
13681368
Register Reg = Op.getReg();
13691369

13701370
const int AccVgprReadLdStWaitStates = 2;
1371-
const int VALUWriteAccVgprReadLdStDepVALUWaitStates = 1;
1371+
const int VALUWriteAccVgprRdWrLdStDepVALUWaitStates = 1;
13721372
const int MaxWaitStates = 2;
13731373

13741374
int WaitStatesNeededForUse = AccVgprReadLdStWaitStates -
@@ -1378,8 +1378,9 @@ int GCNHazardRecognizer::checkMAILdStHazards(MachineInstr *MI) {
13781378
if (WaitStatesNeeded == MaxWaitStates)
13791379
return WaitStatesNeeded; // Early exit.
13801380

1381-
auto IsVALUAccVgprReadCheckFn = [Reg, this] (MachineInstr *MI) {
1382-
if (MI->getOpcode() != AMDGPU::V_ACCVGPR_READ_B32)
1381+
auto IsVALUAccVgprRdWrCheckFn = [Reg, this](MachineInstr *MI) {
1382+
if (MI->getOpcode() != AMDGPU::V_ACCVGPR_READ_B32 &&
1383+
MI->getOpcode() != AMDGPU::V_ACCVGPR_WRITE_B32)
13831384
return false;
13841385
auto IsVALUFn = [] (MachineInstr *MI) {
13851386
return SIInstrInfo::isVALU(*MI) && !SIInstrInfo::isMAI(*MI);
@@ -1388,8 +1389,8 @@ int GCNHazardRecognizer::checkMAILdStHazards(MachineInstr *MI) {
13881389
std::numeric_limits<int>::max();
13891390
};
13901391

1391-
WaitStatesNeededForUse = VALUWriteAccVgprReadLdStDepVALUWaitStates -
1392-
getWaitStatesSince(IsVALUAccVgprReadCheckFn, MaxWaitStates);
1392+
WaitStatesNeededForUse = VALUWriteAccVgprRdWrLdStDepVALUWaitStates -
1393+
getWaitStatesSince(IsVALUAccVgprRdWrCheckFn, MaxWaitStates);
13931394
WaitStatesNeeded = std::max(WaitStatesNeeded, WaitStatesNeededForUse);
13941395
}
13951396

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,20 @@ body: |
480480
...
481481
---
482482

483+
# GCN-LABEL: name: valu_write_vgpr_accvgpr_write_load_1_and_3_depend
484+
# GCN: V_MOV_B32
485+
# GCN-NEXT: V_ACCVGPR_WRITE_B32
486+
# GCN-NEXT: S_NOP 0
487+
# GCN-NEXT: FLAT_LOAD_DWORD
488+
name: valu_write_vgpr_accvgpr_write_load_1_and_3_depend
489+
body: |
490+
bb.0:
491+
$vgpr0 = V_MOV_B32_e32 1, implicit $exec
492+
$agpr0 = V_ACCVGPR_WRITE_B32 killed $vgpr2, implicit $exec
493+
$vgpr4 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, 0, 0, implicit $exec, implicit $flat_scr
494+
...
495+
---
496+
483497
# GCN-LABEL: name: valu_write_vgpr_accvgpr_read_load_2_and_3_depend
484498
# GCN: V_MOV_B32
485499
# GCN-NEXT: V_ACCVGPR_READ_B32

0 commit comments

Comments
 (0)