diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5af7ea02e5f0..668444818f2b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2019-11-14 Richard Sandiford + + PR testsuite/92366 + * gcc.dg/vect/bb-slp-40.c: Use dg-additional-options instead + of dg-options. Remove expected counts. + * gcc.dg/vect/bb-slp-41.c: Remove dg-options and explicit + dg-do run. Suppress vectorization of foo. + * gcc.dg/vect/bb-slp-42.c: New test. + 2019-11-14 Richard Sandiford * gcc.dg/vect/bb-slp-div-2.c: New test. diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-40.c b/gcc/testsuite/gcc.dg/vect/bb-slp-40.c index a1dd37218462..ecdaf830c12d 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-40.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-40.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fdump-tree-slp-all" } */ +/* { dg-additional-options "-fvect-cost-model=dynamic" } */ /* { dg-require-effective-target vect_int } */ char g_d[1024], g_s1[1024], g_s2[1024]; @@ -30,5 +30,5 @@ void foo(void) } /* See that we vectorize an SLP instance. */ -/* { dg-final { scan-tree-dump-times "Found vectorizable constructor" 1 "slp1" } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "slp1" } } */ +/* { dg-final { scan-tree-dump "Found vectorizable constructor" "slp1" } } */ +/* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "slp1" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-41.c b/gcc/testsuite/gcc.dg/vect/bb-slp-41.c index b4a71241be58..7de5ed1f5be3 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-41.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-41.c @@ -1,10 +1,9 @@ -/* { dg-do run } */ -/* { dg-options "-O3 -fdump-tree-slp-all -fno-vect-cost-model" } */ /* { dg-require-effective-target vect_int } */ #define ARR_SIZE 1000 -void foo (int *a, int *b) +void __attribute__((optimize (0))) +foo (int *a, int *b) { int i; for (i = 0; i < (ARR_SIZE - 2); ++i) @@ -56,6 +55,4 @@ int main () return 0; } -/* See that we vectorize an SLP instance. */ -/* { dg-final { scan-tree-dump-times "Found vectorizable constructor" 12 "slp1" } } */ -/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "slp1" } } */ +/* { dg-final { scan-tree-dump-not "vectorizing stmts using SLP" "slp1" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-42.c b/gcc/testsuite/gcc.dg/vect/bb-slp-42.c new file mode 100644 index 000000000000..091a273d2afe --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-42.c @@ -0,0 +1,49 @@ +/* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_perm } */ + +#include "tree-vect.h" + +#define ARR_SIZE 1024 + +void __attribute__((noipa)) +foo (int a[][ARR_SIZE], int *b) +{ + int i; + for (i = 0; i < ARR_SIZE; ++i) + { + a[0][i] += b[0]; + a[1][i] += b[1]; + a[2][i] += b[2]; + a[3][i] += b[3]; + } +} + +int +main () +{ + int a[4][ARR_SIZE]; + int b[4]; + + check_vect (); + + for (int i = 0; i < 4; ++i) + { + b[i] = 20 * i; + for (int j = 0; j < ARR_SIZE; ++j) + a[i][j] = (i + 1) * ARR_SIZE - j; + } + + foo (a, b); + + for (int i = 0; i < 4; ++i) + for (int j = 0; j < ARR_SIZE; ++j) + if (a[i][j] != (i + 1) * ARR_SIZE - j + 20 * i) + __builtin_abort (); + + return 0; + +} + +/* See that we vectorize an SLP instance. */ +/* { dg-final { scan-tree-dump "Found vectorizable constructor" "slp1" { target { ! vect_fully_masked } } } } */ +/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "slp1" { target { ! vect_fully_masked } } } } */