Copyright (C) 2000-2012 |
GNU Info (g77-300.info)Better OptimizationBetter Optimization =================== Much of this work should be put off until after `g77' has all the features necessary for its widespread acceptance as a useful F77 compiler. However, perhaps this work can be done in parallel during the feature-adding work. * Do the equivalent of the trick of putting `extern inline' in front of every function definition in `libg2c' and #include'ing the resulting file in `f2c'+`gcc'--that is, inline all run-time-library functions that are at all worth inlining. (Some of this has already been done, such as for integral exponentiation.) * When doing `CHAR_VAR = CHAR_FUNC(...)', and it's clear that types line up and `CHAR_VAR' is addressable or not a `VAR_DECL', make `CHAR_VAR', not a temporary, be the receiver for `CHAR_FUNC'. (This is now done for `COMPLEX' variables.) * Design and implement Fortran-specific optimizations that don't really belong in the back end, or where the front end needs to give the back end more info than it currently does. * Design and implement a new run-time library interface, with the code going into `libgcc' so no special linking is required to link Fortran programs using standard language features. This library would speed up lots of things, from I/O (using precompiled formats, doing just one, or, at most, very few, calls for arrays or array sections, and so on) to general computing (array/section implementations of various intrinsics, implementation of commonly performed loops that aren't likely to be optimally compiled otherwise, etc.). Among the important things the library would do are: * Be a one-stop-shop-type library, hence shareable and usable by all, in that what are now library-build-time options in `libg2c' would be moved at least to the `g77' compile phase, if not to finer grains (such as choosing how list-directed I/O formatting is done by default at `OPEN' time, for preconnected units via options or even statements in the main program unit, maybe even on a per-I/O basis with appropriate pragma-like devices). * Probably requiring the new library design, change interface to normally have `COMPLEX' functions return their values in the way `gcc' would if they were declared `__complex__ float', rather than using the mechanism currently used by `CHARACTER' functions (whereby the functions are compiled as returning void and their first arg is a pointer to where to store the result). (Don't append underscores to external names for `COMPLEX' functions in some cases once `g77' uses `gcc' rather than `f2c' calling conventions.) * Do something useful with `doiter' references where possible. For example, `CALL FOO(I)' cannot modify `I' if within a `DO' loop that uses `I' as the iteration variable, and the back end might find that info useful in determining whether it needs to read `I' back into a register after the call. (It normally has to do that, unless it knows `FOO' never modifies its passed-by-reference argument, which is rarely the case for Fortran-77 code.) automatically generated by info2www version 1.2.2.9 |