[PATCH] PR fortran/31593: Speed up loops with DO variables as procedure arguments

Tobias Schlüter tobias.schlueter@physik.uni-muenchen.de
Mon Aug 24 20:36:00 GMT 2009


Hi,

the attached patch speeds up loops where the DO variable is used as an 
actual argument in a procedure call such as
  DO I=1,1000
     CALL sub(i)
  END DO
The speedup is achieved by copying the loop var before passing it as an 
argument.  This is possible because the callee is not allowed to change 
it, i.e. the code will be compiled as if it read
  DO I=1,1000
     I_temp = i
     CALL sub(i)
  END DO

This speeds up the slow version of Thomas's testcase in comment #23 of 
the PR: it now runs as fast as the fast version.

This optimization is not performed when I is a TARGET, see the new 
testcase to see why (it works before the patch, but this particular item 
appears to have no testcase).

Built & tested, polyhedron shows no measurable change.  I would 
appreciate if someone who's more versed in the middle-end stuff takes a 
look if the trans-expr.c hunk makes sense.  I just tried to make it 
work, and it seems to, but that doesn't make it right.

Cheers,
- Tobi



More information about the Fortran mailing list