<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/146476>146476</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86][GlobalIsel] In X87, no-sse2, returning floating point halts for SDAG, GISEL behavior differs.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mahesh-attarde
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/9Ejz61Goh
For code with mattr=+87x,-sse2,-sse1
```
define float @test_float_abs(ptr %argptr) {
%arg = load float, float* %argptr
%abs = tail call float @llvm.fabs.f32(float %arg)
ret float %abs
}
```
SDAG
```
error: <unknown>:0:0: in function test_float_abs float (ptr): SSE register return with SSE disabled
Compiler returned: 1
```
GISEL
```
test_float_abs: # @test_float_abs
mov eax, 2147483647
and eax, dword ptr [rdi]
movd xmm0, eax
ret
```
GISEL lowerreturn consults RETCC and adds xmm0 (Calling Convention) where as DAG does not do that.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxsVE2P2zgM_TX0hZhAlj9z8MFxPjDAnnb20FshR3SsriwFkpx0--sXcjydaTBBAjkkH0W-R1p4ry6GqIFiB8U-EXMYrWsmMZIfX0QIwklKeiv_a8YQrh6yFvgR-PFiZW912Fh3AX78Bfy4Pfz4VaYnOwJrgbVH6_BsJeFdhRFxEiE4yPbAd3X1E3j34j3x9UwjpGTrl7WSBmUIB21FQMhZIB--L_--i94Dr6_BIfBCuMs1OOBbhGoHrMX4edgRsj1qKyQ-0gDv3h_aT9BPmN4vmCCUxrPQ-uN6rW_TZhC93wwZB16vjiUJ8O17EkcBP1y9j3ao9k-9ve3b05OJnLMOshYh62bzr7F3A9kBspatP1QGh9mcg7IG_yTj9431g4kY_fZ2QEcX5QO5WNXszEOF6JDKi16TfKjU2emq9O8wkhH_LMfp9e3w15PtSZJYPM--0GrlBhEne1tOElF-5Gle5XVW5lWMEUZ-dsq7dRIXlYudkwqK_Z-Zluif08RidASxNrbwVeGo7Z3cSsPZGj_r4PHvwz9dt1wrpPRLqkhiJ7RW5oKdNTcyke84XfeRHKHwuG9PKC15NDagtBhGETaJbDK5zbYioSatijQrUl6Wydj0AxdVIUicmWR12Ys8ozIv0ppS2Vd0TlTDGS9YxVJW8iovNzmxrMplJSUVNZcF5IwmofRmGUHrLonyfqYmzcu8KhMtetJ-2V3ODd1x8QLncZVdE0Ev_XzxcYaVD_4jTVBBL0v_rS4jucXupG0v9KsnDcUeXw1-q6tIrrHvm7rOSKRn0Tc-XK0yAUcRKR2sw2W6eYcP5nsaxU1Zh1INAzm_SWann18kKoxzvznbCfgx1rceL1dnf9A5AD8uXXngx7XtW8P_DwAA__8kAW2M">