loop optimizations mark 6

Richard Henderson rth@cygnus.com
Thu Jan 22 04:12:00 GMT 1998


Of note in this revision:

  1) init_alias_analysis in scan_loop, so that the alias code sees
     the new pseudo's we created in the inner loop.

  2) simplify_giv_expr looks through the movables searching for
     arithmetic to unify two invariant registers.

  3) express_from matches a few more patterns.


Number 1 is dreadfully important for Fortran.  I'm not sure how it
was missed before, but there we go.

Number 2 allows two arrays, either on the stack or in the same COMMON 
block to have their givs combined.  Cf

      subroutine foo
      common /bar/ a1(10), a2(10)
      do i = 1, 10
         a1(i) = 2*a2(i)
      end do
      return
      end

It also has affected (dare I say helped?) the situation with variable
sized arrays.  For the first time, our dear old friend resid does not
have a integer multiplication in either of its loops.  Things are still
a bit shakey here though -- some wierdness in the loop setup code 
creating three copies of N*8 in strange ways.


r~


More information about the Gcc mailing list