aco: limit VALUPartialForwardingHazard search

Complicated CFG and lots of SALU can cause this to take an extremely long
time to finish.

Fixes
dEQP-VK.graphicsfuzz.cov-value-tracking-selection-dag-negation-clamp-loop
and Monster Hunter Rise demo compile times.

fossil-db (gfx1100):
Totals from 57 (0.04% of 134574) affected shaders:
Instrs: 170919 -> 171165 (+0.14%)
CodeSize: 860144 -> 861128 (+0.11%)
Latency: 961466 -> 961505 (+0.00%)
InvThroughput: 127598 -> 127608 (+0.01%)

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Timur Kristóf <timur.kristof@gmail.com>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8153
Fixes: 5806f0246f ("aco/gfx11: workaround VALUPartialForwardingHazard")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20941>
This commit is contained in:
Rhys Perry 2023-01-26 16:14:26 +00:00 committed by Marge Bot
parent 8092bc2158
commit bfd4ac4581

View file

@ -1127,6 +1127,9 @@ struct VALUPartialForwardingHazardBlockState {
enum VALUPartialForwardingHazardState state = nothing_written;
unsigned num_valu_since_read = 0;
unsigned num_valu_since_write = 0;
unsigned num_instrs = 0;
unsigned num_blocks = 0;
};
bool
@ -1189,6 +1192,13 @@ handle_valu_partial_forwarding_hazard_instr(VALUPartialForwardingHazardGlobalSta
if (block_state.num_vgprs_read == 0)
return true; /* All VGPRs have been written and a hazard was never found. */
block_state.num_instrs++;
if (block_state.num_instrs > 256 || block_state.num_blocks > 32) {
/* Exit to limit compile times and set hazard_found=true to be safe. */
global_state.hazard_found = true;
return true;
}
return false;
}
@ -1203,6 +1213,8 @@ handle_valu_partial_forwarding_hazard_block(VALUPartialForwardingHazardGlobalSta
global_state.loop_headers_visited.insert(block->index);
}
block_state.num_blocks++;
return true;
}