<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/119792>119792</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            likely FP miscompile from AArch64 backend
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AArch64,
            llvm:codegen,
            miscompilation
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          regehr
      </td>
    </tr>
</table>

<pre>
    let's take this IR:
```llvm
define float @f(float %0, float %1) {
  %3 = fcmp nnan ogt float %0, %1
  %4 = select i1 %3, float %0, float %1
  ret float %4
}
```
we're lowering it like so:
```
Johns-MacBook-Pro-2:build regehr$ ~/llvm-project/for-alive/bin/llc -o - foo2.ll
        .section        __TEXT,__text,regular,pure_instructions
        .build_version macos, 15, 0
        .globl  _f                              ; -- Begin function f
        .p2align        2
_f:                                     ; @f
        .cfi_startproc
; %bb.0:
        fmaxnm  s0, s0, s1
        ret
        .cfi_endproc
 ; -- End function
.subsections_via_symbols
Johns-MacBook-Pro-2:build regehr$ 
```
now let's look at invoking `f(+0.0, -0.0)`. at the LLVM level, the `fcmp ogt` returns false, so we get `-0.0` as the function return value. however, at least on my M1 Mac, I'm getting `+0.0` as the result of the emitted `fmaxnm` when passed those same arguments.

cc @nunoplopes @stephentyrone 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVE2PozgT_jWVSynIGALNgQPpnkjzaloavRqt9hYZKMAbYyPbJNOX_e0rO0ymp1cabRQZlV311FOfwjk5aqIaDkc4vOzE6idja0sjTXbXmv6tVuSBlw69uBD6STr8_H_IGmANFOz-V-o6A2t6GqQmHJQRHiFnA_CnTeAHBvwZH1IKvEIoj8AaDHKGkL3g0M0Lai00mtHjr6bRaNPOo7YjRZ1HmUaAX-A_Ogt2lt5B5oF--fI-CGDNjYCXllCZG1mpR5QelbwQOvMhYmDN_8yk3f5VdEdjLvuv1uw5ZE27StXjPX_Ac_wb-CmkZ79Y8xd1HvhpMHYvlLwS8FMrdVTocG9wj4MxPFEqeGJV4qjz0mhg1fn87dOf34A_n8-evnvgz5bGVQkL_HlZLZ2ldt6uUd1t1pHJ-UrWSaNxFp1xISvpIZxsUxqVaVVwMOBvf5Adcb_HI41S47Dq6AmHDWXhQskxEOXAmvMAWfN7uHeosU_uMN0gz84L6xdrunAXnvmhbRO2pZ9Vwyy-6xlY5WKNtzO9P1ry76BI9xvQD_qfdP8gD6xJ3NpuOXbnqxRn9za3Rrn_XNwPHaHNDX9MizLmgsKj1FdzCa0ERZwH4EeWRNL7-K2gYElQ9BPhly9_vKKiK6mgEG6CVRgKM3ooWOjh1WqHg1COYuQGb4Qj-aAZEQuGwkXbR5nuVngVaqUEJ3OjK4XOCW4VCecxNMgbvqb4Krrw8Bl4OQdYv1HfaP8Et-RW5dEMUaJZek99pHsvUMHwNpHGRThHPfrJOEInZkJhx3Um7V0Sa9V0XegBvWqzKLOQC5LztEyk_Zs1mnDX11lfZZXYUZ2WWc7yqqry3VQfhp6V7CCeDocqL_uhp6JPs4xEmR_aivhO1pzxPOVpxliWpXlSCmJdPxRtwaqnImeQM5qFVEmY0cTYcSedW6lO06qs-E6JlpSLy5HzVnQX0j1kTdPYbipy4Bz4M3Ae91_WdKankfTjepauM_MilYgNx3nYsLaO66BdRwc5U9J599O5l15RHVaOesPTV3wgEA7WzLg5xo3KbrWqnrxfXJgPfgJ-GqWf1jbpzLwtnn_vnxihA37agrzW_J8AAAD__zzrzSA">