<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">