Module: Mesa Branch: master Commit: ed9c3c4f19af278221a238130faa878baa16ec26 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed9c3c4f19af278221a238130faa878baa16ec26
Author: Rhys Perry <[email protected]> Date: Tue Feb 2 16:00:53 2021 +0000 nir: add nir_ssa_def_is_unused() Signed-off-by: Rhys Perry <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8784> --- src/compiler/nir/nir.c | 4 ++-- src/compiler/nir/nir.h | 6 ++++++ src/compiler/nir/nir_deref.c | 2 +- src/compiler/nir/nir_from_ssa.c | 2 +- src/compiler/nir/nir_lower_to_source_mods.c | 3 +-- src/compiler/nir/nir_opt_gcm.c | 2 +- src/compiler/nir/nir_opt_uniform_atomics.c | 3 +-- src/compiler/nir/nir_opt_vectorize.c | 6 ++---- 8 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 747f07af533..e1d18fdec02 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -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); diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 5a88bef0a81..ed7e8f7f948 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -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 * diff --git a/src/compiler/nir/nir_deref.c b/src/compiler/nir/nir_deref.c index f406c87bbbf..540603c32de 100644 --- a/src/compiler/nir/nir_deref.c +++ b/src/compiler/nir/nir_deref.c @@ -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); diff --git a/src/compiler/nir/nir_from_ssa.c b/src/compiler/nir/nir_from_ssa.c index 4104c3ec333..86da6226aea 100644 --- a/src/compiler/nir/nir_from_ssa.c +++ b/src/compiler/nir/nir_from_ssa.c @@ -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 diff --git a/src/compiler/nir/nir_lower_to_source_mods.c b/src/compiler/nir/nir_lower_to_source_mods.c index b23ceb6a632..fa53bac2914 100644 --- a/src/compiler/nir/nir_lower_to_source_mods.c +++ b/src/compiler/nir/nir_lower_to_source_mods.c @@ -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; diff --git a/src/compiler/nir/nir_opt_gcm.c b/src/compiler/nir/nir_opt_gcm.c index acca40974cf..cbffdcc5ea8 100644 --- a/src/compiler/nir/nir_opt_gcm.c +++ b/src/compiler/nir/nir_opt_gcm.c @@ -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 = diff --git a/src/compiler/nir/nir_opt_uniform_atomics.c b/src/compiler/nir/nir_opt_uniform_atomics.c index f2a4cca8c06..8ffee69f2d3 100644 --- a/src/compiler/nir/nir_opt_uniform_atomics.c +++ b/src/compiler/nir/nir_opt_uniform_atomics.c @@ -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); diff --git a/src/compiler/nir/nir_opt_vectorize.c b/src/compiler/nir/nir_opt_vectorize.c index 2e110a09b04..2f4acafa3c7 100644 --- a/src/compiler/nir/nir_opt_vectorize.c +++ b/src/compiler/nir/nir_opt_vectorize.c @@ -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); _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
