diff options
author | Richard Biener <rguenther@suse.de> | 2016-06-15 09:54:17 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-06-15 09:54:17 +0000 |
commit | b17dc4d4e42c4366f60ad79cdc31f7b1260e058e (patch) | |
tree | 286b33071709e8c609cfc4f0c4d8ca151b2dc366 /gcc/testsuite | |
parent | 2a5825f23bd387d239592b1efd0e8487dd83a6e4 (diff) | |
download | gcc-b17dc4d4e42c4366f60ad79cdc31f7b1260e058e.zip gcc-b17dc4d4e42c4366f60ad79cdc31f7b1260e058e.tar.gz gcc-b17dc4d4e42c4366f60ad79cdc31f7b1260e058e.tar.bz2 |
tree-vect-stmts.c (vectorizable_store): Remove strided grouped store restrictions.
2016-06-15 Richard Biener <rguenther@suse.de>
* tree-vect-stmts.c (vectorizable_store): Remove strided grouped
store restrictions.
* gcc.dg/vect/slp-45.c: New testcase.
From-SVN: r237474
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/slp-45.c | 78 |
2 files changed, 82 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3eaaa91..679f022 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2016-06-15 Richard Biener <rguenther@suse.de> + * gcc.dg/vect/slp-45.c: New testcase. + +2016-06-15 Richard Biener <rguenther@suse.de> + * gcc.dg/vect/bb-slp-pattern-2.c: Disable loop vectorization. 2016-06-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com> diff --git a/gcc/testsuite/gcc.dg/vect/slp-45.c b/gcc/testsuite/gcc.dg/vect/slp-45.c new file mode 100644 index 0000000..be721cb --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/slp-45.c @@ -0,0 +1,78 @@ +/* { dg-do run } */ +/* { dg-require-effective-target vect_int } */ +/* { dg-additional-options "-O3" } */ + +#include <string.h> +#include "tree-vect.h" + +#define FOO(T,N) \ +void __attribute__((noinline,noclone)) \ +foo_ ## T ## _ ## N (T * __restrict__ in_, T * __restrict__ out_, int s) \ +{ \ + T *in = __builtin_assume_aligned (in_, __BIGGEST_ALIGNMENT__); \ + T *out = __builtin_assume_aligned (out_, __BIGGEST_ALIGNMENT__); \ + for (int i = 0; i < 16; i++) \ + { \ + for (int j = 0; j < N; ++j) \ + out[j] = in[j]; \ + in += N; \ + out += s*N; \ + } \ +} + +#define TEST(T,N) \ + do { \ + memset (out, 0, 4096); \ + foo_ ## T ## _ ## N ((T *)in, (T *)out, 1); \ + if (memcmp (in, out, sizeof (T) * 16 * N) != 0) \ + __builtin_abort (); \ + for (int i = sizeof (T) * 16 * N; i < 4096; ++i) \ + if (out[i] != 0) \ + __builtin_abort (); \ + } while (0) + +FOO(char, 1) +FOO(char, 2) +FOO(char, 3) +FOO(char, 4) +FOO(char, 6) +FOO(char, 8) +FOO(int, 1) +FOO(int, 2) +FOO(int, 3) +FOO(int, 4) +FOO(int, 6) +FOO(int, 8) +FOO(int, 16) + +char in[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__))); +char out[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__))); + +int main() +{ + check_vect (); + + for (int i = 0; i < 4096; ++i) + { + in[i] = i; + __asm__ volatile ("" : : : "memory"); + } + + TEST(char, 1); + TEST(char, 2); + TEST(char, 3); + TEST(char, 4); + TEST(char, 6); + TEST(char, 8); + TEST(int, 1); + TEST(int, 2); + TEST(int, 3); + TEST(int, 4); + TEST(int, 6); + TEST(int, 8); + TEST(int, 16); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 13 "vect" } } */ |