[llvm-dev] [cfe-dev] Should isnan be optimized out in fast-math mode?

Arthur O'Dwyer via llvm-dev llvm-dev at lists.llvm.org
Mon Sep 20 10:15:39 PDT 2021


On Mon, Sep 20, 2021 at 1:11 PM Aaron Ballman via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> On Mon, Sep 20, 2021 at 1:04 PM Mehdi AMINI via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
> >
> > I'd find it unfortunate though that in a mode which specifies that the
> result of floating point arithmetic can't have NaN we can't constant fold
> isnan(x) where x is a potentially complex expression (think that x could be
> dead-code if not for the isnan).
>
> I think part of my concern is with the "result of floating point
> arithmetic can't have NaN" statement. I consider this case:
>
> if (isnan(foo / bar)) {}
>
> to be fundamentally different from this case:
>
> if (isnan(foo)) {}
>
> because the first example can never result in the if branch being
> taken with -ffinite-math-only while the second example can.


Mehdi's statement is consistent with your interpretation, yes.  In the
first case, "foo / bar" is the result of floating-point arithmetic.  In the
second case, "foo" is not the result of floating-point arithmetic — or at
least, you didn't demonstrate that it was.

Of course if the preceding line was

    foo = foo / bar;
    if (isnan(foo)) {}

then we can constant-fold `isnan(foo)` to false, as Mehdi said, because
`foo`'s value is the result of floating-point arithmetic.

HTH,
–Arthur
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210920/c14edfc8/attachment.html>


More information about the llvm-dev mailing list