[Bug fortran/86350] Missed optimization with multiplication by zero
sgk at troutmask dot apl.washington.edu
gcc-bugzilla@gcc.gnu.org
Thu Jun 28 17:24:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86350
--- Comment #3 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
On Thu, Jun 28, 2018 at 04:59:53PM +0000, amonakov at gcc dot gnu.org wrote:
>
> --- Comment #2 from Alexander Monakov <amonakov at gcc dot gnu.org> ---
> The multiplication is optimized out under -ffinite-math-only -fno-signed-zeros
> (otherwise y can be NaN if bar returns infinity, for example).
>
> Why is it ok to optimize out the call to bar even though it's impure?
>
It can be optimized out because the Fortran Standard allows it.
10.1.5.2.4 Evaluation of numeric intrinsic operations
Once the interpretation of a numeric intrinsic operation is
established, the processor may evaluate any mathematically
equivalent expression, provided that the integrity of
parentheses is not violated.
Two expressions of a numeric type are mathematically equivalent
if, for all possible values of their primaries, their mathematical
values are equal. However, mathematically equivalent expressions
of numeric type may produce different computational results.
10.1.7 Evaluation of operands
It is not necessary for a processor to evaluate all of the
operands of an expression, or to evaluate entirely each operand,
if the value of the expression can be determined otherwise.
Things may get delegate if the IEEE modules are in scope.
More information about the Gcc-bugs
mailing list