summaryrefslogtreecommitdiffstats
path: root/src/compiler/nir
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2017-06-30 12:03:18 +1000
committerTimothy Arceri <[email protected]>2017-07-19 11:06:23 +1000
commit3f0fb23b039443d581d221b1fe9158f9cc81ccd6 (patch)
treeed520c8287967a8faf384e39a8a13bbeed3e8291 /src/compiler/nir
parentecf91898e0a8e144adb82d72aecf1224e77ee31b (diff)
nir: fix nir_opt_copy_prop_vars() for arrays of arrays
Previously we only incremented the guide for a single dimension/wildcard. V2: rework logic to avoid code duplication Reviewed-by: Jason Ekstrand <[email protected]> Cc: [email protected]
Diffstat (limited to 'src/compiler/nir')
-rw-r--r--src/compiler/nir/nir_opt_copy_prop_vars.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/compiler/nir/nir_opt_copy_prop_vars.c b/src/compiler/nir/nir_opt_copy_prop_vars.c
index 7f17469f641..89ddc8dd406 100644
--- a/src/compiler/nir/nir_opt_copy_prop_vars.c
+++ b/src/compiler/nir/nir_opt_copy_prop_vars.c
@@ -469,8 +469,8 @@ specialize_wildcards(nir_deref_var *deref,
nir_deref_var *ret = nir_deref_var_create(mem_ctx, deref->var);
nir_deref *deref_tail = deref->deref.child;
- nir_deref *guide_tail = guide->deref.child;
- nir_deref *spec_tail = specific->deref.child;
+ nir_deref *guide_tail = &guide->deref;
+ nir_deref *spec_tail = &specific->deref;
nir_deref *ret_tail = &ret->deref;
while (deref_tail) {
switch (deref_tail->deref_type) {
@@ -495,14 +495,14 @@ specialize_wildcards(nir_deref_var *deref,
* the entry deref to find its corresponding wildcard and fill
* this slot in with the value from the src.
*/
- while (guide_tail) {
+ while (guide_tail->child) {
+ guide_tail = guide_tail->child;
+ spec_tail = spec_tail->child;
+
if (guide_tail->deref_type == nir_deref_type_array &&
nir_deref_as_array(guide_tail)->deref_array_type ==
nir_deref_array_type_wildcard)
break;
-
- guide_tail = guide_tail->child;
- spec_tail = spec_tail->child;
}
nir_deref_array *spec_arr = nir_deref_as_array(spec_tail);