<div dir="ltr">This has been raised several times (xalanc failing with -ffast-math isn't new), and I believe the last time around we've explicitly decided to keep this as undef.<div><br></div><div>A few relevant threads:<br><div><br></div><div><a href="http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20140609/220450.html">http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20140609/220450.html</a><br></div></div><div><a href="http://lists.llvm.org/pipermail/llvm-dev/2014-September/077137.html">http://lists.llvm.org/pipermail/llvm-dev/2014-September/077137.html</a><br></div><div><a href="http://llvm.org/bugs/show_bug.cgi?id=21048">http://llvm.org/bugs/show_bug.cgi?id=21048</a><br></div><div><br></div><div>Thanks,</div><div>  Michael</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 6 November 2016 at 23:31, Vedant Kumar via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The optimizer doesn't handle this right now, although it probably could since<br>
-instsimplify runs pretty late in the pipeline.<br>
<br>
Do you think extending the LibCallSimplifier is the right approach?<br>
<br>
best,<br>
vedant<br>
<br>
P.S: w.r.t the problem that motivated this patch, I think a better solution<br>
would be to go through the test programs and change their uses of sqrt().<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
> On Nov 6, 2016, at 9:31 AM, Friedman, Eli via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
><br>
> On 11/4/2016 11:15 AM, Octav Zlatior via llvm-commits wrote:<br>
>><br>
>> Hi,<br>
>><br>
>> I have noticed the following behaviour while running the SPEC benchmark suite (built with llvm, of course). One of the tests was failing (Xalanc) with a segfault (because of stack overflow) because the terminating condition for a recursion involved NaN.<br>
>><br>
>> I've checked a little further and I have noticed that, with fast-math, the square roots of negative numbers will sometimes be replaced with "return undef". But only sometimes, and only the square roots (for example, log(x) does not manifest this behaviour).<br>
>><br>
>> It turns out a rather common way of getting the value of NaN in code is to assign it the return value of sqrt(<negative number>). Because of this bug, any such assignments will basically result undefined values.<br>
>><br>
>> These two patches should provide a fix for this. The first is a test to illustrate the situation (the negative functions will be replaced with return undef in the IR), while the other is a fix for this bug.<br>
>><br>
><br>
> Your patch specifically says that "sqrt(-1)" should be lowered to NaN, but "float x = -1.f; sqrt(x)" should be lowered to the intrinsic, which has undefined behavior according to LangRef.  This seems dubious; changing the semantics of sqrt() based on the syntactic form of the source is likely to cause problems.  For example, writing a trivial wrapper for sqrt (like the one in libcxx for sqrtf) breaks your check.<br>
><br>
> Maybe we should just kill off this transform completely?  The optimizer knows how to handle a regular sqrt() call anyway.<br>
><br>
> -Eli<br>
><br>
> --<br>
> Employee of Qualcomm Innovation Center, Inc.<br>
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project<br>
><br>
> ______________________________<wbr>_________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>