Add support for ARMv8-R architecture
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / doacross3.f90
blob66cfb06284b2a6b1772ca3a01dbcd602ac68c722
1 ! { dg-do run }
3 integer, parameter :: N = 256
4 integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8), g(N/16,8,6)
5 integer, save, volatile :: d, e
6 integer(kind=8), save, volatile :: f
7 integer(kind=8) :: i
8 integer :: j, k, l, m
9 integer :: m1, m2, m3, m4, m5, m6, m7, m8
10 integer :: m9, m10, m11, m12, m13, m14, m15, m16
11 d = 0
12 e = 0
13 f = 0
14 !$omp parallel private (l) shared(k)
15 !$omp do schedule(guided, 3) ordered(1)
16 do i = 2, N + f, f + 1
17 !$omp atomic write
18 a(i) = 1
19 !$omp ordered depend ( sink : i - 1 )
20 if (i.gt.2) then
21 !$omp atomic read
22 l = a(i - 1)
23 if (l.lt.2) call abort
24 end if
25 !$omp atomic write
26 a(i) = 2
27 if (i.lt.N) then
28 !$omp atomic read
29 l = a(i + 1)
30 if (l.eq.3) call abort
31 end if
32 !$omp ordered depend(source)
33 !$omp atomic write
34 a(i) = 3
35 end do
36 !$omp end do nowait
37 !$omp do schedule(guided) ordered ( 3 )
38 do i = 4, N / 16 - 1 + f, 1 + f
39 do j = 1, 8, d + 2
40 do k = 2, 4, 1 + d
41 !$omp atomic write
42 b(i, j, k) = 1
43 !$omp ordered depend(sink:i,j-2,k-1) &
44 !$omp& depend(sink: i - 2, j - 2, k + 1)
45 !$omp ordered depend(sink:i-3,j+2,k-2)
46 if (j.gt.2.and.k.gt.2) then
47 !$omp atomic read
48 l = b(i,j-2,k-1)
49 if (l.lt.2) call abort
50 end if
51 !$omp atomic write
52 b(i,j,k) = 2
53 if (i.gt.5.and.j.gt.2.and.k.lt.4) then
54 !$omp atomic read
55 l = b(i-2,j-2, k+1)
56 if (l.lt.2) call abort
57 end if
58 if (i.gt.6.and.j.le.N/16-3.and.k.eq.4) then
59 !$omp atomic read
60 l = b( i - 3, j+2, k-2)
61 if (l.lt.2) call abort
62 end if
63 !$omp ordered depend(source)
64 !$omp atomic write
65 b(i, j, k) = 3
66 end do
67 end do
68 end do
69 !$omp end do nowait
70 !$omp do schedule(guided, 15) collapse(2) ordered(13)
71 do i = 3, N / 32 + f, d + 1
72 do j = 8, 3, d - 1
73 do k = 7, 1, d - 2
74 do m1 = 4, 4, d + 1
75 do m2 = 4, 4, 1 + d
76 do m3 = 4, 4, d + 1
77 do m4 = 4, 4, 1 + d
78 do m5 = 4, 4, d + 1
79 do m6 = 4, 4, 1 + d
80 do m7 = 4, 4, d + 1
81 do m8 = 4, 4, 1 + d
82 do m9 = 4, 4
83 do m10 = 4, 4, d + 1
84 do m11 = 4, 4, 1 + d
85 do m12 = 4, 4, d + 1
86 do m13 = 4, 4
87 do m14 = 4, 4, 1 + d
88 do m15 = 4, 4, d + 1
89 do m16 = 4, 4, 1 + d
90 !$omp atomic write
91 c(i, j, k) = 1
92 !$omp ordered depend(sink: i, j, k + 2, m1, m2, m3, m4, &
93 !$omp & m5, m6, m7, m8, m9, m10) &
94 !$omp depend(sink: i - 2, j + 1, k - 4, m1,m2,m3,m4,m5, &
95 !$omp & m6,m7,m8,m9,m10) depend ( sink : i-1,j-2,k-2, &
96 !$omp& m1,m2,m3,m4 , m5, m6,m7,m8,m9,m10 )
97 if (k.le.5) then
98 !$omp atomic read
99 l = c(i, j, k + 2)
100 if (l.lt.2) call abort
101 end if
102 !$omp atomic write
103 c(i, j, k) = 2
104 if (i.ge.5.and.j.lt.8.and.k.ge.5) then
105 !$omp atomic read
106 l = c(i - 2, j + 1, k - 4)
107 if (l.lt.2) call abort
108 end if
109 if (i.ge.4.and.j.ge.5.and.k.ge.3) then
110 !$omp atomic read
111 l = c(i - 1, j - 2, k - 2)
112 if (l.lt.2) call abort
113 end if
114 !$omp ordered depend ( source )
115 !$omp atomic write
116 c(i,j,k)=3
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 end do
134 end do
135 end do
136 !$omp do schedule(guided, 5) ordered(3)
137 do j = 1, N / 16 - 1, d + 1
138 do k = 1, 7, 2 + d
139 do i = 4, 6 + f, f + 1
140 !$omp atomic write
141 g(j, k, i) = 1
142 !$omp ordered depend(sink: j, k-2,i-1) &
143 !$omp& depend(sink: j - 2, k - 2, i + 1)
144 !$omp ordered depend(sink:j-3,k+2,i-2)
145 if (k.gt.2.and.i.gt.4) then
146 !$omp atomic read
147 l = g(j,k-2,i-1)
148 if (l.lt.2) call abort
149 end if
150 !$omp atomic write
151 g(j,k,i) = 2
152 if (j.gt.2.and.k.gt.2.and.i.lt.6) then
153 !$omp atomic read
154 l = g(j-2,k-2, i+1)
155 if (l.lt.2) call abort
156 end if
157 if (j.gt.3.and.k.le.N/16-3.and.i.eq.6) then
158 !$omp atomic read
159 l = g( j - 3, k+2, i-2)
160 if (l.lt.2) call abort
161 end if
162 !$omp ordered depend(source)
163 !$omp atomic write
164 g(j, k, i) = 3
165 end do
166 end do
167 end do
168 !$omp end do nowait
169 !$omp do collapse(2) ordered(4) lastprivate (i,j,k)
170 do i = 2, f + 2, 1 + f
171 do j = d + 1, 0, d - 1
172 do k = 0, d - 1, d + 1
173 do l = 0, d + 1, 1 + d
174 !$omp ordered depend(source)
175 !$omp ordered depend(sink: i-2,j+2,k-2,l)
176 if (e.eq.0) call abort
177 end do
178 end do
179 end do
180 end do
181 !$omp single
182 if (i.ne.3.or.j.ne.-1.or.k.ne.0) call abort
183 i = 8; j = 9; k = 10
184 !$omp end single
185 !$omp do ordered(4) collapse(2) lastprivate (i, j, k, m)
186 do i = 2, f + 2, 1 + f
187 do j = d + 1, 0, d - 1
188 do k = 0, d + 1, 1 + d
189 do m = 0, d-1, d+1
190 !$omp ordered depend(source)
191 !$omp ordered depend(sink: i - 2, j + 2, k - 2, m)
192 call abort
193 end do
194 end do
195 end do
196 end do
197 !$omp single
198 if (i.ne.3.or.j.ne.-1.or.k.ne.2.or.m.ne.0) call abort
199 !$omp end single
200 !$omp do collapse(2) ordered(4) lastprivate (i,j,k)
201 do i = 2, f + 2, 1 + f
202 do j = d, 1, d -1
203 do k = 0, d + 1, 1 + d
204 do l = 0, d + 3, d + 1
205 !$omp ordered depend(source)
206 !$omp ordered depend(sink: i-2,j+2,k-2,l)
207 if (e.eq.0) call abort
208 end do
209 end do
210 end do
211 end do
212 !$omp end do nowait
213 !$omp single
214 if (a(1) .ne. 0) call abort
215 !$omp end single nowait
216 !$omp do
217 do i = 2, N
218 if (a(i) .ne. 3) call abort
219 end do
220 !$omp end do nowait
221 !$omp do collapse(2) private(k)
222 do i = 1, N / 16
223 do j = 1, 8
224 do k = 1, 4
225 if (i.ge.4.and.i.lt.N/16.and.iand(j,1).ne.0.and.k.ge.2) then
226 if (b(i,j,k).ne.3) call abort
227 else
228 if (b(i,j,k).ne.0) call abort
229 end if
230 end do
231 end do
232 end do
233 !$omp end do nowait
234 !$omp do collapse(3)
235 do i = 1, N / 32
236 do j = 1, 8
237 do k = 1, 4
238 if (i.ge.3.and.j.ge.3.and.iand(k,1).ne.0) then
239 if (c(i,j,k).ne.3) call abort
240 else
241 if (c(i,j,k).ne.0) call abort
242 end if
243 end do
244 end do
245 end do
246 !$omp end do nowait
247 !$omp do collapse(2) private(k)
248 do i = 1, N / 16
249 do j = 1, 8
250 do k = 1, 6
251 if (i.lt.N/16.and.iand(j,1).ne.0.and.k.ge.4) then
252 if (g(i,j,k).ne.3) call abort
253 else
254 if (g(i,j,k).ne.0) call abort
255 end if
256 end do
257 end do
258 end do
259 !$omp end do nowait
260 !$omp end parallel