From: Jason Ekstrand Date: Wed, 28 Nov 2018 23:27:57 +0000 (-0600) Subject: nir/remove_dead_variables: Properly handle deref casts X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7e85480a67eea965481266bf4bcdb690b44e19bd;p=mesa.git nir/remove_dead_variables: Properly handle deref casts We already detect any incomplete deref chains (where the deref is used for something other than another deref or a load/store) and flag the variable as used thanks to deref_used_for_not_store. All that's left to do is to properly skip casts when cleaning up. Reviewed-by: Alejandro PiƱeiro Reviewed-by: Caio Marcelo de Oliveira Filho --- diff --git a/src/compiler/nir/nir_remove_dead_variables.c b/src/compiler/nir/nir_remove_dead_variables.c index fadc51a6977..5e972491a1c 100644 --- a/src/compiler/nir/nir_remove_dead_variables.c +++ b/src/compiler/nir/nir_remove_dead_variables.c @@ -103,6 +103,9 @@ remove_dead_var_writes(nir_shader *shader, struct set *live) switch (instr->type) { case nir_instr_type_deref: { nir_deref_instr *deref = nir_instr_as_deref(instr); + if (deref->deref_type == nir_deref_type_cast && + !nir_deref_instr_parent(deref)) + continue; nir_variable_mode parent_mode; if (deref->deref_type == nir_deref_type_var)