nir/opt_move_to_top: handle load_global_amd with ACCESS_SMEM_AMD

to match the behavior of load_smem_amd

Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37101>
This commit is contained in:
Marek Olšák
2025-08-08 18:05:08 -04:00
parent 48050dbef6
commit 25294f3dd4

View File

@@ -72,10 +72,17 @@ can_move_src_to_top(nir_src *src, void *_state)
case nir_intrinsic_load_interpolated_input:
case nir_intrinsic_load_per_primitive_input:
case nir_intrinsic_load_per_vertex_input:
/* load_smem_amd and its sources. */
/* nir_move_to_top_load_smem_amd and its sources. */
case nir_intrinsic_load_scalar_arg_amd:
case nir_intrinsic_load_smem_amd:
break;
case nir_intrinsic_load_global_amd:
if (!(nir_intrinsic_access(nir_instr_as_intrinsic(instr)) &
ACCESS_SMEM_AMD)) {
instr->pass_flags |= PASS_FLAG_CANT_MOVE;
return false;
}
break;
default:
instr->pass_flags |= PASS_FLAG_CANT_MOVE;
return false;
@@ -139,7 +146,9 @@ handle_load(nir_builder *b, nir_intrinsic_instr *intr, void *_state)
!nir_is_output_load(intr);
move |= state->options & nir_move_to_top_load_smem_amd &&
intr->intrinsic == nir_intrinsic_load_smem_amd;
((intr->intrinsic == nir_intrinsic_load_global_amd &&
nir_intrinsic_access(intr) & ACCESS_SMEM_AMD) ||
intr->intrinsic == nir_intrinsic_load_smem_amd);
if (!move)
return false;