Merge from mainline
[official-gcc.git] / libgomp / testsuite / libgomp.c / appendix-a / a.16.1.c
blob28a994a28fa7cfddaa8b76074d6e20ccb755f779
1 /* { dg-do run } */
3 #include <stdio.h>
5 float
6 work1 (int i)
8 return 1.0 * i;
11 float
12 work2 (int i)
14 return 2.0 * i;
17 void
18 a16 (float *x, float *y, int *index, int n)
20 int i;
21 #pragma omp parallel for shared(x, y, index, n)
22 for (i = 0; i < n; i++)
24 #pragma omp atomic
25 x[index[i]] += work1 (i);
26 y[i] += work2 (i);
29 int
30 main ()
32 float x[1000];
33 float y[10000];
34 int index[10000];
35 int i;
36 for (i = 0; i < 10000; i++)
38 index[i] = i % 1000;
39 y[i] = 0.0;
41 for (i = 0; i < 1000; i++)
42 x[i] = 0.0;
43 a16 (x, y, index, 10000);
44 for (i = 0; i < 10; i++)
45 printf ("x[%d] = %f, y[%d] = %f\n", i, x[i], i, y[i]);
46 return 0;