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