1! { dg-do run } 2 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(static, 1) ordered(1) 16 do i = 2, N + f 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) stop 1 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) stop 2 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(static) ordered ( 3 ) 38 do i = 4, N / 16 - 1 + f 39 do j = 1, 8, 2 40 do k = 2, 4 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) stop 3 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) stop 4 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) stop 5 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(dynamic, 15) collapse(2) ordered(13) 71 do i = 3, N / 32 + f 72 do j = 8, 3, -1 73 do k = 7, 1, -2 74 do m1 = 4, 4 75 do m2 = 4, 4 76 do m3 = 4, 4 77 do m4 = 4, 4 78 do m5 = 4, 4 79 do m6 = 4, 4 80 do m7 = 4, 4 81 do m8 = 4, 4 82 do m9 = 4, 4 83 do m10 = 4, 4 84 do m11 = 4, 4 85 do m12 = 4, 4 86 do m13 = 4, 4 87 do m14 = 4, 4 88 do m15 = 4, 4 89 do m16 = 4, 4 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) stop 6 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) stop 7 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) stop 8 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(static) ordered(3) 137 do j = 1, N / 16 - 1 138 do k = 1, 7, 2 139 do i = 4, 6 + f 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) stop 9 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) stop 10 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) stop 11 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 171 do j = d + 1, 0, -1 172 do k = 0, d - 1 173 do l = 0, d + 1 174 !$omp ordered depend(source) 175 !$omp ordered depend(sink: i-2,j+2,k-2,l) 176 if (e.eq.0) stop 12 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) stop 13 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 187 do j = d + 1, 0, -1 188 do k = 0, d + 1 189 do m = 0, d-1 190 !$omp ordered depend(source) 191 !$omp ordered depend(sink: i - 2, j + 2, k - 2, m) 192 stop 14 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) stop 15 199 !$omp end single 200 !$omp do collapse(2) ordered(4) lastprivate (i,j,k) 201 do i = 2, f + 2 202 do j = d, 1, -1 203 do k = 0, d + 1 204 do l = 0, d + 3 205 !$omp ordered depend(source) 206 !$omp ordered depend(sink: i-2,j+2,k-2,l) 207 if (e.eq.0) stop 16 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) stop 17 215 !$omp end single nowait 216 !$omp do 217 do i = 2, N 218 if (a(i) .ne. 3) stop 18 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) stop 19 227 else 228 if (b(i,j,k).ne.0) stop 20 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) stop 21 240 else 241 if (c(i,j,k).ne.0) stop 22 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) stop 23 253 else 254 if (g(i,j,k).ne.0) stop 24 255 end if 256 end do 257 end do 258 end do 259 !$omp end do nowait 260 !$omp end parallel 261end 262