Mesa (master): nir: add nir_ssa_def_is_unused()

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Mar 1 18:09:37 UTC 2021


Module: Mesa
Branch: master
Commit: ed9c3c4f19af278221a238130faa878baa16ec26
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed9c3c4f19af278221a238130faa878baa16ec26

Author: Rhys Perry <pendingchaos02 at gmail.com>
Date:   Tue Feb  2 16:00:53 2021 +0000

nir: add nir_ssa_def_is_unused()

Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
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);



More information about the mesa-commit mailing list