diff options
author | Richard Biener <rguenther@suse.de> | 2023-06-13 09:19:34 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-06-13 10:40:25 +0200 |
commit | 0f3d07e16fec7bea2fd033d9ec8ff08ea7effa39 (patch) | |
tree | 394b84f41b2f3357192f2f88533dfd7ab9ea87d9 /gcc | |
parent | 1c3661e224e3ddfc6f773b095740c0f5a7ddf5fc (diff) | |
download | gcc-0f3d07e16fec7bea2fd033d9ec8ff08ea7effa39.zip gcc-0f3d07e16fec7bea2fd033d9ec8ff08ea7effa39.tar.gz gcc-0f3d07e16fec7bea2fd033d9ec8ff08ea7effa39.tar.bz2 |
middle-end/110232 - fix native interpret of vector <signed-boolean:1>
The following fixes native interpretation of a buffer as boolean
vector with bit-precision elements such as AVX512 vectors. The
check whether the buffer covers the whole vector was broken for
bit-precision elements and the following instead implements it
based on the vector type size.
PR middle-end/110232
* fold-const.cc (native_interpret_vector): Use TYPE_SIZE_UNIT
to check whether the buffer covers the whole vector.
* gcc.target/i386/pr110232.c: New testcase.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fold-const.cc | 11 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr110232.c | 12 |
2 files changed, 16 insertions, 7 deletions
diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index 84b0d06..9ea055d 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -8796,16 +8796,13 @@ native_interpret_vector_part (tree type, const unsigned char *bytes, static tree native_interpret_vector (tree type, const unsigned char *ptr, unsigned int len) { - tree etype; - unsigned int size; - unsigned HOST_WIDE_INT count; + unsigned HOST_WIDE_INT size; - etype = TREE_TYPE (type); - size = GET_MODE_SIZE (SCALAR_TYPE_MODE (etype)); - if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&count) - || size * count > len) + if (!tree_to_poly_uint64 (TYPE_SIZE_UNIT (type)).is_constant (&size) + || size > len) return NULL_TREE; + unsigned HOST_WIDE_INT count = TYPE_VECTOR_SUBPARTS (type).to_constant (); return native_interpret_vector_part (type, ptr, len, count, 1); } diff --git a/gcc/testsuite/gcc.target/i386/pr110232.c b/gcc/testsuite/gcc.target/i386/pr110232.c new file mode 100644 index 0000000..43b74b1 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr110232.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -march=znver4 --param vect-partial-vector-usage=2 -fno-vect-cost-model -fdump-tree-vect" } */ + +int a[4096]; + +void foo () +{ + for (int i = 1; i < 4095; ++i) + a[i] = 42; +} + +/* { dg-final { scan-tree-dump-not "VIEW_CONVERT_EXPR" "vect" } } */ |