1! { dg-options "-O3 -fdump-tree-lversion-details -fno-frontend-loop-interchange" }
2
3! We could version the loop for when the first dimension has a stride
4! of 1, but at present there's no real benefit.  The gimple loop
5! interchange pass couldn't handle the versioned loop, and interchange
6! is instead done by the frontend (but disabled by the options above).
7
8subroutine f1(x)
9  real :: x(:, :)
10  do i = lbound(x, 1), ubound(x, 1)
11     do j = lbound(x, 2), ubound(x, 2)
12        x(i, j) = 100
13     end do
14  end do
15end subroutine f1
16
17subroutine f2(x, n, step)
18  integer :: n, step
19  real :: x(100, 100)
20  do i = 1, n
21     do j = 1, n
22        x(i * step, j) = 100
23     end do
24  end do
25end subroutine f2
26
27subroutine f3(x, n, step)
28  integer :: n, step
29  real :: x(n * step, n)
30  do i = 1, n
31     do j = 1, n
32        x(i * step, j) = 100
33     end do
34  end do
35end subroutine f3
36
37! { dg-final { scan-tree-dump-times {likely to be the innermost dimension} 1 "lversion" } }
38! { dg-final { scan-tree-dump-not {want to version} "lversion" } }
39! { dg-final { scan-tree-dump-not {versioned} "lversion" } }
40