From 7e85480a67eea965481266bf4bcdb690b44e19bd Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 28 Nov 2018 17:27:57 -0600 Subject: [PATCH] nir/remove_dead_variables: Properly handle deref casts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/compiler/nir/nir_remove_dead_variables.c | 3 +++ 1 file changed, 3 insertions(+) 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)