Mercurial > hg > CbC > CbC_gcc
comparison libgomp/testsuite/libgomp.c/loop-12.c @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* { dg-do run } */ | |
2 | |
3 #include <omp.h> | |
4 | |
5 extern void abort (void); | |
6 | |
7 #define LLONG_MAX __LONG_LONG_MAX__ | |
8 #define ULLONG_MAX (LLONG_MAX * 2ULL + 1) | |
9 #define INT_MAX __INT_MAX__ | |
10 | |
11 int arr[6 * 5]; | |
12 | |
13 void | |
14 set (int loopidx, int idx) | |
15 { | |
16 #pragma omp atomic | |
17 arr[loopidx * 5 + idx]++; | |
18 } | |
19 | |
20 #define check(var, val, loopidx, idx) \ | |
21 if (var == (val)) set (loopidx, idx); else | |
22 #define test(loopidx, count) \ | |
23 for (idx = 0; idx < 5; idx++) \ | |
24 if (arr[loopidx * 5 + idx] != idx < count) \ | |
25 abort (); \ | |
26 else \ | |
27 arr[loopidx * 5 + idx] = 0 | |
28 | |
29 int | |
30 test1 (void) | |
31 { | |
32 int e = 0, idx; | |
33 | |
34 #pragma omp parallel reduction(+:e) | |
35 { | |
36 long long i; | |
37 unsigned long long j; | |
38 #pragma omp for schedule(dynamic,1) nowait | |
39 for (i = LLONG_MAX - 30001; LLONG_MAX - 10001 >= i; i += 10000) | |
40 { | |
41 check (i, LLONG_MAX - 30001, 0, 0) | |
42 check (i, LLONG_MAX - 20001, 0, 1) | |
43 check (i, LLONG_MAX - 10001, 0, 2) | |
44 e = 1; | |
45 } | |
46 #pragma omp for schedule(dynamic,1) nowait | |
47 for (i = -LLONG_MAX + 30000; -LLONG_MAX + 10000 <= i; i -= 10000) | |
48 { | |
49 check (i, -LLONG_MAX + 30000, 1, 0) | |
50 check (i, -LLONG_MAX + 20000, 1, 1) | |
51 check (i, -LLONG_MAX + 10000, 1, 2) | |
52 e = 1; | |
53 } | |
54 #pragma omp for schedule(dynamic,1) nowait | |
55 for (j = 20; LLONG_MAX - 70 >= j; j += LLONG_MAX + 50ULL) | |
56 { | |
57 check (j, 20, 2, 0) | |
58 e = 1; | |
59 } | |
60 #pragma omp for schedule(dynamic,1) nowait | |
61 for (j = ULLONG_MAX - 3; LLONG_MAX + 70ULL <= j; j -= LLONG_MAX + 50ULL) | |
62 { | |
63 check (j, ULLONG_MAX - 3, 3, 0) | |
64 e = 1; | |
65 } | |
66 #pragma omp for schedule(dynamic,1) nowait | |
67 for (j = LLONG_MAX - 20000ULL; LLONG_MAX + 10000ULL >= j; j += 10000ULL) | |
68 { | |
69 check (j, LLONG_MAX - 20000ULL, 4, 0) | |
70 check (j, LLONG_MAX - 10000ULL, 4, 1) | |
71 check (j, LLONG_MAX, 4, 2) | |
72 check (j, LLONG_MAX + 10000ULL, 4, 3) | |
73 e = 1; | |
74 } | |
75 #pragma omp for schedule(dynamic,1) nowait | |
76 for (i = -3LL * INT_MAX - 20000LL; INT_MAX + 10000LL >= i; i += INT_MAX + 200LL) | |
77 { | |
78 check (i, -3LL * INT_MAX - 20000LL, 5, 0) | |
79 check (i, -2LL * INT_MAX - 20000LL + 200LL, 5, 1) | |
80 check (i, -INT_MAX - 20000LL + 400LL, 5, 2) | |
81 check (i, -20000LL + 600LL, 5, 3) | |
82 check (i, INT_MAX - 20000LL + 800LL, 5, 4) | |
83 e = 1; | |
84 } | |
85 } | |
86 if (e) | |
87 abort (); | |
88 test (0, 3); | |
89 test (1, 3); | |
90 test (2, 1); | |
91 test (3, 1); | |
92 test (4, 4); | |
93 test (5, 5); | |
94 return 0; | |
95 } | |
96 | |
97 int | |
98 test2 (void) | |
99 { | |
100 int e = 0, idx; | |
101 | |
102 #pragma omp parallel reduction(+:e) | |
103 { | |
104 long long i; | |
105 unsigned long long j; | |
106 #pragma omp for schedule(guided,1) nowait | |
107 for (i = LLONG_MAX - 30001; LLONG_MAX - 10001 >= i; i += 10000) | |
108 { | |
109 check (i, LLONG_MAX - 30001, 0, 0) | |
110 check (i, LLONG_MAX - 20001, 0, 1) | |
111 check (i, LLONG_MAX - 10001, 0, 2) | |
112 e = 1; | |
113 } | |
114 #pragma omp for schedule(guided,1) nowait | |
115 for (i = -LLONG_MAX + 30000; -LLONG_MAX + 10000 <= i; i -= 10000) | |
116 { | |
117 check (i, -LLONG_MAX + 30000, 1, 0) | |
118 check (i, -LLONG_MAX + 20000, 1, 1) | |
119 check (i, -LLONG_MAX + 10000, 1, 2) | |
120 e = 1; | |
121 } | |
122 #pragma omp for schedule(guided,1) nowait | |
123 for (j = 20; LLONG_MAX - 70 >= j; j += LLONG_MAX + 50ULL) | |
124 { | |
125 check (j, 20, 2, 0) | |
126 e = 1; | |
127 } | |
128 #pragma omp for schedule(guided,1) nowait | |
129 for (j = ULLONG_MAX - 3; LLONG_MAX + 70ULL <= j; j -= LLONG_MAX + 50ULL) | |
130 { | |
131 check (j, ULLONG_MAX - 3, 3, 0) | |
132 e = 1; | |
133 } | |
134 #pragma omp for schedule(guided,1) nowait | |
135 for (j = LLONG_MAX - 20000ULL; LLONG_MAX + 10000ULL >= j; j += 10000ULL) | |
136 { | |
137 check (j, LLONG_MAX - 20000ULL, 4, 0) | |
138 check (j, LLONG_MAX - 10000ULL, 4, 1) | |
139 check (j, LLONG_MAX, 4, 2) | |
140 check (j, LLONG_MAX + 10000ULL, 4, 3) | |
141 e = 1; | |
142 } | |
143 #pragma omp for schedule(guided,1) nowait | |
144 for (i = -3LL * INT_MAX - 20000LL; INT_MAX + 10000LL >= i; i += INT_MAX + 200LL) | |
145 { | |
146 check (i, -3LL * INT_MAX - 20000LL, 5, 0) | |
147 check (i, -2LL * INT_MAX - 20000LL + 200LL, 5, 1) | |
148 check (i, -INT_MAX - 20000LL + 400LL, 5, 2) | |
149 check (i, -20000LL + 600LL, 5, 3) | |
150 check (i, INT_MAX - 20000LL + 800LL, 5, 4) | |
151 e = 1; | |
152 } | |
153 } | |
154 if (e) | |
155 abort (); | |
156 test (0, 3); | |
157 test (1, 3); | |
158 test (2, 1); | |
159 test (3, 1); | |
160 test (4, 4); | |
161 test (5, 5); | |
162 return 0; | |
163 } | |
164 | |
165 int | |
166 test3 (void) | |
167 { | |
168 int e = 0, idx; | |
169 | |
170 #pragma omp parallel reduction(+:e) | |
171 { | |
172 long long i; | |
173 unsigned long long j; | |
174 #pragma omp for schedule(static) nowait | |
175 for (i = LLONG_MAX - 30001; LLONG_MAX - 10001 >= i; i += 10000) | |
176 { | |
177 check (i, LLONG_MAX - 30001, 0, 0) | |
178 check (i, LLONG_MAX - 20001, 0, 1) | |
179 check (i, LLONG_MAX - 10001, 0, 2) | |
180 e = 1; | |
181 } | |
182 #pragma omp for schedule(static) nowait | |
183 for (i = -LLONG_MAX + 30000; -LLONG_MAX + 10000 <= i; i -= 10000) | |
184 { | |
185 check (i, -LLONG_MAX + 30000, 1, 0) | |
186 check (i, -LLONG_MAX + 20000, 1, 1) | |
187 check (i, -LLONG_MAX + 10000, 1, 2) | |
188 e = 1; | |
189 } | |
190 #pragma omp for schedule(static) nowait | |
191 for (j = 20; LLONG_MAX - 70 >= j; j += LLONG_MAX + 50ULL) | |
192 { | |
193 check (j, 20, 2, 0) | |
194 e = 1; | |
195 } | |
196 #pragma omp for schedule(static) nowait | |
197 for (j = ULLONG_MAX - 3; LLONG_MAX + 70ULL <= j; j -= LLONG_MAX + 50ULL) | |
198 { | |
199 check (j, ULLONG_MAX - 3, 3, 0) | |
200 e = 1; | |
201 } | |
202 #pragma omp for schedule(static) nowait | |
203 for (j = LLONG_MAX - 20000ULL; LLONG_MAX + 10000ULL >= j; j += 10000ULL) | |
204 { | |
205 check (j, LLONG_MAX - 20000ULL, 4, 0) | |
206 check (j, LLONG_MAX - 10000ULL, 4, 1) | |
207 check (j, LLONG_MAX, 4, 2) | |
208 check (j, LLONG_MAX + 10000ULL, 4, 3) | |
209 e = 1; | |
210 } | |
211 #pragma omp for schedule(static) nowait | |
212 for (i = -3LL * INT_MAX - 20000LL; INT_MAX + 10000LL >= i; i += INT_MAX + 200LL) | |
213 { | |
214 check (i, -3LL * INT_MAX - 20000LL, 5, 0) | |
215 check (i, -2LL * INT_MAX - 20000LL + 200LL, 5, 1) | |
216 check (i, -INT_MAX - 20000LL + 400LL, 5, 2) | |
217 check (i, -20000LL + 600LL, 5, 3) | |
218 check (i, INT_MAX - 20000LL + 800LL, 5, 4) | |
219 e = 1; | |
220 } | |
221 } | |
222 if (e) | |
223 abort (); | |
224 test (0, 3); | |
225 test (1, 3); | |
226 test (2, 1); | |
227 test (3, 1); | |
228 test (4, 4); | |
229 test (5, 5); | |
230 return 0; | |
231 } | |
232 | |
233 int | |
234 test4 (void) | |
235 { | |
236 int e = 0, idx; | |
237 | |
238 #pragma omp parallel reduction(+:e) | |
239 { | |
240 long long i; | |
241 unsigned long long j; | |
242 #pragma omp for schedule(static,1) nowait | |
243 for (i = LLONG_MAX - 30001; LLONG_MAX - 10001 >= i; i += 10000) | |
244 { | |
245 check (i, LLONG_MAX - 30001, 0, 0) | |
246 check (i, LLONG_MAX - 20001, 0, 1) | |
247 check (i, LLONG_MAX - 10001, 0, 2) | |
248 e = 1; | |
249 } | |
250 #pragma omp for schedule(static,1) nowait | |
251 for (i = -LLONG_MAX + 30000; -LLONG_MAX + 10000 <= i; i -= 10000) | |
252 { | |
253 check (i, -LLONG_MAX + 30000, 1, 0) | |
254 check (i, -LLONG_MAX + 20000, 1, 1) | |
255 check (i, -LLONG_MAX + 10000, 1, 2) | |
256 e = 1; | |
257 } | |
258 #pragma omp for schedule(static,1) nowait | |
259 for (j = 20; LLONG_MAX - 70 >= j; j += LLONG_MAX + 50ULL) | |
260 { | |
261 check (j, 20, 2, 0) | |
262 e = 1; | |
263 } | |
264 #pragma omp for schedule(static,1) nowait | |
265 for (j = ULLONG_MAX - 3; LLONG_MAX + 70ULL <= j; j -= LLONG_MAX + 50ULL) | |
266 { | |
267 check (j, ULLONG_MAX - 3, 3, 0) | |
268 e = 1; | |
269 } | |
270 #pragma omp for schedule(static,1) nowait | |
271 for (j = LLONG_MAX - 20000ULL; LLONG_MAX + 10000ULL >= j; j += 10000ULL) | |
272 { | |
273 check (j, LLONG_MAX - 20000ULL, 4, 0) | |
274 check (j, LLONG_MAX - 10000ULL, 4, 1) | |
275 check (j, LLONG_MAX, 4, 2) | |
276 check (j, LLONG_MAX + 10000ULL, 4, 3) | |
277 e = 1; | |
278 } | |
279 #pragma omp for schedule(static,1) nowait | |
280 for (i = -3LL * INT_MAX - 20000LL; INT_MAX + 10000LL >= i; i += INT_MAX + 200LL) | |
281 { | |
282 check (i, -3LL * INT_MAX - 20000LL, 5, 0) | |
283 check (i, -2LL * INT_MAX - 20000LL + 200LL, 5, 1) | |
284 check (i, -INT_MAX - 20000LL + 400LL, 5, 2) | |
285 check (i, -20000LL + 600LL, 5, 3) | |
286 check (i, INT_MAX - 20000LL + 800LL, 5, 4) | |
287 e = 1; | |
288 } | |
289 } | |
290 if (e) | |
291 abort (); | |
292 test (0, 3); | |
293 test (1, 3); | |
294 test (2, 1); | |
295 test (3, 1); | |
296 test (4, 4); | |
297 test (5, 5); | |
298 return 0; | |
299 } | |
300 | |
301 int | |
302 test5 (void) | |
303 { | |
304 int e = 0, idx; | |
305 | |
306 #pragma omp parallel reduction(+:e) | |
307 { | |
308 long long i; | |
309 unsigned long long j; | |
310 #pragma omp for schedule(runtime) nowait | |
311 for (i = LLONG_MAX - 30001; LLONG_MAX - 10001 >= i; i += 10000) | |
312 { | |
313 check (i, LLONG_MAX - 30001, 0, 0) | |
314 check (i, LLONG_MAX - 20001, 0, 1) | |
315 check (i, LLONG_MAX - 10001, 0, 2) | |
316 e = 1; | |
317 } | |
318 #pragma omp for schedule(runtime) nowait | |
319 for (i = -LLONG_MAX + 30000; -LLONG_MAX + 10000 <= i; i -= 10000) | |
320 { | |
321 check (i, -LLONG_MAX + 30000, 1, 0) | |
322 check (i, -LLONG_MAX + 20000, 1, 1) | |
323 check (i, -LLONG_MAX + 10000, 1, 2) | |
324 e = 1; | |
325 } | |
326 #pragma omp for schedule(runtime) nowait | |
327 for (j = 20; LLONG_MAX - 70 >= j; j += LLONG_MAX + 50ULL) | |
328 { | |
329 check (j, 20, 2, 0) | |
330 e = 1; | |
331 } | |
332 #pragma omp for schedule(runtime) nowait | |
333 for (j = ULLONG_MAX - 3; LLONG_MAX + 70ULL <= j; j -= LLONG_MAX + 50ULL) | |
334 { | |
335 check (j, ULLONG_MAX - 3, 3, 0) | |
336 e = 1; | |
337 } | |
338 #pragma omp for schedule(runtime) nowait | |
339 for (j = LLONG_MAX - 20000ULL; LLONG_MAX + 10000ULL >= j; j += 10000ULL) | |
340 { | |
341 check (j, LLONG_MAX - 20000ULL, 4, 0) | |
342 check (j, LLONG_MAX - 10000ULL, 4, 1) | |
343 check (j, LLONG_MAX, 4, 2) | |
344 check (j, LLONG_MAX + 10000ULL, 4, 3) | |
345 e = 1; | |
346 } | |
347 #pragma omp for schedule(runtime) nowait | |
348 for (i = -3LL * INT_MAX - 20000LL; INT_MAX + 10000LL >= i; i += INT_MAX + 200LL) | |
349 { | |
350 check (i, -3LL * INT_MAX - 20000LL, 5, 0) | |
351 check (i, -2LL * INT_MAX - 20000LL + 200LL, 5, 1) | |
352 check (i, -INT_MAX - 20000LL + 400LL, 5, 2) | |
353 check (i, -20000LL + 600LL, 5, 3) | |
354 check (i, INT_MAX - 20000LL + 800LL, 5, 4) | |
355 e = 1; | |
356 } | |
357 } | |
358 if (e) | |
359 abort (); | |
360 test (0, 3); | |
361 test (1, 3); | |
362 test (2, 1); | |
363 test (3, 1); | |
364 test (4, 4); | |
365 test (5, 5); | |
366 return 0; | |
367 } | |
368 | |
369 int | |
370 main (void) | |
371 { | |
372 if (2 * sizeof (int) != sizeof (long long)) | |
373 return 0; | |
374 test1 (); | |
375 test2 (); | |
376 test3 (); | |
377 test4 (); | |
378 omp_set_schedule (omp_sched_static, 0); | |
379 test5 (); | |
380 omp_set_schedule (omp_sched_static, 3); | |
381 test5 (); | |
382 omp_set_schedule (omp_sched_dynamic, 5); | |
383 test5 (); | |
384 omp_set_schedule (omp_sched_guided, 2); | |
385 test5 (); | |
386 return 0; | |
387 } |