summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/glsl/nir/nir_live_variables.c32
1 files changed, 13 insertions, 19 deletions
diff --git a/src/glsl/nir/nir_live_variables.c b/src/glsl/nir/nir_live_variables.c
index fd076899de8..dc3057c41fd 100644
--- a/src/glsl/nir/nir_live_variables.c
+++ b/src/glsl/nir/nir_live_variables.c
@@ -47,29 +47,23 @@ struct live_variables_state {
};
static bool
-index_dest(nir_dest *dest, void *void_state)
+index_ssa_def(nir_ssa_def *def, void *void_state)
{
struct live_variables_state *state = void_state;
- if (dest->is_ssa)
- dest->ssa.live_index = state->num_ssa_defs++;
+ if (def->parent_instr->type == nir_instr_type_ssa_undef)
+ def->live_index = 0;
+ else
+ def->live_index = state->num_ssa_defs++;
return true;
}
static bool
-index_ssa_definitions_block(nir_block *block, void *void_state)
+index_ssa_definitions_block(nir_block *block, void *state)
{
- struct live_variables_state *state = void_state;
-
- nir_foreach_instr(block, instr) {
- if (instr->type == nir_instr_type_ssa_undef) {
- nir_ssa_undef_instr *undef = nir_instr_as_ssa_undef(instr);
- undef->def.live_index = 0;
- } else {
- nir_foreach_dest(instr, index_dest, state);
- }
- }
+ nir_foreach_instr(block, instr)
+ nir_foreach_ssa_def(instr, index_ssa_def, state);
return true;
}
@@ -107,12 +101,11 @@ set_src_live(nir_src *src, void *void_live)
}
static bool
-set_dest_dead(nir_dest *dest, void *void_live)
+set_ssa_def_dead(nir_ssa_def *def, void *void_live)
{
BITSET_WORD *live = void_live;
- if (dest->is_ssa)
- BITSET_CLEAR(live, dest->ssa.live_index);
+ BITSET_CLEAR(live, def->live_index);
return true;
}
@@ -134,7 +127,8 @@ propagate_across_edge(nir_block *pred, nir_block *succ,
break;
nir_phi_instr *phi = nir_instr_as_phi(instr);
- set_dest_dead(&phi->dest, live);
+ assert(phi->dest.is_ssa);
+ set_ssa_def_dead(&phi->dest.ssa, live);
}
nir_foreach_instr(succ, instr) {
@@ -183,7 +177,7 @@ walk_instructions_block(nir_block *block, void *void_state)
if (instr->type == nir_instr_type_phi)
break;
- nir_foreach_dest(instr, set_dest_dead, block->live_in);
+ nir_foreach_ssa_def(instr, set_ssa_def_dead, block->live_in);
nir_foreach_src(instr, set_src_live, block->live_in);
}