mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 15:38:09 +02:00
nir: handle float atomics in copy propagation pass
Without this patch, copy propagation pass can optimize out buffer loads out of compare & swap loop, which then leads to infinite loop. Triggered by a change to atomicCompSwap float test in piglit. Fixes:8424cd8fbd("nir: Account for atomics in copy propagation.") Suggested-by: Jason Ekstrand <jason@jlekstrand.net> Signed-off-by: Marcin Ślusarz <marcin.slusarz@intel.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7538> (cherry picked from commit6e6dab4799)
This commit is contained in:
parent
e9fe1addb7
commit
8770b7f426
2 changed files with 9 additions and 1 deletions
|
|
@ -2965,7 +2965,7 @@
|
|||
"description": "nir: handle float atomics in copy propagation pass",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "8424cd8fbd1671c4c13f57cfa34bf8145d0fffcf"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -185,15 +185,19 @@ gather_vars_written(struct copy_prop_var_state *state,
|
|||
break;
|
||||
|
||||
case nir_intrinsic_deref_atomic_add:
|
||||
case nir_intrinsic_deref_atomic_fadd:
|
||||
case nir_intrinsic_deref_atomic_imin:
|
||||
case nir_intrinsic_deref_atomic_umin:
|
||||
case nir_intrinsic_deref_atomic_fmin:
|
||||
case nir_intrinsic_deref_atomic_imax:
|
||||
case nir_intrinsic_deref_atomic_umax:
|
||||
case nir_intrinsic_deref_atomic_fmax:
|
||||
case nir_intrinsic_deref_atomic_and:
|
||||
case nir_intrinsic_deref_atomic_or:
|
||||
case nir_intrinsic_deref_atomic_xor:
|
||||
case nir_intrinsic_deref_atomic_exchange:
|
||||
case nir_intrinsic_deref_atomic_comp_swap:
|
||||
case nir_intrinsic_deref_atomic_fcomp_swap:
|
||||
case nir_intrinsic_store_deref:
|
||||
case nir_intrinsic_copy_deref: {
|
||||
/* Destination in all of store_deref, copy_deref and the atomics is src[0]. */
|
||||
|
|
@ -1057,15 +1061,19 @@ copy_prop_vars_block(struct copy_prop_var_state *state,
|
|||
}
|
||||
|
||||
case nir_intrinsic_deref_atomic_add:
|
||||
case nir_intrinsic_deref_atomic_fadd:
|
||||
case nir_intrinsic_deref_atomic_imin:
|
||||
case nir_intrinsic_deref_atomic_umin:
|
||||
case nir_intrinsic_deref_atomic_fmin:
|
||||
case nir_intrinsic_deref_atomic_imax:
|
||||
case nir_intrinsic_deref_atomic_umax:
|
||||
case nir_intrinsic_deref_atomic_fmax:
|
||||
case nir_intrinsic_deref_atomic_and:
|
||||
case nir_intrinsic_deref_atomic_or:
|
||||
case nir_intrinsic_deref_atomic_xor:
|
||||
case nir_intrinsic_deref_atomic_exchange:
|
||||
case nir_intrinsic_deref_atomic_comp_swap:
|
||||
case nir_intrinsic_deref_atomic_fcomp_swap:
|
||||
if (debug) dump_instr(instr);
|
||||
|
||||
nir_deref_instr *dst = nir_src_as_deref(intrin->src[0]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue