From: Dave Airlie Date: Mon, 19 Nov 2018 03:54:33 +0000 (+1000) Subject: nir: handle shared pointers in lowering indirect derefs. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c8a35285f0c8bef8ae70e2eb6d63b3c5cd44f499;p=mesa.git nir: handle shared pointers in lowering indirect derefs. Check if the base ends up with no variable, and continue if we see that case outside the loop. Reviewed-by: Jason Ekstrand --- diff --git a/src/compiler/nir/nir_lower_indirect_derefs.c b/src/compiler/nir/nir_lower_indirect_derefs.c index 897a0620872..adcfaec219f 100644 --- a/src/compiler/nir/nir_lower_indirect_derefs.c +++ b/src/compiler/nir/nir_lower_indirect_derefs.c @@ -135,7 +135,7 @@ lower_indirect_derefs_block(nir_block *block, nir_builder *b, /* Walk the deref chain back to the base and look for indirects */ bool has_indirect = false; nir_deref_instr *base = deref; - while (base->deref_type != nir_deref_type_var) { + while (base && base->deref_type != nir_deref_type_var) { if (base->deref_type == nir_deref_type_array && !nir_src_is_const(base->arr.index)) has_indirect = true; @@ -143,7 +143,7 @@ lower_indirect_derefs_block(nir_block *block, nir_builder *b, base = nir_deref_instr_parent(base); } - if (!has_indirect) + if (!has_indirect || !base) continue; /* Only lower variables whose mode is in the mask, or compact