Skip gnat.dg/prot7.adb on hppa.
[official-gcc.git] / libgomp / testsuite / libgomp.c-c++-common / for-13.c
bloba4767278fbb1cca3183cc6664780566c2a68e108
1 unsigned short a[256];
3 __attribute__((noinline, noclone)) void
4 bar (void *x, unsigned short z)
6 unsigned short *y = (unsigned short *) x;
7 if (y < &a[5] || y > &a[222] || y == &a[124])
8 __builtin_abort ();
9 *y += z;
12 __attribute__((noinline, noclone)) void
13 foo (void *qx, void *rx, void *sx, int n)
15 unsigned short (*q)[n], (*r)[n], (*s)[n], (*p)[n];
16 q = (typeof (q)) qx;
17 r = (typeof (r)) rx;
18 s = (typeof (s)) sx;
19 #pragma omp for
20 for (p = q; p != r; p++)
21 bar (p, 1);
22 #pragma omp for
23 for (p = s; p != r; p--)
24 bar (p, 2);
25 #pragma omp for
26 for (p = q; p != r; p = p + 1)
27 bar (p, 4);
28 #pragma omp for
29 for (p = s; p != r; p = p - 1)
30 bar (p, 8);
31 #pragma omp for
32 for (p = q; p != r; p = 1 + p)
33 bar (p, 16);
34 #pragma omp for
35 for (p = s; p != r; p = -1 + p)
36 bar (p, 32);
37 #pragma omp for
38 for (p = q; p != r; p += 1)
39 bar (p, 64);
40 #pragma omp for
41 for (p = s; p != r; p -= 1)
42 bar (p, 128);
45 __attribute__((noinline, noclone)) void
46 baz (void *qx, void *rx, void *sx, int n)
48 unsigned short (*q)[n], (*r)[n], (*s)[n], (*p)[n];
49 q = (typeof (q)) qx;
50 r = (typeof (r)) rx;
51 s = (typeof (s)) sx;
52 #pragma omp for
53 for (p = q; p < r; p++)
54 bar (p, 256);
55 #pragma omp for
56 for (p = s; p > r; p--)
57 bar (p, 512);
58 #pragma omp for
59 for (p = q; p < r; p = p + 1)
60 bar (p, 1024);
61 #pragma omp for
62 for (p = s; p > r; p = p - 1)
63 bar (p, 2048);
64 #pragma omp for
65 for (p = q; p < r; p = 1 + p)
66 bar (p, 4096);
67 #pragma omp for
68 for (p = s; p > r; p = -1 + p)
69 bar (p, 8192);
70 #pragma omp for
71 for (p = q; p < r; p += 1)
72 bar (p, 16384);
73 #pragma omp for
74 for (p = s; p > r; p -= 1)
75 bar (p, 32768U);
78 int
79 main ()
81 int i;
82 volatile int j = 7;
83 #pragma omp parallel
85 foo (&a[5 + (j - 7)], &a[124 + (j - 7)], &a[222 + (j - 7)], j);
86 baz (&a[5 + (j - 7)], &a[124 + (j - 7)], &a[222 + (j - 7)], j);
88 for (i = 0; i < 256; i++)
89 if (i < 5 || i > 222 || i == 124 || ((i - 5) % 7) != 0)
91 if (a[i])
92 __builtin_abort ();
94 else if (i < 124 && a[i] != 1 + 4 + 16 + 64 + 256 + 1024 + 4096 + 16384)
95 __builtin_abort ();
96 else if (i > 124 && a[i] != 2 + 8 + 32 + 128 + 512 + 2048 + 8192 + 32768U)
97 __builtin_abort ();
98 return 0;