diff options
| author | Richard Biener <rguenther@suse.de> | 2025-04-01 14:13:03 +0200 |
|---|---|---|
| committer | Richard Biener <rguenth@gcc.gnu.org> | 2025-06-24 13:09:05 +0200 |
| commit | 550edc99476376ee0350be90b9e61b337ffb0ff3 (patch) | |
| tree | 95ce7a6bf97864d31fe2d203d821715825a38987 | |
| parent | 81ebacc70c3446218a347902362cc032fc615f6c (diff) | |
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.
(cherry picked from commit d0cc14c62ad7403afcab3c2e38851d3ab179352f)
| -rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr119534.c | 11 | ||||
| -rw-r--r-- | gcc/tree-vect-stmts.cc | 1 |
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 00000000000..0b4130b7cfa --- /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 b1ab4bce7d2..bc9f95cab97 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -2493,6 +2493,7 @@ get_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, else 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))) |
