{
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)
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);
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
*
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);
}
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
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;
{
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 =
}
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);
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) {
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);