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 <apinheiro@igalia.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
Jason Ekstrand 2018-11-28 17:27:57 -06:00 committed by Jason Ekstrand
parent 78d80f7db2
commit 7e85480a67
1 changed files with 3 additions and 0 deletions

View File

@ -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)