mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-10 12:32:21 +00:00
AMDGPU: IMPLICIT_DEFs and DBG_VALUEs do not contribute to wait states
Summary: This fixes a bug that was exposed on gfx9 in various GL45-CTS.shaders.loops.*_iterations.select_iteration_count_fragment tests, e.g. GL45-CTS.shaders.loops.do_while_uniform_iterations.select_iteration_count_fragment Reviewers: arsenm Subscribers: kzhuravl, wdng, yaxunl, dstuttard, tpr, t-tye, llvm-commits Differential Revision: https://reviews.llvm.org/D36193 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312337 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fc13e66509
commit
96b6414540
@ -218,12 +218,17 @@ void GCNHazardRecognizer::RecedeCycle() {
|
||||
|
||||
int GCNHazardRecognizer::getWaitStatesSince(
|
||||
function_ref<bool(MachineInstr *)> IsHazard) {
|
||||
int WaitStates = -1;
|
||||
int WaitStates = 0;
|
||||
for (MachineInstr *MI : EmittedInstrs) {
|
||||
if (MI) {
|
||||
if (IsHazard(MI))
|
||||
return WaitStates;
|
||||
|
||||
unsigned Opcode = MI->getOpcode();
|
||||
if (Opcode == AMDGPU::DBG_VALUE || Opcode == AMDGPU::IMPLICIT_DEF)
|
||||
continue;
|
||||
}
|
||||
++WaitStates;
|
||||
if (!MI || !IsHazard(MI))
|
||||
continue;
|
||||
return WaitStates;
|
||||
}
|
||||
return std::numeric_limits<int>::max();
|
||||
}
|
||||
|
31
test/CodeGen/AMDGPU/hazard.mir
Normal file
31
test/CodeGen/AMDGPU/hazard.mir
Normal file
@ -0,0 +1,31 @@
|
||||
# RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN -check-prefix=VI %s
|
||||
# RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN -check-prefix=GFX9 %s
|
||||
|
||||
# GCN: bb.0.entry:
|
||||
# GCN: %m0 = S_MOV_B32
|
||||
# GFX9: S_NOP 0
|
||||
# VI-NOT: S_NOP_0
|
||||
# GCN: V_INTERP_P1_F32
|
||||
|
||||
---
|
||||
name: hazard_implicit_def
|
||||
alignment: 0
|
||||
exposesReturnsTwice: false
|
||||
legalized: false
|
||||
regBankSelected: false
|
||||
selected: false
|
||||
tracksRegLiveness: true
|
||||
registers:
|
||||
liveins:
|
||||
- { reg: '%sgpr7', virtual-reg: '' }
|
||||
- { reg: '%vgpr4', virtual-reg: '' }
|
||||
body: |
|
||||
bb.0.entry:
|
||||
liveins: %sgpr7, %vgpr4
|
||||
|
||||
%m0 = S_MOV_B32 killed %sgpr7
|
||||
%vgpr5 = IMPLICIT_DEF
|
||||
%vgpr0 = V_INTERP_P1_F32 killed %vgpr4, 0, 0, implicit %m0, implicit %exec
|
||||
SI_RETURN_TO_EPILOG killed %vgpr5, killed %vgpr0
|
||||
|
||||
...
|
Loading…
x
Reference in New Issue
Block a user