mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
aco: check SALU writing lanemask later for VALUMaskWriteHazard
This should be done after reads are checked and sgpr_read_by_valu_as_lanemask_then_wr_by_salu is reset. The old version also skipped checking the reads if the write check passed. fossil-db (navi31): Totals from 193 (0.24% of 79395) affected shaders: Instrs: 3212435 -> 3212735 (+0.01%) CodeSize: 16462868 -> 16463848 (+0.01%); split: -0.00%, +0.01% Latency: 19492377 -> 19492462 (+0.00%); split: -0.00%, +0.00% InvThroughput: 4419705 -> 4419718 (+0.00%); split: -0.00%, +0.00% Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Backport-to: 24.1 Backport-to: 24.2 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30818>
This commit is contained in:
parent
b1ba7d1b99
commit
61e73c2323
1 changed files with 8 additions and 6 deletions
|
|
@ -1452,12 +1452,8 @@ handle_instruction_gfx11(State& state, NOP_ctx_gfx11& ctx, aco_ptr<Instruction>&
|
|||
* VALU reads SGPR as a lane mask and later written by SALU cannot safely be read by SALU or
|
||||
* VALU.
|
||||
*/
|
||||
if (state.program->wave_size == 64 && instr->isSALU() &&
|
||||
check_written_regs(instr, ctx.sgpr_read_by_valu_as_lanemask)) {
|
||||
ctx.sgpr_read_by_valu_as_lanemask_then_wr_by_salu = ctx.sgpr_read_by_valu_as_lanemask;
|
||||
ctx.sgpr_read_by_valu_as_lanemask.reset();
|
||||
} else if (state.program->wave_size == 64 && (instr->isSALU() || instr->isVALU()) &&
|
||||
check_read_regs(instr, ctx.sgpr_read_by_valu_as_lanemask_then_wr_by_salu)) {
|
||||
if (state.program->wave_size == 64 && (instr->isSALU() || instr->isVALU()) &&
|
||||
check_read_regs(instr, ctx.sgpr_read_by_valu_as_lanemask_then_wr_by_salu)) {
|
||||
bld.sopp(aco_opcode::s_waitcnt_depctr, 0xfffe);
|
||||
sa_sdst = 0;
|
||||
}
|
||||
|
|
@ -1470,6 +1466,12 @@ handle_instruction_gfx11(State& state, NOP_ctx_gfx11& ctx, aco_ptr<Instruction>&
|
|||
if (sa_sdst == 0)
|
||||
ctx.sgpr_read_by_valu_as_lanemask_then_wr_by_salu.reset();
|
||||
|
||||
if (state.program->wave_size == 64 && instr->isSALU() &&
|
||||
check_written_regs(instr, ctx.sgpr_read_by_valu_as_lanemask)) {
|
||||
ctx.sgpr_read_by_valu_as_lanemask_then_wr_by_salu = ctx.sgpr_read_by_valu_as_lanemask;
|
||||
ctx.sgpr_read_by_valu_as_lanemask.reset();
|
||||
}
|
||||
|
||||
if (instr->isVALU()) {
|
||||
bool is_trans = instr->isTrans();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue