summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/vect/simd-clone-6.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/vect/simd-clone-6.cc')
-rw-r--r--gcc/testsuite/g++.dg/vect/simd-clone-6.cc43
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;
+}