Fix gcc.c-torture/execute/ieee/cdivchkf.c on hpux
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / taskloop-5-a.f90
blobf12681baafabca685b9c81c6353f7f7e5b3f36b4
1 ! { dg-do compile { target skip-all-targets } }
2 ! Only used by taskloop-5-a.f90
3 ! To avoid inlining
5 module m2
6 use m_taskloop5
7 implicit none (external, type)
8 contains
10 subroutine 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(strict: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 3
24 w(k) = i
25 end if
26 j = j + 1
27 u(k) = j
28 end do
29 end
31 subroutine num_tasks (a, b, c, d)
32 integer, value :: a, b, c, d
33 integer :: i, j, k
34 j = 0
35 k = 0
36 !$omp taskloop firstprivate (j, k) num_tasks(strict:d)
37 do i = a, b - 1, c
38 if (j == 0) then
39 !$omp atomic capture
40 k = v
41 v = v + 1
42 !$omp end atomic
43 if (k >= 64) &
44 stop 4
45 w(k) = i
46 end if
47 j = j + 1
48 u(k) = j
49 end do
50 end
51 end module
53 program main
54 use m2
55 implicit none (external, type)
56 !$omp parallel
57 !$omp single
58 block
59 integer :: min_iters, max_iters, ntasks, sep
61 ! If grainsize is present and has strict modifier, # of task loop iters is == grainsize,
62 ! except that it can be smaller on the last task.
63 if (test (0, 79, 1, 17, grainsize, ntasks, min_iters, max_iters, sep) /= 79) &
64 stop 5
65 if (ntasks /= 5 .or. min_iters /= 11 .or. max_iters /= 17 .or. sep /= 4) &
66 stop
67 if (test (-49, 2541, 7, 28, grainsize, ntasks, min_iters, max_iters, sep) /= 370) &
68 stop 6
69 if (ntasks /= 14 .or. min_iters /= 6 .or. max_iters /= 28 .or. sep /= 13) &
70 stop
71 if (test (7, 21, 2, 15, grainsize, ntasks, min_iters, max_iters, sep) /= 7) &
72 stop 7
73 if (ntasks /= 1 .or. min_iters /= 7 .or. max_iters /= 7 .or. sep /= 1) &
74 stop 8
75 ! If num_tasks is present, # of tasks is min (# of loop iters, num_tasks)
76 ! and each task has at least one iteration. If strict modifier is present,
77 ! first set of tasks has ceil (# of loop iters / num_tasks) iterations,
78 ! followed by possibly empty set of tasks with floor (# of loop iters / num_tasks)
79 ! iterations.
80 if (test (-51, 2500, 48, 9, num_tasks, ntasks, min_iters, max_iters, sep) /= 54) &
81 stop 9
82 if (ntasks /= 9 .or. min_iters /= 6 .or. max_iters /= 6 .or. sep /= 9) &
83 stop 10
84 if (test (0, 57, 1, 9, num_tasks, ntasks, min_iters, max_iters, sep) /= 57) &
85 stop 11
86 if (ntasks /= 9 .or. min_iters /= 6 .or. max_iters /= 7 .or. sep /= 3) &
87 stop 12
88 if (test (0, 25, 2, 17, num_tasks, ntasks, min_iters, max_iters, sep) /= 13) &
89 stop 13
90 if (ntasks /= 13 .or. min_iters /= 1 .or. max_iters /= 1 .or. sep /= 13) &
91 stop 14
92 end block
93 !$omp end single
94 !$omp end parallel
95 end program