xref: /openbsd-src/gnu/gcc/libgomp/testsuite/libgomp.fortran/do2.f90 (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
1*404b540aSrobert! { dg-do run }
2*404b540aSrobert
3*404b540aSrobert  integer, dimension (128) :: a, b
4*404b540aSrobert  integer :: i, j
5*404b540aSrobert  logical :: k
6*404b540aSrobert  a = -1
7*404b540aSrobert  b = -1
8*404b540aSrobert  do i = 1, 128
9*404b540aSrobert    if (i .ge. 8 .and. i .le. 15) then
10*404b540aSrobert      b(i) = 1 * 256 + i
11*404b540aSrobert    else if (i .ge. 19 .and. i .le. 23) then
12*404b540aSrobert      b(i) = 2 * 256 + i
13*404b540aSrobert    else if (i .ge. 28 .and. i .le. 38) then
14*404b540aSrobert      if (iand (i, 1) .eq. 0) b(i) = 3 * 256 + i
15*404b540aSrobert    else if (i .ge. 59 .and. i .le. 79) then
16*404b540aSrobert      if (iand (i - 59, 3) .eq. 0) b(i) = 4 * 256 + i
17*404b540aSrobert    else if (i .ge. 101 .and. i .le. 125) then
18*404b540aSrobert      if (mod (i - 101, 12) .eq. 0) b(i) = 5 * 256 + i
19*404b540aSrobert    end if
20*404b540aSrobert  end do
21*404b540aSrobert
22*404b540aSrobert  k = .false.
23*404b540aSrobert  j = 8
24*404b540aSrobert!$omp parallel num_threads (4)
25*404b540aSrobert
26*404b540aSrobert!$omp do ordered
27*404b540aSrobert  do i = 8, 15
28*404b540aSrobert    a(i) = 1 * 256 + i
29*404b540aSrobert!$omp ordered
30*404b540aSrobert    if (i .ne. j) k = .true.
31*404b540aSrobert    j = j + 1
32*404b540aSrobert!$omp end ordered
33*404b540aSrobert  end do
34*404b540aSrobert
35*404b540aSrobert!$omp single
36*404b540aSrobert  j = 23
37*404b540aSrobert!$omp end single
38*404b540aSrobert
39*404b540aSrobert!$omp do ordered
40*404b540aSrobert  do i = 23, 19, -1
41*404b540aSrobert    a(i) = 2 * 256 + i
42*404b540aSrobert!$omp ordered
43*404b540aSrobert    if (i .ne. j) k = .true.
44*404b540aSrobert    j = j - 1
45*404b540aSrobert!$omp end ordered
46*404b540aSrobert  end do
47*404b540aSrobert
48*404b540aSrobert!$omp single
49*404b540aSrobert  j = 28
50*404b540aSrobert!$omp end single
51*404b540aSrobert
52*404b540aSrobert!$omp do ordered
53*404b540aSrobert  do i = 28, 39, 2
54*404b540aSrobert    a(i) = 3 * 256 + i
55*404b540aSrobert!$omp ordered
56*404b540aSrobert    if (i .ne. j) k = .true.
57*404b540aSrobert    j = j + 2
58*404b540aSrobert!$omp end ordered
59*404b540aSrobert  end do
60*404b540aSrobert
61*404b540aSrobert!$omp single
62*404b540aSrobert  j = 79
63*404b540aSrobert!$omp end single
64*404b540aSrobert
65*404b540aSrobert!$omp do ordered
66*404b540aSrobert  do i = 79, 59, -4
67*404b540aSrobert    a(i) = 4 * 256 + i
68*404b540aSrobert!$omp ordered
69*404b540aSrobert    if (i .ne. j) k = .true.
70*404b540aSrobert    j = j - 4
71*404b540aSrobert!$omp end ordered
72*404b540aSrobert  end do
73*404b540aSrobert
74*404b540aSrobert!$omp single
75*404b540aSrobert  j = 125
76*404b540aSrobert!$omp end single
77*404b540aSrobert
78*404b540aSrobert!$omp do ordered
79*404b540aSrobert  do i = 125, 90, -12
80*404b540aSrobert    a(i) = 5 * 256 + i
81*404b540aSrobert!$omp ordered
82*404b540aSrobert    if (i .ne. j) k = .true.
83*404b540aSrobert    j = j - 12
84*404b540aSrobert!$omp end ordered
85*404b540aSrobert  end do
86*404b540aSrobert
87*404b540aSrobert!$omp end parallel
88*404b540aSrobert
89*404b540aSrobert  if (any (a .ne. b) .or. k) call abort
90*404b540aSrobert  a = -1
91*404b540aSrobert  k = .false.
92*404b540aSrobert  j = 8
93*404b540aSrobert!$omp parallel num_threads (4)
94*404b540aSrobert
95*404b540aSrobert!$omp do ordered schedule (static)
96*404b540aSrobert  do i = 8, 15
97*404b540aSrobert    a(i) = 1 * 256 + i
98*404b540aSrobert!$omp ordered
99*404b540aSrobert    if (i .ne. j) k = .true.
100*404b540aSrobert    j = j + 1
101*404b540aSrobert!$omp end ordered
102*404b540aSrobert  end do
103*404b540aSrobert
104*404b540aSrobert!$omp single
105*404b540aSrobert  j = 23
106*404b540aSrobert!$omp end single
107*404b540aSrobert
108*404b540aSrobert!$omp do ordered schedule (static, 1)
109*404b540aSrobert  do i = 23, 19, -1
110*404b540aSrobert    a(i) = 2 * 256 + i
111*404b540aSrobert!$omp ordered
112*404b540aSrobert    if (i .ne. j) k = .true.
113*404b540aSrobert    j = j - 1
114*404b540aSrobert!$omp end ordered
115*404b540aSrobert  end do
116*404b540aSrobert
117*404b540aSrobert!$omp single
118*404b540aSrobert  j = 28
119*404b540aSrobert!$omp end single
120*404b540aSrobert
121*404b540aSrobert!$omp do ordered schedule (static, 3)
122*404b540aSrobert  do i = 28, 39, 2
123*404b540aSrobert    a(i) = 3 * 256 + i
124*404b540aSrobert!$omp ordered
125*404b540aSrobert    if (i .ne. j) k = .true.
126*404b540aSrobert    j = j + 2
127*404b540aSrobert!$omp end ordered
128*404b540aSrobert  end do
129*404b540aSrobert
130*404b540aSrobert!$omp single
131*404b540aSrobert  j = 79
132*404b540aSrobert!$omp end single
133*404b540aSrobert
134*404b540aSrobert!$omp do ordered schedule (static, 6)
135*404b540aSrobert  do i = 79, 59, -4
136*404b540aSrobert    a(i) = 4 * 256 + i
137*404b540aSrobert!$omp ordered
138*404b540aSrobert    if (i .ne. j) k = .true.
139*404b540aSrobert    j = j - 4
140*404b540aSrobert!$omp end ordered
141*404b540aSrobert  end do
142*404b540aSrobert
143*404b540aSrobert!$omp single
144*404b540aSrobert  j = 125
145*404b540aSrobert!$omp end single
146*404b540aSrobert
147*404b540aSrobert!$omp do ordered schedule (static, 2)
148*404b540aSrobert  do i = 125, 90, -12
149*404b540aSrobert    a(i) = 5 * 256 + i
150*404b540aSrobert!$omp ordered
151*404b540aSrobert    if (i .ne. j) k = .true.
152*404b540aSrobert    j = j - 12
153*404b540aSrobert!$omp end ordered
154*404b540aSrobert  end do
155*404b540aSrobert
156*404b540aSrobert!$omp end parallel
157*404b540aSrobert
158*404b540aSrobert  if (any (a .ne. b) .or. k) call abort
159*404b540aSrobert  a = -1
160*404b540aSrobert  k = .false.
161*404b540aSrobert  j = 8
162*404b540aSrobert!$omp parallel num_threads (4)
163*404b540aSrobert
164*404b540aSrobert!$omp do ordered schedule (dynamic)
165*404b540aSrobert  do i = 8, 15
166*404b540aSrobert    a(i) = 1 * 256 + i
167*404b540aSrobert!$omp ordered
168*404b540aSrobert    if (i .ne. j) k = .true.
169*404b540aSrobert    j = j + 1
170*404b540aSrobert!$omp end ordered
171*404b540aSrobert  end do
172*404b540aSrobert
173*404b540aSrobert!$omp single
174*404b540aSrobert  j = 23
175*404b540aSrobert!$omp end single
176*404b540aSrobert
177*404b540aSrobert!$omp do ordered schedule (dynamic, 4)
178*404b540aSrobert  do i = 23, 19, -1
179*404b540aSrobert    a(i) = 2 * 256 + i
180*404b540aSrobert!$omp ordered
181*404b540aSrobert    if (i .ne. j) k = .true.
182*404b540aSrobert    j = j - 1
183*404b540aSrobert!$omp end ordered
184*404b540aSrobert  end do
185*404b540aSrobert
186*404b540aSrobert!$omp single
187*404b540aSrobert  j = 28
188*404b540aSrobert!$omp end single
189*404b540aSrobert
190*404b540aSrobert!$omp do ordered schedule (dynamic, 1)
191*404b540aSrobert  do i = 28, 39, 2
192*404b540aSrobert    a(i) = 3 * 256 + i
193*404b540aSrobert!$omp ordered
194*404b540aSrobert    if (i .ne. j) k = .true.
195*404b540aSrobert    j = j + 2
196*404b540aSrobert!$omp end ordered
197*404b540aSrobert  end do
198*404b540aSrobert
199*404b540aSrobert!$omp single
200*404b540aSrobert  j = 79
201*404b540aSrobert!$omp end single
202*404b540aSrobert
203*404b540aSrobert!$omp do ordered schedule (dynamic, 2)
204*404b540aSrobert  do i = 79, 59, -4
205*404b540aSrobert    a(i) = 4 * 256 + i
206*404b540aSrobert!$omp ordered
207*404b540aSrobert    if (i .ne. j) k = .true.
208*404b540aSrobert    j = j - 4
209*404b540aSrobert!$omp end ordered
210*404b540aSrobert  end do
211*404b540aSrobert
212*404b540aSrobert!$omp single
213*404b540aSrobert  j = 125
214*404b540aSrobert!$omp end single
215*404b540aSrobert
216*404b540aSrobert!$omp do ordered schedule (dynamic, 3)
217*404b540aSrobert  do i = 125, 90, -12
218*404b540aSrobert    a(i) = 5 * 256 + i
219*404b540aSrobert!$omp ordered
220*404b540aSrobert    if (i .ne. j) k = .true.
221*404b540aSrobert    j = j - 12
222*404b540aSrobert!$omp end ordered
223*404b540aSrobert  end do
224*404b540aSrobert
225*404b540aSrobert!$omp end parallel
226*404b540aSrobert
227*404b540aSrobert  if (any (a .ne. b) .or. k) call abort
228*404b540aSrobert  a = -1
229*404b540aSrobert  k = .false.
230*404b540aSrobert  j = 8
231*404b540aSrobert!$omp parallel num_threads (4)
232*404b540aSrobert
233*404b540aSrobert!$omp do ordered schedule (guided)
234*404b540aSrobert  do i = 8, 15
235*404b540aSrobert    a(i) = 1 * 256 + i
236*404b540aSrobert!$omp ordered
237*404b540aSrobert    if (i .ne. j) k = .true.
238*404b540aSrobert    j = j + 1
239*404b540aSrobert!$omp end ordered
240*404b540aSrobert  end do
241*404b540aSrobert
242*404b540aSrobert!$omp single
243*404b540aSrobert  j = 23
244*404b540aSrobert!$omp end single
245*404b540aSrobert
246*404b540aSrobert!$omp do ordered schedule (guided, 4)
247*404b540aSrobert  do i = 23, 19, -1
248*404b540aSrobert    a(i) = 2 * 256 + i
249*404b540aSrobert!$omp ordered
250*404b540aSrobert    if (i .ne. j) k = .true.
251*404b540aSrobert    j = j - 1
252*404b540aSrobert!$omp end ordered
253*404b540aSrobert  end do
254*404b540aSrobert
255*404b540aSrobert!$omp single
256*404b540aSrobert  j = 28
257*404b540aSrobert!$omp end single
258*404b540aSrobert
259*404b540aSrobert!$omp do ordered schedule (guided, 1)
260*404b540aSrobert  do i = 28, 39, 2
261*404b540aSrobert    a(i) = 3 * 256 + i
262*404b540aSrobert!$omp ordered
263*404b540aSrobert    if (i .ne. j) k = .true.
264*404b540aSrobert    j = j + 2
265*404b540aSrobert!$omp end ordered
266*404b540aSrobert  end do
267*404b540aSrobert
268*404b540aSrobert!$omp single
269*404b540aSrobert  j = 79
270*404b540aSrobert!$omp end single
271*404b540aSrobert
272*404b540aSrobert!$omp do ordered schedule (guided, 2)
273*404b540aSrobert  do i = 79, 59, -4
274*404b540aSrobert    a(i) = 4 * 256 + i
275*404b540aSrobert!$omp ordered
276*404b540aSrobert    if (i .ne. j) k = .true.
277*404b540aSrobert    j = j - 4
278*404b540aSrobert!$omp end ordered
279*404b540aSrobert  end do
280*404b540aSrobert
281*404b540aSrobert!$omp single
282*404b540aSrobert  j = 125
283*404b540aSrobert!$omp end single
284*404b540aSrobert
285*404b540aSrobert!$omp do ordered schedule (guided, 3)
286*404b540aSrobert  do i = 125, 90, -12
287*404b540aSrobert    a(i) = 5 * 256 + i
288*404b540aSrobert!$omp ordered
289*404b540aSrobert    if (i .ne. j) k = .true.
290*404b540aSrobert    j = j - 12
291*404b540aSrobert!$omp end ordered
292*404b540aSrobert  end do
293*404b540aSrobert
294*404b540aSrobert!$omp end parallel
295*404b540aSrobert
296*404b540aSrobert  if (any (a .ne. b) .or. k) call abort
297*404b540aSrobert  a = -1
298*404b540aSrobert  k = .false.
299*404b540aSrobert  j = 8
300*404b540aSrobert!$omp parallel num_threads (4)
301*404b540aSrobert
302*404b540aSrobert!$omp do ordered schedule (runtime)
303*404b540aSrobert  do i = 8, 15
304*404b540aSrobert    a(i) = 1 * 256 + i
305*404b540aSrobert!$omp ordered
306*404b540aSrobert    if (i .ne. j) k = .true.
307*404b540aSrobert    j = j + 1
308*404b540aSrobert!$omp end ordered
309*404b540aSrobert  end do
310*404b540aSrobert
311*404b540aSrobert!$omp single
312*404b540aSrobert  j = 23
313*404b540aSrobert!$omp end single
314*404b540aSrobert
315*404b540aSrobert!$omp do ordered schedule (runtime)
316*404b540aSrobert  do i = 23, 19, -1
317*404b540aSrobert    a(i) = 2 * 256 + i
318*404b540aSrobert!$omp ordered
319*404b540aSrobert    if (i .ne. j) k = .true.
320*404b540aSrobert    j = j - 1
321*404b540aSrobert!$omp end ordered
322*404b540aSrobert  end do
323*404b540aSrobert
324*404b540aSrobert!$omp single
325*404b540aSrobert  j = 28
326*404b540aSrobert!$omp end single
327*404b540aSrobert
328*404b540aSrobert!$omp do ordered schedule (runtime)
329*404b540aSrobert  do i = 28, 39, 2
330*404b540aSrobert    a(i) = 3 * 256 + i
331*404b540aSrobert!$omp ordered
332*404b540aSrobert    if (i .ne. j) k = .true.
333*404b540aSrobert    j = j + 2
334*404b540aSrobert!$omp end ordered
335*404b540aSrobert  end do
336*404b540aSrobert
337*404b540aSrobert!$omp single
338*404b540aSrobert  j = 79
339*404b540aSrobert!$omp end single
340*404b540aSrobert
341*404b540aSrobert!$omp do ordered schedule (runtime)
342*404b540aSrobert  do i = 79, 59, -4
343*404b540aSrobert    a(i) = 4 * 256 + i
344*404b540aSrobert!$omp ordered
345*404b540aSrobert    if (i .ne. j) k = .true.
346*404b540aSrobert    j = j - 4
347*404b540aSrobert!$omp end ordered
348*404b540aSrobert  end do
349*404b540aSrobert
350*404b540aSrobert!$omp single
351*404b540aSrobert  j = 125
352*404b540aSrobert!$omp end single
353*404b540aSrobert
354*404b540aSrobert!$omp do ordered schedule (runtime)
355*404b540aSrobert  do i = 125, 90, -12
356*404b540aSrobert    a(i) = 5 * 256 + i
357*404b540aSrobert!$omp ordered
358*404b540aSrobert    if (i .ne. j) k = .true.
359*404b540aSrobert    j = j - 12
360*404b540aSrobert!$omp end ordered
361*404b540aSrobert  end do
362*404b540aSrobert
363*404b540aSrobert!$omp end parallel
364*404b540aSrobert
365*404b540aSrobert  if (any (a .ne. b) .or. k) call abort
366*404b540aSrobertend
367