libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / vect-simd-clone-4.c
blob320ac7e6c2e4373e616055bfc9fac07babbaf815
1 /* { dg-require-effective-target vect_simd_clones } */
2 /* { dg-additional-options "-fopenmp-simd" } */
3 /* { dg-additional-options "-mavx" { target avx_runtime } } */
5 #include "tree-vect.h"
7 #ifndef N
8 #define N 1024
9 #endif
11 float d[N];
12 int e[N];
13 unsigned short f[N];
15 #ifdef __aarch64__
16 #pragma omp declare simd simdlen(4) notinbranch uniform(b)
17 #else
18 #pragma omp declare simd simdlen(8) notinbranch uniform(b)
19 #endif
20 __attribute__((noinline)) float
21 foo (float a, float b, float c)
22 /* { dg-warning {unsupported simdlen 8 \(amdgcn\)} "" { target amdgcn*-*-* } .-1 } */
24 if (a < 30)
25 return 5.0f;
26 return a + b + c;
29 __attribute__((noinline, noclone)) void
30 bar ()
32 int i;
33 #pragma omp simd
34 for (i = 0; i < N; ++i)
36 d[i] = foo (i, 123, i * 3);
37 e[i] = e[i] * 3;
38 f[i] = f[i] + 1;
42 int
43 main ()
45 int i;
46 check_vect ();
47 bar ();
48 #pragma GCC novector
49 for (i = 0; i < N; i++)
50 if (d[i] != (i < 30 ? 5.0f : i * 4 + 123.0f) || e[i] || f[i] != 1)
51 abort ();
52 return 0;