123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- ! { 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
- if (a(i).ne.((i - 513) * b(i))) call abort
- if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
- if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
- else
- if (b(i).ne.(modulo (i - 52, 39))) call abort
- end if
- a(i) = i - 513
- end do
- if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
- k = 4
- m = 2
- t = 1
- s = bar (b)
- do i = 1, 1024
- if (a(i).ne.((i - 513) * b(i))) call abort
- if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
- if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
- else
- if (b(i).ne.(modulo (i - 52, 39))) call abort
- end if
- a(i) = i - 513
- end do
- if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
- k = 4
- m = 2
- t = 1
- s = baz (b)
- do i = 1, 1024
- if (a(i).ne.((i - 513) * b(i))) call abort
- if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
- if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
- else
- if (b(i).ne.(modulo (i - 52, 39))) call abort
- end if
- end do
- if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
- contains
- function foo (p)
- integer :: p(1024), u, v, i, s, foo
- s = 0
- !$omp parallel
- !$omp do simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
- !$omp & 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 do simd
- !$omp end parallel
- if (i.ne.1025) call abort
- if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
- foo = s
- end function foo
- function bar (p)
- integer :: p(1024), u, v, i, s, bar
- s = 0
- !$omp parallel
- !$omp do simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
- !$omp & 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 end do simd
- !$omp endparallel
- if (i.ne.1025) call abort
- if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
- bar = s
- end function bar
- function baz (p)
- integer :: p(1024), u, v, i, s, baz
- s = 0
- !$omp parallel
- !$omp do simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
- !$omp & 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
- !$omp end parallel
- if (i.ne.1025) call abort
- if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
- baz = s
- end function baz
- end
|