[J3] function references and optimization

Clune, Thomas L. (GSFC-6101) thomas.l.clune at nasa.gov
Tue Oct 9 16:28:43 EDT 2018

The proverbial cat left that bag long ago …     Users are now accustomed to the “default” behavior of their favorite compiler.  (And rant about defaults in the others that are different.)

Thus, vendors cannot generally make “standard conforming” the default without significant grief from their users.   It is what it is.

On Oct 9, 2018, at 4:21 PM, Van Snyder via J3 <j3 at mailman.j3-fortran.org<mailto:j3 at mailman.j3-fortran.org>> wrote:

On Tue, 2018-10-09 at 20:15 +0000, Bill Long via J3 wrote:
On Oct 9, 2018, at 2:44 PM, Robert Corbett via J3 <j3 at mailman.j3-fortran.org<mailto:j3 at mailman.j3-fortran.org>> wrote:

Van's latest e-mail led me to think
of a possible problem.  Suppose
a program contains the statement

    f(x) = y

and the assignment statement

    x = y - f(1.0)

Does the mathematical equivalence
rule allow the expression to be
replaced with 0.0?  What if f is an
internal procedure that returns the
value of y?

Oracle Fortran probably does the
first optimization at high
optimization levels.  Statement
function references are inlined,
so the optimization phase would
see the expression as y - y.
Oracle Fortran probably does
not do the optimization if f is an
internal procedure.  The
optimization could matter if the
value of y is infinite.

Or a NaN.

Like similar examples, I would expect the default behavior to enable
optimizations that improve performance at the expense of strict IEEE
rules. But there are usually compiler options to shut down
optimizations, such as inlining or expression simplification.   If you
have “well behaved” data, the optimized version is usually preferred.
Real world simulations normally don’t involve infinities or NaNs. But
if you want to double check, you can turn off the floating point
optimizations and see if that affects the answer.

It shouldn't be necessary to turn off things for which the standard
makes no provision.  It should be necessary to request them, each one
explicitly.  They shouldn't be hiding behind a general level of
optimization that does several very useful but perhaps not harmful

For example, I'd be happy if the processor does inter-statement register
optimization, but not if it secretly does some inter-statement
mathematically-equivalent transformations.  The standard's permission
for mathematically equivalent transformations applies only within
expressions, and only to intrinsic operations.


Robert Corbett

Bill Long                                                                       longb at cray.com<mailto:longb at cray.com>
Principal Engineer, Fortran Technical Support &   voice:  651-605-9024
Bioinformatics Software Development                      fax:  651-605-9143
Cray Inc./ 2131 Lindau Lane/  Suite 1000/  Bloomington, MN  55425

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.j3-fortran.org/pipermail/j3/attachments/20181009/2f5c00a8/attachment-0001.html>

More information about the J3 mailing list