diff options
author | Jason Ekstrand <jason@jlekstrand.net> | 2020-07-24 20:27:37 -0500 |
---|---|---|
committer | Eric Engestrom <eric@engestrom.ch> | 2020-08-05 22:23:21 +0200 |
commit | d1ac2ffeb6d53df59182a41e87abc086d71c79c9 (patch) | |
tree | a9774127efd34e81c674db3c138947f95b1009fa /src | |
parent | d23bbc8c28b6a5cd7f4d3d03c74d8319da5d47d5 (diff) |
nir/deref: Don't try to compare derefs containing casts
One day, we may want copy_prop_vars or other passes to be able to see
through certain types of casts such as when someone casts a uint64_t to
a uvec2. However, for now we should just avoid casts all together.
Fixes: d8e3edb784d3a "nir/deref: Support casts and ptr_as_array in..."
Tested-by: Jesse Natalie <jenatali@microsoft.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6072>
(cherry picked from commit 611f654fcf715364b65ca690c0521c3e3038824f)
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/nir/nir_deref.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/compiler/nir/nir_deref.c b/src/compiler/nir/nir_deref.c index 65757fce16f..7a84ff781d7 100644 --- a/src/compiler/nir/nir_deref.c +++ b/src/compiler/nir/nir_deref.c @@ -505,8 +505,8 @@ nir_compare_deref_paths(nir_deref_path *a_path, } /* We're at either the tail or the divergence point between the two deref - * paths. Look to see if either contains a ptr_as_array deref. It it - * does we don't know how to safely make any inferences. Hopefully, + * paths. Look to see if either contains cast or a ptr_as_array deref. If + * it does we don't know how to safely make any inferences. Hopefully, * nir_opt_deref will clean most of these up and we can start inferring * things again. * @@ -516,11 +516,13 @@ nir_compare_deref_paths(nir_deref_path *a_path, * different constant indices. */ for (nir_deref_instr **t_p = a_p; *t_p; t_p++) { - if ((*t_p)->deref_type == nir_deref_type_ptr_as_array) + if ((*t_p)->deref_type == nir_deref_type_cast || + (*t_p)->deref_type == nir_deref_type_ptr_as_array) return nir_derefs_may_alias_bit; } for (nir_deref_instr **t_p = b_p; *t_p; t_p++) { - if ((*t_p)->deref_type == nir_deref_type_ptr_as_array) + if ((*t_p)->deref_type == nir_deref_type_cast || + (*t_p)->deref_type == nir_deref_type_ptr_as_array) return nir_derefs_may_alias_bit; } |