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