summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2020-07-24 20:27:37 -0500
committerEric Engestrom <eric@engestrom.ch>2020-08-05 22:23:21 +0200
commitd1ac2ffeb6d53df59182a41e87abc086d71c79c9 (patch)
treea9774127efd34e81c674db3c138947f95b1009fa
parentd23bbc8c28b6a5cd7f4d3d03c74d8319da5d47d5 (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)
-rw-r--r--.pick_status.json2
-rw-r--r--src/compiler/nir/nir_deref.c10
2 files changed, 7 insertions, 5 deletions
diff --git a/.pick_status.json b/.pick_status.json
index 8224d246b0a..822d0f229e6 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -688,7 +688,7 @@
"description": "nir/deref: Don't try to compare derefs containing casts",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "d8e3edb784d3afb313420fc8d58b491a57fad9c1"
},
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;
}