[patch, fortran] Handling of .and. and .or. expressions

Janne Blomqvist blomqvist.janne@gmail.com
Fri Jun 15 17:27:00 GMT 2018

On Fri, Jun 15, 2018 at 8:06 PM, Thomas Koenig <tkoenig@netcologne.de>

> Hi Janne,
> What about more complicated expressions like, say, "func() .and. flag .and
>> func2() .and. flag2" etc.? Can it move all the function calls to the end?
> Not at the moment.
> Like many of the front-end optimizations, this aims for the easy 80%
> which are relatively easy to achieve.

Come to think about it, is this optimization also done for impure
functions? E.g. if func() changes the value of flag, then exchanging the
order they are evaluated might change the result. Of course, this is all
the fault of the programmer, but still..

But at least for pure functions, this optimization looks Ok.

IMHO it's a mistake that the standard refuses to specify the evaluation
>> strategy in the name of some rather minor hypothetical performance
>> benefit.
> Well, it is the way it is, and it is not going to change. We might
> as well make the best of the situation as it is.
> There are other standards, such as the C standard, whose type-based
> aliasing rules can be used for optimization, but can also introduce
> hard-to-find bugs. gcc's philosophy is to use the optimization
> possibilities, and I see no reason for gfortran to deviate from that.

I agree, though I hope that the Fortran standard will eventually change to
fix this (and other craziness wrt. impure functions as well). But for the
time being, I agree we can do this.

Janne Blomqvist

More information about the Gcc-patches mailing list