diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/vect/simd-clone-6.cc')
-rw-r--r-- | gcc/testsuite/g++.dg/vect/simd-clone-6.cc | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/vect/simd-clone-6.cc b/gcc/testsuite/g++.dg/vect/simd-clone-6.cc new file mode 100644 index 0000000000..fb00e8816a --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/simd-clone-6.cc @@ -0,0 +1,43 @@ +// PR c++/71257 +// { dg-require-effective-target vect_simd_clones } +// { dg-additional-options "-fopenmp-simd -fno-inline" } +// { dg-additional-options "-mavx" { target avx_runtime } } + +#include "../../gcc.dg/vect/tree-vect.h" + +#define N 1024 +struct S { int a; }; +int c[N], e[N], f[N]; +S d[N]; + +#pragma omp declare simd linear(ref(b, c) : 1) +int +foo (int a, S &b, int &c) +{ + return a + b.a + c; +} + +void +do_main () +{ + int i; + for (i = 0; i < N; i++) + { + c[i] = i; + d[i].a = 2 * i; + f[i] = 3 * i; + } + #pragma omp simd + for (i = 0; i < N; i++) + e[i] = foo (c[i], d[i], f[i]); + for (i = 0; i < N; i++) + if (e[i] != 6 * i) + __builtin_abort (); +} + +int +main () +{ + check_vect (); + return 0; +} |