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