From c8a35285f0c8bef8ae70e2eb6d63b3c5cd44f499 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 19 Nov 2018 13:54:33 +1000 Subject: [PATCH] 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 --- src/compiler/nir/nir_lower_indirect_derefs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 -- 2.30.2