1! { dg-do compile }
2! { dg-options "-fopenmp" }
3
4module target1
5  interface
6    subroutine dosomething (a, n, m)
7      integer :: a (:), n, m
8      !$omp declare target
9    end subroutine dosomething
10  end interface
11contains
12  subroutine foo (n, o, p, q, r, pp)
13    integer :: n, o, p, q, r, s, i, j
14    integer :: a (2:o)
15    integer, pointer :: pp
16  !$omp target data device (n + 1) if (n .ne. 6) map (tofrom: n, r)
17    !$omp target device (n + 1) if (n .ne. 6) map (from: n) map (alloc: a(2:o))
18      call dosomething (a, n, 0)
19    !$omp end target
20    !$omp target teams device (n + 1) num_teams (n + 4) thread_limit (n * 2) &
21    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
22    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r)
23      r = r + 1
24      p = q
25      call dosomething (a, n, p + q)
26    !$omp end target teams
27    !$omp target teams distribute device (n + 1) num_teams (n + 4) collapse (2) &
28    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
29    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
30    !$omp & thread_limit (n * 2) dist_schedule (static, 4)
31      do i = 1, 10
32        do j = 1, 10
33          r = r + 1
34          p = q
35          call dosomething (a, n, p + q)
36        end do
37      end do
38    !$omp target teams distribute device (n + 1) num_teams (n + 4) &
39    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
40    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
41    !$omp & thread_limit (n * 2) dist_schedule (static, 4)
42      do i = 1, 10
43        do j = 1, 10
44          r = r + 1
45          p = q
46          call dosomething (a, n, p + q)
47        end do
48      end do
49    !$omp end target teams distribute
50    !$omp target teams distribute parallel do device (n + 1) num_teams (n + 4) &
51    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
52    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
53    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
54    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
55    !$omp & ordered schedule (static, 8)
56      do i = 1, 10
57        do j = 1, 10
58          r = r + 1
59          p = q
60          call dosomething (a, n, p + q)
61	  !$omp ordered
62	    p = q
63	  !$omp end ordered
64	  s = i * 10 + j
65        end do
66      end do
67    !$omp target teams distribute parallel do device (n + 1) num_teams (n + 4) &
68    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
69    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
70    !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
71    !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
72      do i = 1, 10
73        do j = 1, 10
74          r = r + 1
75          p = q
76          call dosomething (a, n, p + q)
77        end do
78        !$omp ordered
79          p = q
80        !$omp end ordered
81	s = i * 10
82      end do
83    !$omp end target teams distribute parallel do
84    !$omp target teams distribute parallel do simd device (n + 1) &
85    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
86    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
87    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
88    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
89    !$omp & schedule (static, 8) num_teams (n + 4) safelen(8)
90      do i = 1, 10
91        do j = 1, 10
92          r = r + 1
93          p = q
94          a(2+i*10+j) = p + q
95	  s = i * 10 + j
96        end do
97      end do
98    !$omp target teams distribute parallel do simd device (n + 1) &
99    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
100    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
101    !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
102    !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
103    !$omp & num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
104      do i = 1, 10
105        r = r + 1
106        p = q
107        a(1+i) = p + q
108	s = i * 10
109      end do
110    !$omp end target teams distribute parallel do simd
111    !$omp target teams distribute simd device (n + 1) &
112    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
113    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
114    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
115    !$omp & lastprivate (s) num_teams (n + 4) safelen(8)
116      do i = 1, 10
117        do j = 1, 10
118          r = r + 1
119          p = q
120          a(2+i*10+j) = p + q
121	  s = i * 10 + j
122        end do
123      end do
124    !$omp target teams distribute simd device (n + 1) &
125    !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
126    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
127    !$omp & thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s) &
128    !$omp & num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
129      do i = 1, 10
130        r = r + 1
131        p = q
132        a(1+i) = p + q
133	s = i * 10
134      end do
135    !$omp end target teams distribute simd
136    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
137    !$omp teams num_teams (n + 4) thread_limit (n * 2) default(shared) &
138    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r)
139      r = r + 1
140      p = q
141      call dosomething (a, n, p + q)
142    !$omp end teams
143    !$omp end target
144    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
145    !$omp teams distribute num_teams (n + 4) collapse (2) default(shared) &
146    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
147    !$omp & thread_limit (n * 2) dist_schedule (static, 4)
148      do i = 1, 10
149        do j = 1, 10
150          r = r + 1
151          p = q
152          call dosomething (a, n, p + q)
153        end do
154      end do
155    !$omp end target
156    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
157    !$omp teams distribute num_teams (n + 4) default(shared) &
158    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
159    !$omp & thread_limit (n * 2) dist_schedule (static, 4)
160      do i = 1, 10
161        do j = 1, 10
162          r = r + 1
163          p = q
164          call dosomething (a, n, p + q)
165        end do
166      end do
167    !$omp end teams distribute
168    !$omp end target
169    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
170    !$omp teams distribute parallel do num_teams (n + 4) &
171    !$omp & if (n .ne. 6) default(shared) ordered schedule (static, 8) &
172    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
173    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
174    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s)
175      do i = 1, 10
176        do j = 1, 10
177          r = r + 1
178          p = q
179          call dosomething (a, n, p + q)
180	  !$omp ordered
181	    p = q
182	  !$omp end ordered
183	  s = i * 10 + j
184        end do
185      end do
186    !$omp end target
187    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
188    !$omp teams distribute parallel do num_teams (n + 4)if(n.ne.6)default(shared)&
189    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
190    !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
191    !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
192      do i = 1, 10
193        do j = 1, 10
194          r = r + 1
195          p = q
196          call dosomething (a, n, p + q)
197        end do
198        !$omp ordered
199          p = q
200        !$omp end ordered
201	s = i * 10
202      end do
203    !$omp end teams distribute parallel do
204    !$omp end target
205    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
206    !$omp teams distribute parallel do simd if(n.ne.6)default(shared)&
207    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
208    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
209    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
210    !$omp & schedule (static, 8) num_teams (n + 4) safelen(8)
211      do i = 1, 10
212        do j = 1, 10
213          r = r + 1
214          p = q
215          a(2+i*10+j) = p + q
216	  s = i * 10 + j
217        end do
218      end do
219    !$omp end target
220    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
221    !$omp teams distribute parallel do simd if (n .ne. 6)default(shared) &
222    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
223    !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
224    !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
225    !$omp & num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
226      do i = 1, 10
227        r = r + 1
228        p = q
229        a(1+i) = p + q
230	s = i * 10
231      end do
232    !$omp end teams distribute parallel do simd
233    !$omp end target
234    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
235    !$omp teams distribute simd default(shared) safelen(8) &
236    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
237    !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
238    !$omp & lastprivate (s) num_teams (n + 4)
239      do i = 1, 10
240        do j = 1, 10
241          r = r + 1
242          p = q
243          a(2+i*10+j) = p + q
244	  s = i * 10 + j
245        end do
246      end do
247    !$omp end target
248    !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
249    !$omp teams distribute simd default(shared) aligned (pp:4) &
250    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
251    !$omp & thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s)
252      do i = 1, 10
253        r = r + 1
254        p = q
255        a(1+i) = p + q
256	s = i * 10
257      end do
258    !$omp end teams distribute simd
259    !$omp end target
260    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
261    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
262    !$omp & default(shared) shared(n) private (p) reduction ( + : r )
263    !$omp distribute collapse (2) firstprivate (q) dist_schedule (static, 4)
264      do i = 1, 10
265        do j = 1, 10
266          r = r + 1
267          p = q
268          call dosomething (a, n, p + q)
269        end do
270      end do
271    !$omp end target teams
272    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
273    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
274    !$omp & default(shared) shared(n) private (p) reduction(+:r)
275    !$omp distribute firstprivate (q) dist_schedule (static, 4)
276      do i = 1, 10
277        do j = 1, 10
278          r = r + 1
279          p = q
280          call dosomething (a, n, p + q)
281        end do
282      end do
283    !$omp end distribute
284    !$omp end target teams
285    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
286    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
287    !$omp & default(shared) shared(n) private (p) reduction(+:r)
288    !$omp distribute parallel do if (n .ne. 6) default(shared) &
289    !$omp & ordered schedule (static, 8) private (p) firstprivate (q) &
290    !$omp & shared(n)reduction(+:r)dist_schedule(static,4)collapse(2)&
291    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s)
292      do i = 1, 10
293        do j = 1, 10
294          r = r + 1
295          p = q
296          call dosomething (a, n, p + q)
297	  !$omp ordered
298	    p = q
299	  !$omp end ordered
300	  s = i * 10 + j
301        end do
302      end do
303    !$omp end target teams
304    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
305    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
306    !$omp & default(shared) shared(n) private (p) reduction(+:r)
307    !$omp distribute parallel do if(n.ne.6)default(shared)&
308    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
309    !$omp & dist_schedule (static, 4) num_threads (n + 4) &
310    !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
311      do i = 1, 10
312        do j = 1, 10
313          r = r + 1
314          p = q
315          call dosomething (a, n, p + q)
316        end do
317        !$omp ordered
318          p = q
319        !$omp end ordered
320	s = i * 10
321      end do
322    !$omp end distribute parallel do
323    !$omp end target teams
324    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
325    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
326    !$omp & default(shared) shared(n) private (p) reduction(+:r)
327    !$omp distribute parallel do simd if(n.ne.6)default(shared)&
328    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
329    !$omp & dist_schedule (static, 4) collapse (2) safelen(8) &
330    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
331    !$omp & schedule (static, 8)
332      do i = 1, 10
333        do j = 1, 10
334          r = r + 1
335          p = q
336          a(2+i*10+j) = p + q
337	  s = i * 10 + j
338        end do
339      end do
340    !$omp end target teams
341    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
342    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
343    !$omp & default(shared) shared(n) private (p) reduction(+:r)
344    !$omp distribute parallel do simd if (n .ne. 6)default(shared) &
345    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
346    !$omp & dist_schedule (static, 4) num_threads (n + 4) &
347    !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
348    !$omp & safelen(16) linear(i:1) aligned (pp:4)
349      do i = 1, 10
350        r = r + 1
351        p = q
352        a(1+i) = p + q
353	s = i * 10
354      end do
355    !$omp end distribute parallel do simd
356    !$omp end target teams
357    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
358    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
359    !$omp & default(shared) shared(n) private (p) reduction(+:r)
360    !$omp distribute simd safelen(8) lastprivate(s) &
361    !$omp & private (p) firstprivate (q) reduction (+: r) &
362    !$omp & dist_schedule (static, 4) collapse (2)
363      do i = 1, 10
364        do j = 1, 10
365          r = r + 1
366          p = q
367          a(2+i*10+j) = p + q
368	  s = i * 10 + j
369        end do
370      end do
371    !$omp end target teams
372    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
373    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
374    !$omp & default(shared) shared(n) private (p) reduction(+:r)
375    !$omp distribute simd aligned (pp:4) &
376    !$omp & private (p) firstprivate (q) reduction (+: r) &
377    !$omp & dist_schedule (static, 4) lastprivate (s)
378      do i = 1, 10
379        r = r + 1
380        p = q
381        a(1+i) = p + q
382	s = i * 10
383      end do
384    !$omp end distribute simd
385    !$omp end target teams
386  !$omp end target data
387  end subroutine
388  subroutine bar (n, o, p, r, pp)
389    integer :: n, o, p, q, r, s, i, j
390    integer :: a (2:o)
391    integer, pointer :: pp
392    common /blk/ i, j, q
393    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
394    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
395    !$omp & default(shared) shared(n) private (p) reduction ( + : r )
396    !$omp distribute collapse (2) firstprivate (q) dist_schedule (static, 4)
397      do i = 1, 10
398        do j = 1, 10
399          r = r + 1
400          p = q
401          call dosomething (a, n, p + q)
402        end do
403      end do
404    !$omp end target teams
405    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
406    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
407    !$omp & default(shared) shared(n) private (p) reduction(+:r)
408    !$omp distribute firstprivate (q) dist_schedule (static, 4)
409      do i = 1, 10
410        do j = 1, 10
411          r = r + 1
412          p = q
413          call dosomething (a, n, p + q)
414        end do
415      end do
416    !$omp end distribute
417    !$omp end target teams
418    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
419    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
420    !$omp & default(shared) shared(n) private (p) reduction(+:r)
421    !$omp distribute parallel do if (n .ne. 6) default(shared) &
422    !$omp & ordered schedule (static, 8) private (p) firstprivate (q) &
423    !$omp & shared(n)reduction(+:r)dist_schedule(static,4)collapse(2)&
424    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s)
425      do i = 1, 10
426        do j = 1, 10
427          r = r + 1
428          p = q
429          call dosomething (a, n, p + q)
430	  !$omp ordered
431	    p = q
432	  !$omp end ordered
433	  s = i * 10 + j
434        end do
435      end do
436    !$omp end target teams
437    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
438    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
439    !$omp & default(shared) shared(n) private (p) reduction(+:r)
440    !$omp distribute parallel do if(n.ne.6)default(shared)&
441    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
442    !$omp & dist_schedule (static, 4) num_threads (n + 4) &
443    !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
444      do i = 1, 10
445        do j = 1, 10
446          r = r + 1
447          p = q
448          call dosomething (a, n, p + q)
449        end do
450        !$omp ordered
451          p = q
452        !$omp end ordered
453	s = i * 10
454      end do
455    !$omp end distribute parallel do
456    !$omp end target teams
457    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
458    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
459    !$omp & default(shared) shared(n) private (p) reduction(+:r)
460    !$omp distribute parallel do simd if(n.ne.6)default(shared)&
461    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
462    !$omp & dist_schedule (static, 4) collapse (2) safelen(8) &
463    !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
464    !$omp & schedule (static, 8)
465      do i = 1, 10
466        do j = 1, 10
467          r = r + 1
468          p = q
469          a(2+i*10+j) = p + q
470	  s = i * 10 + j
471        end do
472      end do
473    !$omp end target teams
474    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
475    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
476    !$omp & default(shared) shared(n) private (p) reduction(+:r)
477    !$omp distribute parallel do simd if (n .ne. 6)default(shared) &
478    !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
479    !$omp & dist_schedule (static, 4) num_threads (n + 4) &
480    !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
481    !$omp & safelen(16) linear(i:1) aligned (pp:4)
482      do i = 1, 10
483        r = r + 1
484        p = q
485        a(1+i) = p + q
486	s = i * 10
487      end do
488    !$omp end distribute parallel do simd
489    !$omp end target teams
490    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
491    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
492    !$omp & default(shared) shared(n) private (p) reduction(+:r)
493    !$omp distribute simd safelen(8) lastprivate(s) &
494    !$omp & private (p) firstprivate (q) reduction (+: r) &
495    !$omp & dist_schedule (static, 4) collapse (2)
496      do i = 1, 10
497        do j = 1, 10
498          r = r + 1
499          p = q
500          a(2+i*10+j) = p + q
501	  s = i * 10 + j
502        end do
503      end do
504    !$omp end target teams
505    !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
506    !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
507    !$omp & default(shared) shared(n) private (p) reduction(+:r)
508    !$omp distribute simd aligned (pp:4) &
509    !$omp & private (p) firstprivate (q) reduction (+: r) &
510    !$omp & dist_schedule (static, 4) lastprivate (s)
511      do i = 1, 10
512        r = r + 1
513        p = q
514        a(1+i) = p + q
515	s = i * 10
516      end do
517    !$omp end distribute simd
518    !$omp end target teams
519  end subroutine
520end module
521