[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