diff options
Diffstat (limited to 'gcc/testsuite/gcc.target/i386/pr103771-5.c')
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr103771-5.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/i386/pr103771-5.c b/gcc/testsuite/gcc.target/i386/pr103771-5.c new file mode 100644 index 0000000..bf94f53 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr103771-5.c @@ -0,0 +1,54 @@ +/* { dg-do compile } */ +/* { dg-options "-march=x86-64-v4 -O3 -fno-trapping-math -fdump-tree-vect-details" } */ +/* { dg-final { scan-assembler-not "kshift" { target { ! ia32 } } } } */ +/* { dg-final { scan-tree-dump-times "loop vectorized using 64 byte vectors" 4 "vect" { target { ! ia32 } } } } */ + +void +foo (float* a, float* b, float* c, float* d, double* __restrict e, int n) +{ + for (int i = 0 ; i != n; i++) + { + float tmp = c[i] + d[i]; + if (a[i] < b[i]) + tmp = 0.0; + e[i] = tmp; + } +} + +void +foo1 (int* a, int* b, float* c, float* d, double* __restrict e, int n) +{ + for (int i = 0 ; i != n; i++) + { + float tmp = c[i] + d[i]; + if (a[i] < b[i]) + tmp = 0.0; + e[i] = tmp; + } +} + + +void +foo2 (double* a, double* b, double* c, double* d, float* __restrict e, int n) +{ + for (int i = 0 ; i != n; i++) + { + float tmp = c[i] + d[i]; + if (a[i] < b[i]) + tmp = 0.0; + e[i] = tmp; + } +} + +void +foo3 (long long* a, long long* b, double* c, double* d, float* __restrict e, int n) +{ + for (int i = 0 ; i != n; i++) + { + float tmp = c[i] + d[i]; + if (a[i] < b[i]) + tmp = 0.0; + e[i] = tmp; + } +} + |