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