Add support for ARMv8-R architecture
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / doacross1.f90
blobb4eda8fef64397cfdb7bb08e7d25caa270b042d7
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) call abort
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) call abort
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) call abort
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) call abort
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) call abort
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) call abort
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) call abort
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) call abort
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) call abort
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) call abort
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 call abort
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) call abort
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) call abort
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) call abort
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) call abort
188 else
189 if (b(i,j,k).ne.0) call abort
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) call abort
201 else
202 if (c(i,j,k).ne.0) call abort
203 end if
204 end do
205 end do
206 end do
207 !$omp end do nowait
208 !$omp end parallel