From 3f0fb23b039443d581d221b1fe9158f9cc81ccd6 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Fri, 30 Jun 2017 12:03:18 +1000 Subject: [PATCH] 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 Cc: mesa-stable@lists.freedesktop.org --- src/compiler/nir/nir_opt_copy_prop_vars.c | 12 ++++++------ 1 file 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 7f17469..89ddc8d 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); -- 2.7.4