Mesa (main): nir/opt_offsets: remove need to loop try_extract_const_addition

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Dec 3 12:45:50 UTC 2021


Module: Mesa
Branch: main
Commit: 2368c36427f94325bf75c72a2a4d344fce6f5f07
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2368c36427f94325bf75c72a2a4d344fce6f5f07

Author: Rhys Perry <pendingchaos02 at gmail.com>
Date:   Thu Dec  2 13:51:24 2021 +0000

nir/opt_offsets: remove need to loop try_extract_const_addition

fossil-db (Sienna Cichlid):
Totals from 1 (0.00% of 134572) affected shaders:
no stat changes

Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
Reviewed-by: Emma Anholt <emma at anholt.net>
Reviewed-by: Timur Kristóf <timur.kristof at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14009>

---

 src/compiler/nir/nir_opt_offsets.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/compiler/nir/nir_opt_offsets.c b/src/compiler/nir/nir_opt_offsets.c
index 9e1ae252897..e2ec1daeded 100644
--- a/src/compiler/nir/nir_opt_offsets.c
+++ b/src/compiler/nir/nir_opt_offsets.c
@@ -67,17 +67,21 @@ try_extract_const_addition(nir_builder *b, nir_instr *instr, opt_offsets_state *
    for (unsigned i = 0; i < 2; ++i) {
       if (nir_src_is_const(alu->src[i].src)) {
          *out_const += nir_src_as_uint(alu->src[i].src);
-         return alu->src[1 - i].src.ssa;
-      }
-
-      nir_ssa_def *replace_src = try_extract_const_addition(b, alu->src[i].src.ssa->parent_instr, state, out_const);
-      if (replace_src) {
-         b->cursor = nir_before_instr(&alu->instr);
-         return nir_iadd(b, replace_src, alu->src[1 - i].src.ssa);
+         nir_ssa_def *replace_src =
+            try_extract_const_addition(b, alu->src[1 - i].src.ssa->parent_instr, state, out_const);
+         return replace_src ? replace_src : alu->src[1 - i].src.ssa;
       }
    }
 
-   return NULL;
+   nir_ssa_def *replace_src0 = try_extract_const_addition(b, alu->src[0].src.ssa->parent_instr, state, out_const);
+   nir_ssa_def *replace_src1 = try_extract_const_addition(b, alu->src[1].src.ssa->parent_instr, state, out_const);
+   if (!replace_src0 && !replace_src1)
+      return NULL;
+
+   b->cursor = nir_before_instr(&alu->instr);
+   replace_src0 = replace_src0 ? replace_src0 : nir_ssa_for_alu_src(b, alu, 0);
+   replace_src1 = replace_src1 ? replace_src1 : nir_ssa_for_alu_src(b, alu, 1);
+   return nir_iadd(b, replace_src0, replace_src1);
 }
 
 static bool
@@ -99,9 +103,7 @@ try_fold_load_store(nir_builder *b,
       return false;
 
    if (!nir_src_is_const(*off_src)) {
-      nir_ssa_def *r = off_src->ssa;
-      while ((r = try_extract_const_addition(b, r->parent_instr, state, &off_const)))
-         replace_src = r;
+      replace_src = try_extract_const_addition(b, off_src->ssa->parent_instr, state, &off_const);
    } else if (nir_src_as_uint(*off_src)) {
       off_const += nir_src_as_uint(*off_src);
       b->cursor = nir_before_instr(&intrin->instr);



More information about the mesa-commit mailing list