g77
has the potential to better optimize code than f2c
,
even when gcc
is used to compile the output of f2c
,
because f2c
must necessarily
translate Fortran into a somewhat lower-level language (C) that cannot
preserve all the information that is potentially useful for optimization,
while g77
can gather, preserve, and transmit that information directly
to the GBE.
For example, g77
implements ASSIGN
and assigned
GOTO
using direct assignment of pointers to labels and direct
jumps to labels, whereas f2c
maps the assigned labels to
integer values and then uses a C switch
statement to encode
the assigned GOTO
statements.
However, as is typical, theory and reality don't quite match, at least
not in all cases, so it is still the case that f2c
plus gcc
can generate code that is faster than g77
.
Version 0.5.18 of g77
offered default
settings and options, via patches to the gcc
back end, that allow for better program speed, though
some of these improvements also affected the performance
of programs translated by f2c
and then compiled
by g77
's version of gcc
.
Version 0.5.20 of g77
offers further performance
improvements, at least one of which (alias analysis) is
not generally applicable to f2c
(though f2c
could presumably be changed to also take advantage of
this new capability of the gcc
back end, assuming
this is made available in an upcoming release of gcc
).