diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/vect')
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-1.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-2.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/bb-slp-pow-1.c | 28 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-avg-15.c | 52 |
4 files changed, 82 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-1.c b/gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-1.c index a54c99d..0dd163e 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-1.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-1.c @@ -63,4 +63,5 @@ main (void) /* { dg-final { scan-tree-dump "demoting int to signed short" "slp2" { target { ! vect_widen_shift } } } } */ /* { dg-final { scan-tree-dump "demoting int to unsigned short" "slp2" { target { ! vect_widen_shift } } } } */ +/* { dg-final { scan-tree-dump {\.AVG_FLOOR} "slp2" { target vect_avg_qi } } } */ /* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp2" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-2.c b/gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-2.c index 7e90bea..3750fb7 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-2.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-over-widen-2.c @@ -62,4 +62,5 @@ main (void) /* { dg-final { scan-tree-dump "demoting int to signed short" "slp2" { target { ! vect_widen_shift } } } } */ /* { dg-final { scan-tree-dump "demoting int to unsigned short" "slp2" { target { ! vect_widen_shift } } } } */ +/* { dg-final { scan-tree-dump {\.AVG_FLOOR} "slp2" { target vect_avg_qi } } } */ /* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp2" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pow-1.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pow-1.c new file mode 100644 index 0000000..5a05bd4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pow-1.c @@ -0,0 +1,28 @@ +/* { dg-additional-options "-fno-math-errno -fdisable-tree-sincos" } */ +/* { dg-require-effective-target vect_float } */ + +void __attribute__ ((noipa)) +f (float *a) +{ + a[0] = a[0] * a[0]; + a[1] = __builtin_powf (a[1], 2); + a[2] = a[2] * a[2]; + a[3] = __builtin_powf (a[3], 2); +} + +float a[4] = { 1, 2, 3, 4 }; + +int +main (void) +{ + f (a); + for (int i = 0; i < 4; ++i) + { + if (a[i] != (i + 1) * (i + 1)) + __builtin_abort (); + asm volatile ("" ::: "memory"); + } + return 0; +} + +/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-avg-15.c b/gcc/testsuite/gcc.dg/vect/vect-avg-15.c new file mode 100644 index 0000000..48d7ed7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-avg-15.c @@ -0,0 +1,52 @@ +/* { dg-additional-options "-O3" } */ +/* { dg-require-effective-target vect_int } */ + +#include "tree-vect.h" + +#define N 80 + +void __attribute__ ((noipa)) +f (signed char *restrict a, signed char *restrict b, + signed char *restrict c, int n, int step) +{ + for (int j = 0; j < n; ++j) + { + for (int i = 0; i < 16; ++i) + a[i] = (b[i] + c[i]) >> 1; + a += step; + b += step; + c += step; + } +} + +#define BASE1 -126 +#define BASE2 -42 + +signed char a[N], b[N], c[N]; + +int +main (void) +{ + check_vect (); + + for (int i = 0; i < N; ++i) + { + a[i] = i; + b[i] = BASE1 + i * 3; + c[i] = BASE2 + i * 2; + asm volatile ("" ::: "memory"); + } + f (a, b, c, N / 20, 20); + for (int i = 0; i < N; ++i) + { + int d = (BASE1 + BASE2 + i * 5) >> 1; + if (a[i] != (i % 20 < 16 ? d : i)) + __builtin_abort (); + } + return 0; +} + +/* { dg-final { scan-tree-dump "vect_recog_average_pattern: detected" "vect" } } */ +/* { dg-final { scan-tree-dump {\.AVG_FLOOR} "vect" { target vect_avg_qi } } } */ +/* { dg-final { scan-tree-dump "Loop contains only SLP stmts" "vect" { target vect_avg_qi } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loop" 1 "vect" { target vect_avg_qi } } } */ |