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:
Rhys Perry
2021-02-02 16:00:53 +00:00
committed by Marge Bot
parent 0d80dc1588
commit ed9c3c4f19
8 changed files with 15 additions and 13 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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