<div dir="ltr"><div>It sounds like the legalizer is lowering `fmaxnum` to a libcall because it is not a legal node for `f64` and in doing so, it is producing the `build_pair` to reassemble the results of the libcall. And presumably, it is assuming that the new nodes do not need legalization or something along those lines.</div><div><br></div><div>Justin, it would probably be good if you could provide the DAG before and after legalization both with and without your patch. Then we can see how it was handled before your patch and how it is handled now and the difference should allude to the problem.</div><div><br></div><div>N<br></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Jan 2, 2019 at 10:54 AM Justin Hibbits via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
I have a custom lowering operation on ISD::BITCAST for the PowerPC/SPE<br>
target, to convert 'f64 bitcast (i64 build_pair i32, i32)' into a 'f64<br>
BUILD_SPE64 i32, i32' node, which can be seen at<br>
<a href="https://reviews.llvm.org/D54583" rel="noreferrer" target="_blank">https://reviews.llvm.org/D54583</a>. However, when building compiler-rt's<br>
lib/builtins/divdc3.c an assertion is triggered that BUILD_PAIR is not<br>
legal on line 24.  There should be no bitcast(buildpair) anywhere in<br>
the generation, as it should all be lowered.  However, this is not the<br>
case when lowering to a libcall it seems.  The relevant debug output,<br>
is here:<br>
<br>
Creating new node: t118: i64 = build_pair t117,t116, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22<br>
Creating new node: t119: f64 = bitcast t118, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22<br>
Created libcall: t119: f64 = bitcast t118, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22<br>
Successfully converted node to libcall<br>
 ... replacing: t38: f64 = fmaxnum t36, t37, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22<br>
     with:      t119: f64 = bitcast t118, /home/chmeee/freebsd/contrib/compiler-rt/lib/builtins/divdc3.c:24:22<br>
<br>
Is this a real bug, or am I missing something in my patch?  After<br>
spending quite a while on it I'm at a loss.<br>
<br>
Thanks,<br>
Justin<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>