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