[PATCH] Flag to enable IEEE-754 friendly FP optimizations
Sergey Dmitrouk
sdmitrouk at accesssoftek.com
Mon Jan 12 11:45:44 PST 2015
Hello Mehdi,
It will require passing the flag along with TargetLibraryInfo, but it
should be possible.
I'm not sure I completely understand what the comment says. I'd turn it
into something like
if (KeepExceptions &&
(Op->getValueAPF().isNaN() || Op->getValueAPF().isInfinity()))
return nullptr;
Which means that if we don't care about floating-point exceptions at
run-time, we also don't care if host libm raises exceptions properly.
Is this correct? If yes, there is a drawback that default behaviour
will change for "some host libms", which is undesirable. Please correct
me if I misunderstood you.
Regards,
Sergey
On Mon, Jan 12, 2015 at 09:43:09AM -0800, Mehdi Amini wrote:
> Hi,
>
> Oh great some flags to help with floating point corner cases :)
>
> A question: lib/Analysis/ConstantFolding.cpp contains this code that prevent folding NaN/Inf in InstCombine:
>
> /// We only fold functions with finite arguments. Folding NaN and inf is
> /// likely to be aborted with an exception anyway, and some host libms
> /// have known errors raising exceptions.
> if (Op->getValueAPF().isNaN() || Op->getValueAPF().isInfinity())
> return nullptr;
>
> Can this be tied to KeepExceptions?
>
> Thanks,
>
> Mehdi
>
> > On Jan 12, 2015, at 12:21 AM, Sergey Dmitrouk <sdmitrouk at accesssoftek.com> wrote:
> >
> > Ping.
> >
> > On Mon, Dec 22, 2014 at 11:36:10AM +0200, Sergey Dmitrouk wrote:
> >> Hello Hal,
> >>
> >> it took me some time to change the way it works, but now new changes also
> >> cover some cases missed in the previous version.
> >>
> >> After thinking a bit more I introduced two separate flags for exceptions
> >> and rounding, as you suggested. At the moment rounding flag just
> >> disables folding, I'm not sure how to actually check that result of
> >> operation doesn't depend on rounding mode. This prevents early
> >> optimization for something like "1.0 + 2.0", so might need adjustments
> >> if there is a way to check whether rounding is important for particular
> >> operation.
> >>
> >> Using fast-math flags instead of function attributes didn't remove that
> >> much flags as they are not used in code related to constant expression
> >> folding. In fact, I had to add one more "Strict" argument to be able to
> >> prevent conversion to constant expressions, which results in losing
> >> fast-math flags.
> >>
> >> Please find updated set of patches in the attachment.
> >>
> >> Thanks,
> >> Sergey
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list