<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/141017>141017</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Miscompilation `select (fcmp nsz olt X, 0.0), -0.0, X -> select (fcmp nsz ole X, -0.0), -0.0, X`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
miscompilation,
llvm:instcombine,
floating-point
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
dtcxzyw
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
Reproducer: https://alive2.llvm.org/ce/z/Uydp8F
```
define float @src(float %x) {
%cmp = fcmp nsz olt float %x, 0.0
%sel = select i1 %cmp, float -0.0, float %x
ret float %sel
}
define float @tgt(float %x) {
%.inv = fcmp nsz ole float %x, -0.000000e+00
%sel1 = select i1 %.inv, float -0.000000e+00, float %x
ret float %sel1
}
```
```
Transformation doesn't verify!
ERROR: Target's return value is more undefined
Example:
float %x = #x00000000 (+0.0)
Source:
i1 %cmp = #x0 (0)
float %sel = #x00000000 (+0.0)
Target:
i1 %.inv = #x1 (1)
float %sel1 = #x00000000 (+0.0)
Source value: #x00000000 (+0.0)
Target value: #x00000000 (+0.0)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVE9vuzgQ_TTDxUpkBgjhwCFtirSH1UrZrtSrgSHxymBkm2zST78y0IT--f1aFAUG5j2_N2OPsFYeO6IckgdArF11eb3-B4iQ7AMxuJM2-fwyKHV9zQ_UG10PFRmIduzkXG8h2gEWgIVQ8ky4VurcrrU5AhYVARavgMU_17rfFsB3sOHzj-9qamRHrFFaOAYxt6YC3M4hJhfAjEH6AHznw6rtGUR71viHzr4yrRxbJj8yvva0zMeW1JhtSVHlmAxnCp82gVY--xaNFB5raMFqSXnN6d7_fxbsju5Xgn28lt35o2T6INmrGC8CfOBL-eFn_Z7wvYEl9Hsv4d3Mog3L52cjOtto0wondcdqTbYDTB07k5HNFTCcKvF0OPx18DvgWZgjOcDU-tUG07GzUAMxaVmrDbGhm4pWz7iLaHtFfsvw3V3taBUwuvD5YoBb78q3KJugf-vBVDPy1s470CPm5KXlnzDPHhbMt855pH-zDT9Th99yT5Knivhi_S53EvGz3GXHgjqP6izKREB5mMZpxnkSY3DKOW_ShuM2iuOYixhrUQqkOIuiMi2xwkDmyDHhCSJPkyTGdUhlXFeCY7ZtNklcQsypFVLdTnQgrR0oD-OQh2mgREnKzpOjlbbSbS_VuHH8AMFHQPRIiHays67SbSk7un0aSym746rXsnPzyDG5R6zK4Wgh5kpaZ--rO-nUOKn-6Kx7nOmSPfvz3doMNnw-Nf5wLqfFy9uQwOzt7Pn7C1tB9MS-BNEEWn2Bgg0PBqPy90PwKN1pKNeVbgGL0f50W_VG_0uVAyzGKlrAYi7kOcf_AwAA__9pq49g">