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