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