aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2025-04-01 14:13:03 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2025-04-01 15:23:27 +0200
commitd0cc14c62ad7403afcab3c2e38851d3ab179352f (patch)
tree7333e5e19358702a150956f2df9e08729052b1fa /gcc
parente9803f10c9f376f6d091e7ef3ad6e1c92e7c8e8c (diff)
downloadgcc-d0cc14c62ad7403afcab3c2e38851d3ab179352f.zip
gcc-d0cc14c62ad7403afcab3c2e38851d3ab179352f.tar.gz
gcc-d0cc14c62ad7403afcab3c2e38851d3ab179352f.tar.bz2
tree-optimization/119534 - reject bogus emulated vectorized gather
The following makes sure to reject the attempts to emulate a vector gather when the discovered index vector type is a vector mask. PR tree-optimization/119534 * tree-vect-stmts.cc (get_load_store_type): Reject VECTOR_BOOLEAN_TYPE_P offset vector type for emulated gathers. * gcc.dg/vect/pr119534.c: New testcase.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr119534.c11
-rw-r--r--gcc/tree-vect-stmts.cc1
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/pr119534.c b/gcc/testsuite/gcc.dg/vect/pr119534.c
new file mode 100644
index 0000000..0b4130b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr119534.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-mavx512bw" { target { x86_64-*-* i?86-*-* } } } */
+
+void f(int w, int *out, double *d)
+{
+ for (int j = 0; j < w; j++)
+ {
+ const int i = (j >= w / 2);
+ out[j] += d[i];
+ }
+}
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 813b2b7..8bd5ea9 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -2522,6 +2522,7 @@ get_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info,
{
if (!TYPE_VECTOR_SUBPARTS (vectype).is_constant ()
|| !TYPE_VECTOR_SUBPARTS (gs_info->offset_vectype).is_constant ()
+ || VECTOR_BOOLEAN_TYPE_P (gs_info->offset_vectype)
|| !constant_multiple_p (TYPE_VECTOR_SUBPARTS
(gs_info->offset_vectype),
TYPE_VECTOR_SUBPARTS (vectype)))