Retro68/gcc/libgomp/testsuite/libgomp.fortran/simd4.f90

104 lines
2.7 KiB
Fortran
Raw Normal View History

2014-09-21 17:33:12 +00:00
! { dg-do run }
! { dg-additional-options "-msse2" { target sse2_runtime } }
! { dg-additional-options "-mavx" { target avx_runtime } }
integer :: a(1024), b(1024), k, m, i, s, t
k = 4
m = 2
t = 1
do i = 1, 1024
a(i) = i - 513
b(i) = modulo (i - 52, 39)
if (i.lt.52.and.b(i).ne.0) b(i) = b(i) - 39
end do
s = foo (b)
do i = 1, 1024
2018-12-28 15:30:48 +00:00
if (a(i).ne.((i - 513) * b(i))) STOP 1
2014-09-21 17:33:12 +00:00
if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
2018-12-28 15:30:48 +00:00
if (b(i).ne.(modulo (i - 52, 39) - 39)) STOP 2
2014-09-21 17:33:12 +00:00
else
2018-12-28 15:30:48 +00:00
if (b(i).ne.(modulo (i - 52, 39))) STOP 3
2014-09-21 17:33:12 +00:00
end if
a(i) = i - 513
end do
2018-12-28 15:30:48 +00:00
if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) STOP 4
2014-09-21 17:33:12 +00:00
k = 4
m = 2
t = 1
s = bar (b)
do i = 1, 1024
2018-12-28 15:30:48 +00:00
if (a(i).ne.((i - 513) * b(i))) STOP 5
2014-09-21 17:33:12 +00:00
if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
2018-12-28 15:30:48 +00:00
if (b(i).ne.(modulo (i - 52, 39) - 39)) STOP 6
2014-09-21 17:33:12 +00:00
else
2018-12-28 15:30:48 +00:00
if (b(i).ne.(modulo (i - 52, 39))) STOP 7
2014-09-21 17:33:12 +00:00
end if
a(i) = i - 513
end do
2018-12-28 15:30:48 +00:00
if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) STOP 8
2014-09-21 17:33:12 +00:00
k = 4
m = 2
t = 1
s = baz (b)
do i = 1, 1024
2018-12-28 15:30:48 +00:00
if (a(i).ne.((i - 513) * b(i))) STOP 9
2014-09-21 17:33:12 +00:00
if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
2018-12-28 15:30:48 +00:00
if (b(i).ne.(modulo (i - 52, 39) - 39)) STOP 10
2014-09-21 17:33:12 +00:00
else
2018-12-28 15:30:48 +00:00
if (b(i).ne.(modulo (i - 52, 39))) STOP 11
2014-09-21 17:33:12 +00:00
end if
end do
2018-12-28 15:30:48 +00:00
if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) STOP 12
2014-09-21 17:33:12 +00:00
contains
function foo (p)
integer :: p(1024), u, v, i, s, foo
s = 0
!$omp parallel do simd linear(k : m + 1) reduction(+: s) &
!$omp & lastprivate(u, v) schedule (static, 32)
do i = 1, 1024
a(i) = a(i) * p(i)
u = p(i) + k
k = k + m + 1
v = p(i) + k
s = s + p(i) + k
end do
!$omp end parallel do simd
2018-12-28 15:30:48 +00:00
if (i.ne.1025) STOP 13
if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) STOP 14
2014-09-21 17:33:12 +00:00
foo = s
end function foo
function bar (p)
integer :: p(1024), u, v, i, s, bar
s = 0
!$omp parallel do simd linear(k : m + 1) reduction(+: s) &
!$omp & lastprivate(u, v) schedule (dynamic, 32)
do i = 1, 1024, t
a(i) = a(i) * p(i)
u = p(i) + k
k = k + m + 1
v = p(i) + k
s = s + p(i) + k
end do
!$omp endparalleldosimd
2018-12-28 15:30:48 +00:00
if (i.ne.1025) STOP 15
if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) STOP 16
2014-09-21 17:33:12 +00:00
bar = s
end function bar
function baz (p)
integer :: p(1024), u, v, i, s, baz
s = 0
!$omp parallel do simd linear(k : m + 1) reduction(+: s) &
!$omp & lastprivate(u, v) linear(i : t) schedule (static, 8)
do i = 1, 1024, t
a(i) = a(i) * p(i)
u = p(i) + k
k = k + m + 1
v = p(i) + k
s = s + p(i) + k
end do
2018-12-28 15:30:48 +00:00
if (i.ne.1025) STOP 17
if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) STOP 18
2014-09-21 17:33:12 +00:00
baz = s
end function baz
end