From: Caio Marcelo de Oliveira Filho Date: Fri, 10 Aug 2018 23:04:04 +0000 (-0700) Subject: nir: Skip common instructions when comparing deref paths X-Git-Tag: upstream/19.0.0~3012 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8364ec3fcee692d70b7d653dd433a3194d88dd82;p=platform%2Fupstream%2Fmesa.git nir: Skip common instructions when comparing deref paths Deref paths may share the same deref instructions in their chains, e.g. ssa_100 = deref_var A ssa_101 = deref_struct "array_field" of ssa_100 ssa_102 = deref_array "[1]" of ssa_101 ssa_103 = deref_struct "field_a" of ssa_102 ssa_104 = deref_struct "field_a" of ssa_103 when comparing the two last deref instructions, their paths will share a common sequence ssa_100, ssa_101, ssa_102. This patch skips to next iteration if the deref instructions are the same. Path[0] (the var) is still handled specially, so in the case above, only ssa_101 and ssa_102 will be skipped. Reviewed-by: Jason Ekstrand --- diff --git a/src/compiler/nir/nir_deref.c b/src/compiler/nir/nir_deref.c index d013b42..c885168 100644 --- a/src/compiler/nir/nir_deref.c +++ b/src/compiler/nir/nir_deref.c @@ -294,6 +294,9 @@ nir_compare_deref_paths(nir_deref_path *a_path, nir_deref_instr *a_tail = *(a_p++); nir_deref_instr *b_tail = *(b_p++); + if (a_tail == b_tail) + continue; + switch (a_tail->deref_type) { case nir_deref_type_array: case nir_deref_type_array_wildcard: {