! { dg-do run }

  integer, parameter :: N = 256
  integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8), g(N/16,8,6)
  integer, save, volatile :: d, e
  integer(kind=8), save, volatile :: f
  integer(kind=8) :: i
  integer :: j, k, l, m
  integer :: m1, m2, m3, m4, m5, m6, m7, m8
  integer :: m9, m10, m11, m12, m13, m14, m15, m16
  d = 0
  e = 0
  f = 0
  !$omp parallel private (l) shared(k)
    !$omp do schedule(guided, 3) ordered(1)
    do i = 2, N + f, f + 1
      !$omp atomic write
      a(i) = 1
      !$omp ordered depend ( sink : i - 1 )
      if (i.gt.2) then
        !$omp atomic read
        l = a(i - 1)
        if (l.lt.2) stop 1
      end if
      !$omp atomic write
      a(i) = 2
      if (i.lt.N) then
        !$omp atomic read
        l = a(i + 1)
        if (l.eq.3) stop 2
      end if
      !$omp ordered depend(source)
      !$omp atomic write
      a(i) = 3
    end do
    !$omp end do nowait
    !$omp do schedule(guided) ordered ( 3 )
    do i = 4, N / 16 - 1 + f, 1 + f
      do j = 1, 8, d + 2
        do k = 2, 4, 1 + d
          !$omp atomic write
          b(i, j, k) = 1
          !$omp ordered depend(sink:i,j-2,k-1) &
          !$omp& depend(sink: i - 2, j - 2, k + 1)
          !$omp ordered depend(sink:i-3,j+2,k-2)
          if (j.gt.2.and.k.gt.2) then
            !$omp atomic read
            l = b(i,j-2,k-1)
            if (l.lt.2) stop 3
          end if
          !$omp atomic write
          b(i,j,k) = 2
          if (i.gt.5.and.j.gt.2.and.k.lt.4) then
            !$omp atomic read
            l = b(i-2,j-2, k+1)
            if (l.lt.2) stop 4
          end if
          if (i.gt.6.and.j.le.N/16-3.and.k.eq.4) then
            !$omp atomic read
            l = b( i - 3, j+2, k-2)
            if (l.lt.2) stop 5
          end if
          !$omp ordered depend(source)
          !$omp atomic write
          b(i, j, k) = 3
        end do
      end do
    end do
    !$omp end do nowait
    !$omp do schedule(guided, 15) collapse(2) ordered(13)
    do i = 3, N / 32 + f, d + 1
      do j = 8, 3, d - 1
        do k = 7, 1, d - 2
          do m1 = 4, 4, d + 1
          do m2 = 4, 4, 1 + d
          do m3 = 4, 4, d + 1
          do m4 = 4, 4, 1 + d
          do m5 = 4, 4, d + 1
          do m6 = 4, 4, 1 + d
          do m7 = 4, 4, d + 1
          do m8 = 4, 4, 1 + d
          do m9 = 4, 4
          do m10 = 4, 4, d + 1
          do m11 = 4, 4, 1 + d
          do m12 = 4, 4, d + 1
          do m13 = 4, 4
          do m14 = 4, 4, 1 + d
          do m15 = 4, 4, d + 1
          do m16 = 4, 4, 1 + d
            !$omp atomic write
            c(i, j, k) = 1
            !$omp ordered depend(sink: i, j, k + 2, m1, m2, m3, m4, &
            !$omp & m5, m6, m7, m8, m9, m10) &
            !$omp depend(sink: i - 2, j + 1, k - 4, m1,m2,m3,m4,m5, &
            !$omp & m6,m7,m8,m9,m10) depend ( sink : i-1,j-2,k-2, &
            !$omp& m1,m2,m3,m4 , m5, m6,m7,m8,m9,m10 )
            if (k.le.5) then
              !$omp atomic read
              l = c(i, j, k + 2)
              if (l.lt.2) stop 6
            end if
            !$omp atomic write
            c(i, j, k) = 2
            if (i.ge.5.and.j.lt.8.and.k.ge.5) then
              !$omp atomic read
              l = c(i - 2, j + 1, k - 4)
              if (l.lt.2) stop 7
            end if
            if (i.ge.4.and.j.ge.5.and.k.ge.3) then
              !$omp atomic read
              l = c(i - 1, j - 2, k - 2)
              if (l.lt.2) stop 8
            end if
            !$omp ordered depend ( source )
            !$omp atomic write
            c(i,j,k)=3
          end do
          end do
          end do
          end do
          end do
          end do
          end do
          end do
          end do
          end do
          end do
          end do
          end do
          end do
          end do
          end do
        end do
      end do
    end do
    !$omp do schedule(guided, 5) ordered(3)
    do j = 1, N / 16 - 1, d + 1
      do k = 1, 7, 2 + d
        do i = 4, 6 + f, f + 1
          !$omp atomic write
          g(j, k, i) = 1
          !$omp ordered depend(sink: j, k-2,i-1) &
          !$omp& depend(sink: j - 2, k - 2, i + 1)
          !$omp ordered depend(sink:j-3,k+2,i-2)
          if (k.gt.2.and.i.gt.4) then
            !$omp atomic read
            l = g(j,k-2,i-1)
            if (l.lt.2) stop 9
          end if
          !$omp atomic write
          g(j,k,i) = 2
          if (j.gt.2.and.k.gt.2.and.i.lt.6) then
            !$omp atomic read
            l = g(j-2,k-2, i+1)
            if (l.lt.2) stop 10
          end if
          if (j.gt.3.and.k.le.N/16-3.and.i.eq.6) then
            !$omp atomic read
            l = g( j - 3, k+2, i-2)
            if (l.lt.2) stop 11
          end if
          !$omp ordered depend(source)
          !$omp atomic write
          g(j, k, i) = 3
        end do
      end do
    end do
    !$omp end do nowait
    !$omp do collapse(2) ordered(4) lastprivate (i,j,k)
    do i = 2, f + 2, 1 + f
      do j = d + 1, 0, d - 1
        do k = 0, d - 1, d + 1
          do l = 0, d + 1, 1 + d
            !$omp ordered depend(source)
            !$omp ordered depend(sink: i-2,j+2,k-2,l)
            if (e.eq.0) stop 12
          end do
        end do
      end do
    end do
    !$omp single
    if (i.ne.3.or.j.ne.-1.or.k.ne.0) stop 13
    i = 8; j = 9; k = 10
    !$omp end single
    !$omp do ordered(4) collapse(2) lastprivate (i, j, k, m)
    do i = 2, f + 2, 1 + f
      do j = d + 1, 0, d - 1
        do k = 0, d + 1, 1 + d
          do m = 0, d-1, d+1
            !$omp ordered depend(source)
            !$omp ordered depend(sink: i - 2, j + 2, k - 2, m)
            stop 14
          end do
        end do
      end do
    end do
    !$omp single
    if (i.ne.3.or.j.ne.-1.or.k.ne.2.or.m.ne.0) stop 15
    !$omp end single
    !$omp do collapse(2) ordered(4) lastprivate (i,j,k)
    do i = 2, f + 2, 1 + f
      do j = d, 1, d -1
        do k = 0, d + 1, 1 + d
          do l = 0, d + 3, d + 1
            !$omp ordered depend(source)
            !$omp ordered depend(sink: i-2,j+2,k-2,l)
            if (e.eq.0) stop 16
          end do
        end do
      end do
    end do
    !$omp end do nowait
    !$omp single
    if (a(1) .ne. 0) stop 17
    !$omp end single nowait
    !$omp do
    do i = 2, N
      if (a(i) .ne. 3) stop 18
    end do
    !$omp end do nowait
    !$omp do collapse(2) private(k)
    do i = 1, N / 16
      do j = 1, 8
        do k = 1, 4
          if (i.ge.4.and.i.lt.N/16.and.iand(j,1).ne.0.and.k.ge.2) then
            if (b(i,j,k).ne.3) stop 19
          else
            if (b(i,j,k).ne.0) stop 20
          end if
        end do
      end do
    end do
    !$omp end do nowait
    !$omp do collapse(3)
    do i = 1, N / 32
      do j = 1, 8
        do k = 1, 4
          if (i.ge.3.and.j.ge.3.and.iand(k,1).ne.0) then
            if (c(i,j,k).ne.3) stop 21
          else
            if (c(i,j,k).ne.0) stop 22
          end if
        end do
      end do
    end do
    !$omp end do nowait
    !$omp do collapse(2) private(k)
    do i = 1, N / 16
      do j = 1, 8
        do k = 1, 6
          if (i.lt.N/16.and.iand(j,1).ne.0.and.k.ge.4) then
            if (g(i,j,k).ne.3) stop 23
          else
            if (g(i,j,k).ne.0) stop 24
          end if
        end do
      end do
    end do
    !$omp end do nowait
  !$omp end parallel
end
