2018-11-26 Richard Biener <rguenther@suse.de>
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / pr88182.C
blob2e3ac69c5fc8ed6c7cebb7ebde31fab4763d7582
1 // { dg-do run }
2 // { dg-options "-O -fopenmp -ftree-loop-if-convert -fno-ssa-phiopt" }
4 #pragma omp declare simd simdlen(4) notinbranch
5 __attribute__((noinline)) int
6 foo (double c1, double c2)
8   double z1 = c1, z2 = c2;
9   int res = 100, i;
11   for (i = 0; i < 5; i++)
12     {
13       res = (z1 * z1 + z2 * z2 > 4.0) ? (i < res ? i : res) : res;
14       z1 = c1 + z1 * z1 - z2 * z2;
15       z2 = c2 + 2.0 * z1 * z2;
16       c1 += 0.5;
17       c2 += 0.5;
18     }
19   return res;
22 __attribute__((noinline, noclone)) void
23 bar (double *x, double *y)
25   asm volatile ("" : : "rm" (x), "rm" (y) : "memory");
28 int
29 main ()
31   int i;
32   double c[4] = { 0.0, 1.0, 0.0, 1.0 };
33   double d[4] = { 0.0, 1.0, 2.0, 0.0 };
34   int e[4];
35   bar (c, d);
36 #pragma omp simd safelen(4)
37   for (i = 0; i < 4; i++)
38     e[i] = foo (c[i], d[i]);
39   if (e[0] != 3 || e[1] != 1 || e[2] != 1 || e[3] != 2)
40     __builtin_abort ();
41   return 0;