nir: add nir_ssa_def_is_unused()
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8784>
This commit is contained in:
@@ -1296,7 +1296,7 @@ nir_instr_rewrite_dest(nir_instr *instr, nir_dest *dest, nir_dest new_dest)
|
||||
{
|
||||
if (dest->is_ssa) {
|
||||
/* We can only overwrite an SSA destination if it has no uses. */
|
||||
assert(list_is_empty(&dest->ssa.uses) && list_is_empty(&dest->ssa.if_uses));
|
||||
assert(nir_ssa_def_is_unused(&dest->ssa));
|
||||
} else {
|
||||
list_del(&dest->reg.def_link);
|
||||
if (dest->reg.indirect)
|
||||
@@ -1839,7 +1839,7 @@ nir_function_impl_lower_instructions(nir_function_impl *impl,
|
||||
list_for_each_entry_safe(nir_src, use_src, &old_if_uses, use_link)
|
||||
nir_if_rewrite_condition(use_src->parent_if, new_src);
|
||||
|
||||
if (list_is_empty(&old_def->uses) && list_is_empty(&old_def->if_uses)) {
|
||||
if (nir_ssa_def_is_unused(old_def)) {
|
||||
iter = nir_instr_remove(instr);
|
||||
} else {
|
||||
iter = nir_after_instr(instr);
|
||||
|
@@ -3945,6 +3945,12 @@ void nir_ssa_def_rewrite_uses_after(nir_ssa_def *def, nir_src new_src,
|
||||
|
||||
nir_component_mask_t nir_ssa_def_components_read(const nir_ssa_def *def);
|
||||
|
||||
static inline bool
|
||||
nir_ssa_def_is_unused(nir_ssa_def *ssa)
|
||||
{
|
||||
return list_is_empty(&ssa->uses) && list_is_empty(&ssa->if_uses);
|
||||
}
|
||||
|
||||
|
||||
/** Returns the next block, disregarding structure
|
||||
*
|
||||
|
@@ -110,7 +110,7 @@ nir_deref_instr_remove_if_unused(nir_deref_instr *instr)
|
||||
for (nir_deref_instr *d = instr; d; d = nir_deref_instr_parent(d)) {
|
||||
/* If anyone is using this deref, leave it alone */
|
||||
assert(d->dest.is_ssa);
|
||||
if (!list_is_empty(&d->dest.ssa.uses))
|
||||
if (!nir_ssa_def_is_unused(&d->dest.ssa))
|
||||
break;
|
||||
|
||||
nir_instr_remove(&d->instr);
|
||||
|
@@ -548,7 +548,7 @@ rewrite_ssa_def(nir_ssa_def *def, void *void_state)
|
||||
}
|
||||
|
||||
nir_ssa_def_rewrite_uses(def, nir_src_for_reg(reg));
|
||||
assert(list_is_empty(&def->uses) && list_is_empty(&def->if_uses));
|
||||
assert(nir_ssa_def_is_unused(def));
|
||||
|
||||
if (def->parent_instr->type == nir_instr_type_ssa_undef) {
|
||||
/* If it's an ssa_undef instruction, remove it since we know we just got
|
||||
|
@@ -127,8 +127,7 @@ nir_lower_to_source_mods_block(nir_block *block,
|
||||
alu->src[i].swizzle[j] = parent->src[0].swizzle[alu->src[i].swizzle[j]];
|
||||
}
|
||||
|
||||
if (list_is_empty(&parent->dest.dest.ssa.uses) &&
|
||||
list_is_empty(&parent->dest.dest.ssa.if_uses))
|
||||
if (nir_ssa_def_is_unused(&parent->dest.dest.ssa))
|
||||
nir_instr_remove(&parent->instr);
|
||||
|
||||
progress = true;
|
||||
|
@@ -509,7 +509,7 @@ gcm_replace_def_with_undef(nir_ssa_def *def, void *void_state)
|
||||
{
|
||||
struct gcm_state *state = void_state;
|
||||
|
||||
if (list_is_empty(&def->uses) && list_is_empty(&def->if_uses))
|
||||
if (nir_ssa_def_is_unused(def))
|
||||
return true;
|
||||
|
||||
nir_ssa_undef_instr *undef =
|
||||
|
@@ -242,8 +242,7 @@ optimize_and_rewrite_atomic(nir_builder *b, nir_intrinsic_instr *intrin)
|
||||
}
|
||||
|
||||
ASSERTED bool original_result_divergent = intrin->dest.ssa.divergent;
|
||||
bool return_prev = !list_is_empty(&intrin->dest.ssa.uses) ||
|
||||
!list_is_empty(&intrin->dest.ssa.if_uses);
|
||||
bool return_prev = !nir_ssa_def_is_unused(&intrin->dest.ssa);
|
||||
|
||||
nir_ssa_def old_result = intrin->dest.ssa;
|
||||
list_replace(&intrin->dest.ssa.uses, &old_result.uses);
|
||||
|
@@ -295,8 +295,7 @@ instr_try_combine(struct nir_shader *nir, struct set *instr_set,
|
||||
nir_if_rewrite_condition(src->parent_if, nir_src_for_ssa(new_alu1));
|
||||
}
|
||||
|
||||
assert(list_is_empty(&alu1->dest.dest.ssa.uses));
|
||||
assert(list_is_empty(&alu1->dest.dest.ssa.if_uses));
|
||||
assert(nir_ssa_def_is_unused(&alu1->dest.dest.ssa));
|
||||
|
||||
nir_foreach_use_safe(src, &alu2->dest.dest.ssa) {
|
||||
if (src->parent_instr->type == nir_instr_type_alu) {
|
||||
@@ -332,8 +331,7 @@ instr_try_combine(struct nir_shader *nir, struct set *instr_set,
|
||||
nir_if_rewrite_condition(src->parent_if, nir_src_for_ssa(new_alu2));
|
||||
}
|
||||
|
||||
assert(list_is_empty(&alu2->dest.dest.ssa.uses));
|
||||
assert(list_is_empty(&alu2->dest.dest.ssa.if_uses));
|
||||
assert(nir_ssa_def_is_unused(&alu2->dest.dest.ssa));
|
||||
|
||||
nir_instr_remove(instr1);
|
||||
nir_instr_remove(instr2);
|
||||
|
Reference in New Issue
Block a user