blob: df9f4cac3fef42de2a38053e8a36f0f1846eabef [file] [log] [blame]
 ! { 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