https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61000

--- Comment #7 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
When tackling this in the front end, one problem is when
_not_ to do loop interchange.

Consider

do i=1,10
  do j=1,10
    call foo(a(i,j))
  end do
end do

where we have no idea what foo does, and if it depends on
the order it is called (unless it is pure).

Also, if you look at

program main
  integer, dimension(3,3) :: a
  integer, dimension(9) :: b
  a = reshape([(4**(i-1),i=1,9)],shape(a))
  b = [(2*4**(i-1),i=1,9)]
  k = 0
  do i=1,3
    do j=1,3
      k = k + 1
      a(i,j) = a(i,j) + b(k)
    end do
  end do
  print *,a

  a = reshape([(4**(i-1),i=1,9)],shape(a))
  k = 0
  do j=1,3
    do i=1,3
      k = k + 1
      a(i,j) = a(i,j) + b(k)
    end do
  end do
  print *,a
end program main

you see that loop reordering can introduce wrong code quite
easily.

Reply via email to