Mesa (main): nir/opt_shrink_vectors: don't shrink vectors used by intrinsics

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jul 26 09:59:25 UTC 2021


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

Author: Daniel Schürmann <daniel at schuermann.dev>
Date:   Thu Jul 22 09:51:32 2021 +0200

nir/opt_shrink_vectors: don't shrink vectors used by intrinsics

Store intrinsics shrink the sources by creating a new vecN.
Other intrinsics cannot shrink their sources.

Reviewed-by: Emma Anholt <emma at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11411>

---

 src/compiler/nir/nir_opt_shrink_vectors.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/compiler/nir/nir_opt_shrink_vectors.c b/src/compiler/nir/nir_opt_shrink_vectors.c
index d64a33f3104..6aa4bd59bd3 100644
--- a/src/compiler/nir/nir_opt_shrink_vectors.c
+++ b/src/compiler/nir/nir_opt_shrink_vectors.c
@@ -49,6 +49,12 @@ shrink_dest_to_read_mask(nir_ssa_def *def)
    if (def->num_components == 1)
       return false;
 
+   /* don't remove any channels if used by an intrinsic */
+   nir_foreach_use(use_src, def) {
+      if (use_src->parent_instr->type == nir_instr_type_intrinsic)
+         return false;
+   }
+
    unsigned mask = nir_ssa_def_components_read(def);
    int last_bit = util_last_bit(mask);
 
@@ -82,6 +88,12 @@ opt_shrink_vectors_alu(nir_builder *b, nir_alu_instr *instr)
       case nir_op_vec4:
       case nir_op_vec3:
       case nir_op_vec2: {
+         /* don't remove any channels if used by an intrinsic */
+         nir_foreach_use(use_src, def) {
+            if (use_src->parent_instr->type == nir_instr_type_intrinsic)
+               return false;
+         }
+
          unsigned mask = nir_ssa_def_components_read(def);
 
          /* If nothing was read, leave it up to DCE. */



More information about the mesa-commit mailing list