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