<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63055>63055</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
x86 wrong code for floating point comparison
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
cbeuw
</td>
</tr>
</table>
<pre>
From https://github.com/rust-lang/rust/issues/112170
```llvm
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @fn1() {
start:
%_6 = fadd double 0.000000e+00, 0.000000e+00
br label %bb2.outer1464
bb2.outer1464: ; preds = %bb2.outer1464, %start
%0 = icmp eq i32 0, 0
br i1 %0, label %bb15.preheader, label %bb2.outer1464
bb15.preheader: ; preds = %bb2.outer1464
%_23.le = fcmp une double 0x7FF8000000000000, %_6
%_30 = zext i1 %_23.le to i64
tail call void @print_var(i64 %_30)
ret void
}
declare void @print_var(i64)
```
`%_30` should be 1, as `NaN != 0` is true, however on x86 `print_var` gets called with 255:
```asm
fn1: # @fn1
xorps xmm0, xmm0
addsd xmm0, xmm0
mov edi, 255
jmp print_var@PLT # TAILCALL
```
https://godbolt.org/z/5f447cnfn
`opt -O3` is correct:
```llvm
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @fn1() local_unnamed_addr {
tail call void @print_var(i64 1)
ret void
}
declare void @print_var(i64) local_unnamed_addr
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVc2O4ygQfhpyQY4A29g5-JCeVqSVWrMr7dxb2JQTZjF4AXcy8_QriPPj9My0tKdBkSFQP19V8RXCe7U3AA0qn1D5vBJTOFjXdC1Mx1Vr5bdm5-yADyGMHuVbxHaI7fYqHKZ23dkBsZ2bfMi0MPt5jdhOeT-BR2xHKaMVQeQZke385eT80_ptOG8F4fYQsBRBaPHNTgGj_BkjxiAbUL6FbGQVQfk2Z-kT_9Ll37jiRfpk6rLo66hEWZ2ZOi74RYcX2d-U1YgxvAAQnBo1XJyfav7Ki2wy_xh7NJlWZjplezPd1OZJQq8M4DerJEYF6Q1F0fgGo-ppFvFBuIDyiwbGiJWvPHnqhZRY2qnVgMmapAGIPRGC2KeHnat667AWLehop23Z2k4BHC14sUS2OEru8yc8OpB-DnKpHB0iViaw90hJklbdMGL4F6uc4TO2eziKJsm4f4eMluvRwQGEBPdw9AvQC60PUS9yyvL1XME-wp0MXHN7qna7mtyNOdxYhzsL-Tna73AKc1Cz0WCxunkLQmncCa2vdR-dMuH1TTjE6iSYjKV7MJt3EGbpMxOq58eL1Gnh4GcWb6auHHok1tklJ9gf7KQlbgHTGKbwGHHyWXzGiNEYXhJSHgc3QRQ42CO8gcPW4FPNo_DNOSd4D8GnaEHiowoHzMoyNoMlGuFnQkcKxLqx_EKIOQPncbJu9HEehlSENJ8lhJRe_vhoHoN9SzNIFQUikMX512HEN-wF-evlC34_IrQv2z9ePm1fXn6Y04d-Z2VrdVhbF5vcd8R2ZV8UVWd681ACOwac_ZnP6e2sc9CF96n6HZrf_-t99_H-tPNp2wn9OhkjBpCvQkoXm-GlUB9zhyK2eWTNlTRLBB9S5j2Wh1qsZJPLTb4RK2gor0tOK1LWq0NTt8DLqiNF1Rac1Lzb1CWvC86p7Gva9SvVMMJywgmlpKzyel1WVdfKXm7yTgJpOSoIDELpdax3vD2r9DI2PCdluUrd0F8eXtdEoayd9h4VRCsf_E0tqKChidQ8Omv2uLMScG8d7rUVQZk9Hq0yAXd2GIVT3prV5HTzi1c73cDzlI3Ofo3X9O7hTgj_CwAA___DHzyC">