nir: Handle casts in nir_opt_copy_prop_vars
Cc: mesa-stable Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27197>
This commit is contained in:

committed by
Marge Bot

parent
6c845ed548
commit
9f22b95956
@@ -1065,6 +1065,12 @@ copy_prop_vars_block(struct copy_prop_var_state *state,
|
|||||||
if (nir_deref_mode_must_be(src.instr, ignore))
|
if (nir_deref_mode_must_be(src.instr, ignore))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* Ignore trivial casts. If trivial casts are applied to array derefs of vectors,
|
||||||
|
* not doing this causes is_array_deref_of_vector to (wrongly) return false. */
|
||||||
|
while (src.instr->deref_type == nir_deref_type_cast &&
|
||||||
|
nir_deref_instr_parent(src.instr) && nir_deref_cast_is_trivial(src.instr))
|
||||||
|
src.instr = nir_deref_instr_parent(src.instr);
|
||||||
|
|
||||||
/* Direct array_derefs of vectors operate on the vectors (the parent
|
/* Direct array_derefs of vectors operate on the vectors (the parent
|
||||||
* deref). Indirects will be handled like other derefs.
|
* deref). Indirects will be handled like other derefs.
|
||||||
*/
|
*/
|
||||||
@@ -1157,6 +1163,12 @@ copy_prop_vars_block(struct copy_prop_var_state *state,
|
|||||||
nir_deref_and_path dst = { nir_src_as_deref(intrin->src[0]), NULL };
|
nir_deref_and_path dst = { nir_src_as_deref(intrin->src[0]), NULL };
|
||||||
assert(glsl_type_is_vector_or_scalar(dst.instr->type));
|
assert(glsl_type_is_vector_or_scalar(dst.instr->type));
|
||||||
|
|
||||||
|
/* Ignore trivial casts. If trivial casts are applied to array derefs of vectors,
|
||||||
|
* not doing this causes is_array_deref_of_vector to (wrongly) return false. */
|
||||||
|
while (dst.instr->deref_type == nir_deref_type_cast &&
|
||||||
|
nir_deref_instr_parent(dst.instr) && nir_deref_cast_is_trivial(dst.instr))
|
||||||
|
dst.instr = nir_deref_instr_parent(dst.instr);
|
||||||
|
|
||||||
/* Direct array_derefs of vectors operate on the vectors (the parent
|
/* Direct array_derefs of vectors operate on the vectors (the parent
|
||||||
* deref). Indirects will be handled like other derefs.
|
* deref). Indirects will be handled like other derefs.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user