! { dg-do run } ! { dg-additional-options "-fno-inline" } #define N 200 #define TEST_VALUE(I) ((I) * 5 / 2) subroutine setup(a) real :: a(N) do i = 1, N a(i) = TEST_VALUE(i) end do end subroutine subroutine check(a, x, gap) real :: a(N), temp, x integer :: gap do i = 1, N - gap temp = a(i + gap) + x if (a(i) /= temp) STOP 1 end do do i = N - gap + 1, N temp = TEST_VALUE(i) if (a(i) /= temp) STOP 2 end do end subroutine subroutine testa(a, x, base, n) real :: a(n), x integer :: base, n do i = n, 2, -1 a(base + i - 1) = a(base + i) + x end do end subroutine testa subroutine testb(a, x, base, n) real :: a(n), x integer :: base do i = n, 4, -1 a(base + i - 3) = a(base + i) + x end do end subroutine testb subroutine testc(a, x, base, n) real :: a(n), x integer :: base do i = n, 8, -1 a(base + i - 7) = a(base + i) + x end do end subroutine testc subroutine testd(a, x, base, n) real :: a(n), x integer :: base do i = n, 16, -1 a(base + i - 15) = a(base + i) + x end do end subroutine testd subroutine teste(a, x, base, n) real :: a(n), x integer :: base do i = n, 32, -1 a(base + i - 31) = a(base + i) + x end do end subroutine teste subroutine testf(a, x, base, n) real :: a(n), x integer :: base do i = n, 64, -1 a(base + i - 63) = a(base + i) + x end do end subroutine testf program main real :: a(N) call setup(a) call testa(a, 91.0, 0, N) call check(a, 91.0, 1) call setup(a) call testb(a, 55.0, 0, N) call check(a, 55.0, 3) call setup(a) call testc(a, 72.0, 0, N) call check(a, 72.0, 7) call setup(a) call testd(a, 69.0, 0, N) call check(a, 69.0, 15) call setup(a) call teste(a, 44.0, 0, N) call check(a, 44.0, 31) call setup(a) call testf(a, 39.0, 0, N) call check(a, 39.0, 63) end program