aco: don't move acquire barriers before interlock begin

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36491>
This commit is contained in:
Rhys Perry 2025-09-03 11:20:33 +01:00 committed by Marge Bot
parent 0ee1c137f9
commit 21332609b9
2 changed files with 7 additions and 1 deletions

View file

@ -293,6 +293,11 @@ is_atomic_or_control_instr(Program* program, const Instruction* instr, memory_sy
}
uint16_t cls = BITFIELD_MASK(storage_count);
if (is_acquire) {
if (is_wait_export_ready(program->gfx_level, instr) ||
instr->opcode == aco_opcode::p_pops_gfx9_add_exiting_wave_id)
return cls & ~storage_shared;
}
if (is_release) {
if (is_done_sendmsg(program->gfx_level, instr) ||
is_pos_prim_export(program->gfx_level, instr))

View file

@ -64,7 +64,8 @@ enum memory_semantics : uint8_t {
semantic_none = 0x0,
/* for loads: don't move any access after this load to before this load (even other loads)
* for barriers: don't move any access after the barrier to before any
* atomic_loads/control_barriers before the barrier */
* atomic_loads/control_barriers/p_pops_gfx9_add_exiting_wave_id or
* certain s_wait_event before the barrier */
semantic_acquire = 0x1,
/* for stores: don't move any access before this store to after this store
* for barriers: don't move any access before the barrier to after any