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 <jason@jlekstrand.net>
This commit is contained in:
parent
760859cac2
commit
c8a35285f0
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue