Skip various cmp-mem-const tests on lp64 hppa*-*-*
[official-gcc.git] / libgomp / testsuite / libgomp.c-c++-common / depend-iterator-1.c
blob03cded42cbd25f02a8e16a9ac67706fdb51296fe
1 #ifdef __cplusplus
2 extern "C"
3 #endif
4 void abort (void);
5 int arr[64], arr2[64], arr3[64];
7 int *
8 foo (int x, int y, long z)
10 int v;
11 switch (x)
13 case 1:
14 if (z != 0 || y < 0 || y >= 64)
15 abort ();
16 #pragma omp atomic capture
18 v = arr2[y];
19 arr2[y]++;
21 if (v != 0) abort ();
22 return &arr[y];
23 case 2:
24 if (y < 0 || y > 60 || (y & 3) || z < 0 || z >= 4)
25 abort ();
26 #pragma omp atomic
27 arr2[y + z] = arr2[y + z] + 4;
28 return &arr[y + z];
29 case 3:
30 if (z < 0 || z > 60 || (z & 3) || y < 0 || y >= 4)
31 abort ();
32 #pragma omp atomic
33 arr2[y + z] = arr2[y + z] + 16;
34 return &arr[y + z];
35 case 4:
36 if (y != 0 || z > 64 || z <= 0)
37 abort ();
38 #pragma omp atomic
39 arr2[z - 1] = arr2[z - 1] + 64;
40 return &arr[z - 1];
41 case 5:
42 if ((y & 3) != 0 || y < 64 || y >= 96
43 || (z & 127) != 0 || z < 512 || z >= 1024)
44 abort ();
45 y = (y - 64) + (z - 512) / 128;
46 #pragma omp atomic
47 arr2[y] = arr2[y] + 256;
48 return &arr[y];
49 case 6:
50 if ((y & 3) != 0 || y <= 64 || y > 96
51 || (z & 127) != 1 || z <= 513 || z > 1025)
52 abort ();
53 y = (y - 68) + (z - 641) / 128;
54 #pragma omp atomic
55 arr2[y] = arr2[y] + 1024;
56 return &arr[y];
57 default:
58 abort ();
62 volatile int beg, end, step, step2;
63 volatile unsigned int begu, endu;
65 int
66 main ()
68 int m;
69 beg = 60;
70 end = -4;
71 step = -4;
72 step2 = 4;
73 begu = -64U;
74 endu = -32U;
75 #pragma omp parallel
76 #pragma omp master
78 int i;
79 for (i = 0; i < 64; i++)
80 #pragma omp task depend (iterator (j=i:i+1) , out : foo (1, j, 0)[0])
81 arr[i] = i;
82 #pragma omp task depend (iterator (int k=beg:end:step,long int l=0:4:1) , inout : \
83 foo (2, k, l)[0], foo (3, l, k)[0]) private (i)
84 for (i = 0; i < 64; i++)
85 if (arr[i] != i)
86 abort ();
87 else
88 arr[i] = arr[i] + 1;
89 #pragma omp task depend (iterator (int *p=&arr3[64]:&arr3[0]:-1) , inout : \
90 foo (4, 0, p - &arr3[0])[0]) depend (in : beg)
91 for (i = 0; i < 64; i++)
92 if (arr[i] != i + 1)
93 abort ();
94 else
95 arr[i] = arr[i] + 2;
96 #pragma omp task depend (iterator (unsigned n=begu:endu:step2, unsigned int o = 512: 1024U: (unsigned char) 128), inout : \
97 foo (5, n + 128, o)[0])
98 for (i = 0; i < 64; i++)
99 if (arr[i] != i + 3)
100 abort ();
101 else
102 arr[i] = arr[i] + 4;
103 #pragma omp task depend (iterator (int unsigned p=endu:begu:step,unsigned q= 1025U:513U:(signed char) -128), in : \
104 foo (6, p + 128, q)[0])
105 for (i = 0; i < 64; i++)
106 if (arr[i] != i + 7)
107 abort ();
108 else
109 arr[i] = arr[i] + 8;
111 for (m = 0; m < 64; m++)
112 if (arr[m] != m + 15 || arr2[m] != (m < 32 ? 1365 : 85))
113 abort ();
114 return 0;