[J3] function references and optimization

Toon Moene toon at moene.org
Thu Oct 11 17:18:50 EDT 2018

On 10/10/2018 02:26 AM, Malcolm Cohen via J3 wrote:

> Robert Corbett writes:
> <<<
> Suppose
> a program contains the statement
> function
> 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?
>  >>>
> Yes.
> No matter what kind of function F is, if the processor “knows” that the 
> value of the function is y, it need not evaluate the function reference 
> at all.
> This reduces the statement to the well-known
> x = y – y
> and by the mathematical equivalence rule, y-y is zero so no need to 
> evaluate Y either, giving us x = zero.
> It is absolutely standard-conforming to do mathematically equivalent 
> transformations.

On the GNU Fortran mailing list we had a similar, absolutely 
unproductive, discussion a few months ago, where some of the 
participants believed that short circuiting the following logical 

IF (A .AND. F(X)) THEN ...

(with A and F being logicals) was a huge problem with the language, 
because Fortran now had impure functions (which meant that doing this 
with or without short circuiting would yield different results).

But this isn't a problem of functions, it's a feature of expressions.

It would just as well be a problem if the programmer depended with his 
life on the expression:

0 * IF(X)

with IF being an integer function, to lead to the evaluation of the 

This has been the behavior of expressions in Fortran (as I showed by 
quoting the Fortran 77 standard, and Nick Maclaren by quoting the 
Fortran 66 standard) for a long, long time.

People who find this a problem probably are using a hammer to drive a 
screw into the wall.

Kind regards,

Toon Moene - e-mail: toon at moene.org - phone: +31 346 214290
Saturnushof 14, 3738 XG  Maartensdijk, The Netherlands
At home: http://moene.org/~toon/; weather: http://moene.org/~hirlam/
Progress of GNU Fortran: http://gcc.gnu.org/wiki/GFortran#news

More information about the J3 mailing list