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) 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 209end 210