1! { dg-do compile { target skip-all-targets } } 2! Only used by taskloop-4.f90 3! To avoid inlining 4 5module m2 6 use m_taskloop4 7 implicit none (external, type) 8contains 9 10subroutine grainsize (a, b, c, d) 11 integer, value :: a, b, c, d 12 integer :: i, j, k 13 j = 0 14 k = 0 15 !$omp taskloop firstprivate (j, k) grainsize(d) 16 do i = a, b - 1, c 17 if (j == 0) then 18 !$omp atomic capture 19 k = v 20 v = v + 1 21 !$omp end atomic 22 if (k >= 64) & 23 stop 1 24 end if 25 j = j + 1 26 u(k) = j 27 end do 28end 29 30subroutine num_tasks (a, b, c, d) 31 integer, value :: a, b, c, d 32 integer :: i, j, k 33 j = 0 34 k = 0 35 !$omp taskloop firstprivate (j, k) num_tasks(d) 36 do i = a, b - 1, c 37 if (j == 0) then 38 !$omp atomic capture 39 k = v 40 v = v + 1 41 !$omp end atomic 42 if (k >= 64) & 43 stop 2 44 end if 45 j = j + 1 46 u(k) = j 47 end do 48 end 49end module 50 51program main 52 use m2 53 implicit none (external, type) 54 !$omp parallel 55 !$omp single 56 block 57 integer :: min_iters, max_iters, ntasks 58 59 ! If grainsize is present, # of task loop iters is >= grainsize && < 2 * grainsize, 60 ! unless # of loop iterations is smaller than grainsize. 61 if (test (0, 79, 1, 17, grainsize, ntasks, min_iters, max_iters) /= 79) & 62 stop 3 63 if (min_iters < 17 .or. max_iters >= 17 * 2) & 64 stop 4 65 if (test (-49, 2541, 7, 28, grainsize, ntasks, min_iters, max_iters) /= 370) & 66 stop 5 67 if (min_iters < 28 .or. max_iters >= 28 * 2) & 68 stop 6 69 if (test (7, 21, 2, 15, grainsize, ntasks, min_iters, max_iters) /= 7) & 70 stop 7 71 if (ntasks /= 1 .or. min_iters /= 7 .or. max_iters /= 7) & 72 stop 8 73 ! If num_tasks is present, # of tasks is min (# of loop iters, num_tasks) 74 ! and each task has at least one iteration. 75 if (test (-51, 2500, 48, 9, num_tasks, ntasks, min_iters, max_iters) /= 54) & 76 stop 9 77 if (ntasks /= 9) & 78 stop 10 79 if (test (0, 25, 2, 17, num_tasks, ntasks, min_iters, max_iters) /= 13) & 80 stop 11 81 if (ntasks /= 13) & 82 stop 12 83 end block 84 !$omp end single 85 !$omp end parallel 86end program 87