<div dir="ltr">Sorry about the delay, I saw the thread only today.<div><br></div><div>There's an existing bug report about this already btw: <a href="https://bugs.llvm.org/show_bug.cgi?id=31872">https://bugs.llvm.org/show_bug.cgi?id=31872</a>. When I looked into it last time ICC and GCC had different fast division implementations. With -fp-model fast=1 ICC promotes floats to doubles and doubles to 80-bit long doubles to avoid loss of precision. With -fp-model fast=2 ICC uses the original type, but does one division for floats to get a reciprocal instead of doing two divisions, and two (in one instruction) divisions for complex double. GCC just uses two divisions every time without any type promotion. </div><div class="gmail_extra"><br><div class="gmail_quote">On 9 November 2017 at 16:19, Richard Campbell via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span class="gmail-"><br>
<br>
> On Nov 9, 2017, at 4:05 PM, Hal Finkel <<a href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a>> wrote:<br>
><br>
><br>
> On 11/06/2017 12:29 PM, Hal Finkel via cfe-dev wrote:<br>
>> (actually cc'ing Alex this time)<br>
>><br>
>> On 11/06/2017 12:18 PM, Hal Finkel via cfe-dev wrote:<br>
>>> [+Alex]<br>
>>><br>
>>> On 11/06/2017 11:59 AM, John McCall wrote:<br>
</span><span class="gmail-">>>> I'd like to add that Alex L. looked at this in some detail in 2013. For some relevant notes, see PR17248 (and how divide is handled in <a href="https://github.com/hyp/flang/blob/master/lib/CodeGen/CGExprComplex.cpp" rel="noreferrer" target="_blank">https://github.com/hyp/flang/<wbr>blob/master/lib/CodeGen/<wbr>CGExprComplex.cpp</a>). There are indeed more- and less-numerically-stable ways to implement complex division. For an extended discussion, I recommend looking at <a href="https://arxiv.org/pdf/1210.4539v2.pdf" rel="noreferrer" target="_blank">https://arxiv.org/pdf/1210.<wbr>4539v2.pdf</a> -- There are certainly versions that are reasonable to inline, especially in the fast-math context, and I support doing so. Alex found that we had to use Smith's algorithm in order to pass LAPACK's regression tests.<br></span></blockquote><div><br></div><div>Smith's might be too slow for -ffast-math though, especially if <span style="font-size:12.800000190734863px">__divsc3 is doing a regular division.</span></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span class="gmail-">
><br>
> One more thing, we can use the cheaper (but less numerically-stable formula) when we have #pragma STDC CX_LIMITED_RANGE ON.<br>
><br>
> -Hal<br>
<br>
</span>Again, by far the biggest performance problem right now is that it’s making a function call, rather than the specifics of the arithmetic. One would hope that simply inlining the existing __divsc3() and allowing the compiler to eliminate the inf and nan branches (which it should do automatically with -ffinite-math-only or CX_LIMITED_RANGE) would result in performance not noticeably slower than the previous baseline.<br>
<br>
Unfortunately, no one seems to be able to tell why this problem went away for __mulsc3 in July 2015 (a change in CGExprComplex.cpp does NOT seem to have been involved) after Chandler’s earlier mods in r219557 originally caused __mulsc3 to start issuing function calls. If we knew why __mulsc3 started being inlined again, we’d be able to apply the same fix to __divsc3.<br>
<span class="gmail-HOEnZb"><font color="#888888"><br>
Richard<br>
</font></span><div class="gmail-HOEnZb"><div class="gmail-h5">______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
</div></div></blockquote></div><br></div></div>