2018-06-09 Steven G. Kargl <kargl@gcc.gnu.org>
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / doacross1.f90
blobe3beda05e890fe0dd766e06e0bfe511663234e6e
1 ! { dg-do run }
3 integer, parameter :: N = 256
4 integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8)
5 integer, save, volatile :: d, e
6 integer :: i, j, k, l, m
7 integer :: m1, m2, m3, m4, m5, m6, m7, m8
8 integer :: m9, m10, m11, m12, m13, m14, m15, m16
9 d = 0
10 e = 0
11 !$omp parallel private (l) shared(k)
12 !$omp do schedule(static, 1) ordered(1)
13 do i = 1, N
14 !$omp atomic write
15 a(i) = 1
16 !$omp ordered depend ( sink : i - 1 )
17 if (i.gt.1) then
18 !$omp atomic read
19 l = a(i - 1)
20 if (l.lt.2) STOP 1
21 end if
22 !$omp atomic write
23 a(i) = 2
24 if (i.lt.N) then
25 !$omp atomic read
26 l = a(i + 1)
27 if (l.eq.3) STOP 2
28 end if
29 !$omp ordered depend(source)
30 !$omp atomic write
31 a(i) = 3
32 end do
33 !$omp end do nowait
34 !$omp do schedule(static) ordered ( 3 )
35 do i = 3, N / 16 - 1
36 do j = 1, 8, 2
37 do k = 2, 4
38 !$omp atomic write
39 b(i, j, k) = 1
40 !$omp ordered depend(sink:i,j-2,k-1) &
41 !$omp& depend(sink: i - 2, j - 2, k + 1)
42 !$omp ordered depend(sink:i-3,j+2,k-2)
43 if (j.gt.2.and.k.gt.2) then
44 !$omp atomic read
45 l = b(i,j-2,k-1)
46 if (l.lt.2) STOP 3
47 end if
48 !$omp atomic write
49 b(i,j,k) = 2
50 if (i.gt.4.and.j.gt.2.and.k.lt.4) then
51 !$omp atomic read
52 l = b(i-2,j-2, k+1)
53 if (l.lt.2) STOP 4
54 end if
55 if (i.gt.5.and.j.le.N/16-3.and.k.eq.4) then
56 !$omp atomic read
57 l = b( i - 3, j+2, k-2)
58 if (l.lt.2) STOP 5
59 end if
60 !$omp ordered depend(source)
61 !$omp atomic write
62 b(i, j, k) = 3
63 end do
64 end do
65 end do
66 !$omp end do nowait
67 !$omp do schedule(dynamic, 15) collapse(2) ordered(13)
68 do i = 1, N / 32
69 do j = 8, 3, -1
70 do k = 7, 1, -2
71 do m1 = 4, 4
72 do m2 = 4, 4
73 do m3 = 4, 4
74 do m4 = 4, 4
75 do m5 = 4, 4
76 do m6 = 4, 4
77 do m7 = 4, 4
78 do m8 = 4, 4
79 do m9 = 4, 4
80 do m10 = 4, 4
81 do m11 = 4, 4
82 do m12 = 4, 4
83 do m13 = 4, 4
84 do m14 = 4, 4
85 do m15 = 4, 4
86 do m16 = 4, 4
87 !$omp atomic write
88 c(i, j, k) = 1
89 !$omp ordered depend(sink: i, j, k + 2, m1, m2, m3, m4, &
90 !$omp & m5, m6, m7, m8, m9, m10) &
91 !$omp depend(sink: i - 2, j + 1, k - 4, m1,m2,m3,m4,m5, &
92 !$omp & m6,m7,m8,m9,m10) depend ( sink : i-1,j-2,k-2, &
93 !$omp& m1,m2,m3,m4 , m5, m6,m7,m8,m9,m10 )
94 if (k.le.5) then
95 !$omp atomic read
96 l = c(i, j, k + 2)
97 if (l.lt.2) STOP 6
98 end if
99 !$omp atomic write
100 c(i, j, k) = 2
101 if (i.ge.3.and.j.lt.8.and.k.ge.5) then
102 !$omp atomic read
103 l = c(i - 2, j + 1, k - 4)
104 if (l.lt.2) STOP 7
105 end if
106 if (i.ge.2.and.j.ge.5.and.k.ge.3) then
107 !$omp atomic read
108 l = c(i - 1, j - 2, k - 2)
109 if (l.lt.2) STOP 8
110 end if
111 !$omp ordered depend ( source )
112 !$omp atomic write
113 c(i,j,k)=3
114 end do
115 end do
116 end do
117 end do
118 end do
119 end do
120 end do
121 end do
122 end do
123 end do
124 end do
125 end do
126 end do
127 end do
128 end do
129 end do
130 end do
131 end do
132 end do
133 !$omp do collapse(2) ordered(4) lastprivate (i,j,k)
134 do i = 0, d
135 do j = d + 1, 0, -1
136 do k = 0, d - 1
137 do l = 0, d + 1
138 !$omp ordered depend(source)
139 !$omp ordered depend(sink: i-2,j+2,k-2,l)
140 if (e.eq.0) STOP 9
141 end do
142 end do
143 end do
144 end do
145 !$omp single
146 if (i.ne.1.or.j.ne.-1.or.k.ne.0) STOP 10
147 i = 8; j = 9; k = 10
148 !$omp end single
149 !$omp do ordered(4) collapse(2) lastprivate (i, j, k, m)
150 do i = 0, d
151 do j = d + 1, 0, -1
152 do k = 0, d + 1
153 do m = 0, d-1
154 !$omp ordered depend(source)
155 !$omp ordered depend(sink: i - 2, j + 2, k - 2, m)
156 STOP 11
157 end do
158 end do
159 end do
160 end do
161 !$omp single
162 if (i.ne.1.or.j.ne.-1.or.k.ne.2.or.m.ne.0) STOP 12
163 !$omp end single
164 !$omp do collapse(2) ordered(4) lastprivate (i,j,k)
165 do i = 0, d
166 do j = d, 1, -1
167 do k = 0, d + 1
168 do l = 0, d + 3
169 !$omp ordered depend(source)
170 !$omp ordered depend(sink: i-2,j+2,k-2,l)
171 if (e.eq.0) STOP 13
172 end do
173 end do
174 end do
175 end do
176 !$omp end do nowait
177 !$omp do
178 do i = 1, N
179 if (a(i) .ne. 3) STOP 14
180 end do
181 !$omp end do nowait
182 !$omp do collapse(2) private(k)
183 do i = 1, N / 16
184 do j = 1, 8
185 do k = 1, 4
186 if (i.ge.3.and.i.lt.N/16.and.iand(j,1).ne.0.and.k.ge.2) then
187 if (b(i,j,k).ne.3) STOP 15
188 else
189 if (b(i,j,k).ne.0) STOP 16
190 end if
191 end do
192 end do
193 end do
194 !$omp end do nowait
195 !$omp do collapse(3)
196 do i = 1, N / 32
197 do j = 1, 8
198 do k = 1, 4
199 if (j.ge.3.and.iand(k,1).ne.0) then
200 if (c(i,j,k).ne.3) STOP 17
201 else
202 if (c(i,j,k).ne.0) STOP 18
203 end if
204 end do
205 end do
206 end do
207 !$omp end do nowait
208 !$omp end parallel