Mesa (main): nir: consider write_mask in nir_ssa_def_components_read()
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jul 26 09:59:25 UTC 2021
Module: Mesa
Branch: main
Commit: d27417b597ff77d843422c2fda1d5261598225e5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d27417b597ff77d843422c2fda1d5261598225e5
Author: Daniel Schürmann <daniel at schuermann.dev>
Date: Mon Jun 14 19:19:23 2021 +0200
nir: consider write_mask in nir_ssa_def_components_read()
Reviewed-by: Emma Anholt <emma at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11411>
---
src/compiler/nir/nir.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c
index 79d03a7e9bb..46a971e2caf 100644
--- a/src/compiler/nir/nir.c
+++ b/src/compiler/nir/nir.c
@@ -1566,6 +1566,19 @@ nir_ssa_def_rewrite_uses_after(nir_ssa_def *def, nir_ssa_def *new_ssa,
}
}
+static nir_ssa_def *
+get_store_value(nir_intrinsic_instr *intrin)
+{
+ assert(nir_intrinsic_has_write_mask(intrin));
+ /* deref stores have the deref in src[0] and the store value in src[1] */
+ if (intrin->intrinsic == nir_intrinsic_store_deref ||
+ intrin->intrinsic == nir_intrinsic_store_deref_block_intel)
+ return intrin->src[1].ssa;
+
+ /* all other stores have the store value in src[0] */
+ return intrin->src[0].ssa;
+}
+
nir_component_mask_t
nir_ssa_def_components_read(const nir_ssa_def *def)
{
@@ -1577,6 +1590,13 @@ nir_ssa_def_components_read(const nir_ssa_def *def)
int src_idx = alu_src - &alu->src[0];
assert(src_idx >= 0 && src_idx < nir_op_infos[alu->op].num_inputs);
read_mask |= nir_alu_instr_src_read_mask(alu, src_idx);
+ } else if (use->parent_instr->type == nir_instr_type_intrinsic) {
+ nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(use->parent_instr);
+ if (nir_intrinsic_has_write_mask(intrin) && use->ssa == get_store_value(intrin)) {
+ read_mask |= nir_intrinsic_write_mask(intrin);
+ } else {
+ return (1 << def->num_components) - 1;
+ }
} else {
return (1 << def->num_components) - 1;
}
More information about the mesa-commit
mailing list