Retro68/gcc/libgomp/testsuite/libgomp.fortran/doacross1.f90
2018-12-28 16:30:48 +01:00

210 lines
5.5 KiB
Fortran

! { dg-do run }
integer, parameter :: N = 256
integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8)
integer, save, volatile :: d, e
integer :: i, 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
!$omp parallel private (l) shared(k)
!$omp do schedule(static, 1) ordered(1)
do i = 1, N
!$omp atomic write
a(i) = 1
!$omp ordered depend ( sink : i - 1 )
if (i.gt.1) 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(static) ordered ( 3 )
do i = 3, N / 16 - 1
do j = 1, 8, 2
do k = 2, 4
!$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.4.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.5.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(dynamic, 15) collapse(2) ordered(13)
do i = 1, N / 32
do j = 8, 3, -1
do k = 7, 1, -2
do m1 = 4, 4
do m2 = 4, 4
do m3 = 4, 4
do m4 = 4, 4
do m5 = 4, 4
do m6 = 4, 4
do m7 = 4, 4
do m8 = 4, 4
do m9 = 4, 4
do m10 = 4, 4
do m11 = 4, 4
do m12 = 4, 4
do m13 = 4, 4
do m14 = 4, 4
do m15 = 4, 4
do m16 = 4, 4
!$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.3.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.2.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 collapse(2) ordered(4) lastprivate (i,j,k)
do i = 0, d
do j = d + 1, 0, -1
do k = 0, d - 1
do l = 0, d + 1
!$omp ordered depend(source)
!$omp ordered depend(sink: i-2,j+2,k-2,l)
if (e.eq.0) STOP 9
end do
end do
end do
end do
!$omp single
if (i.ne.1.or.j.ne.-1.or.k.ne.0) STOP 10
i = 8; j = 9; k = 10
!$omp end single
!$omp do ordered(4) collapse(2) lastprivate (i, j, k, m)
do i = 0, d
do j = d + 1, 0, -1
do k = 0, d + 1
do m = 0, d-1
!$omp ordered depend(source)
!$omp ordered depend(sink: i - 2, j + 2, k - 2, m)
STOP 11
end do
end do
end do
end do
!$omp single
if (i.ne.1.or.j.ne.-1.or.k.ne.2.or.m.ne.0) STOP 12
!$omp end single
!$omp do collapse(2) ordered(4) lastprivate (i,j,k)
do i = 0, d
do j = d, 1, -1
do k = 0, d + 1
do l = 0, d + 3
!$omp ordered depend(source)
!$omp ordered depend(sink: i-2,j+2,k-2,l)
if (e.eq.0) STOP 13
end do
end do
end do
end do
!$omp end do nowait
!$omp do
do i = 1, N
if (a(i) .ne. 3) STOP 14
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.3.and.i.lt.N/16.and.iand(j,1).ne.0.and.k.ge.2) then
if (b(i,j,k).ne.3) STOP 15
else
if (b(i,j,k).ne.0) STOP 16
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 (j.ge.3.and.iand(k,1).ne.0) then
if (c(i,j,k).ne.3) STOP 17
else
if (c(i,j,k).ne.0) STOP 18
end if
end do
end do
end do
!$omp end do nowait
!$omp end parallel
end