<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/140994>140994</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] `(fcmp une T, F) ? T : F --> T` should not rely on the nsz flag on fcmp
</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/_FgncC
```
define double @src(double %x, double %y) {
%cmp = fcmp nsz une double %x, %y
%cond = select i1 %cmp, double %x, double %y
ret double %cond
}
define double @tgt(double returned %x, double %y) {
ret double %x
}
```
```
Transformation doesn't verify!
ERROR: Value mismatch
Example:
double %x = #x8000000000000000 (-0.0)
double %y = #x0000000000000000 (+0.0)
Source:
i1 %cmp = #x0 (0)
double %cond = #x0000000000000000 (+0.0)
Target:
Source value: #x0000000000000000 (+0.0)
Target value: #x8000000000000000 (-0.0)
```
`nsz` flag should not be propagated from fcmp into select.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVE2PozgQ_TXFxUpkCgjhwIFOGmlPK2Wjva4cY4hXxka2yST59SMTOh_TrZlGCPzBq0e95yrmnOy0ECVkb4DYeH6-Xn4AImTbiI3-aGw5L0YH01zKnRisaUYuLCQVOXo_OEgqwBqwZkqeBC6VOvVLYzvAmgvA-gpY_1d3mm-AVrCi802rRrRSC9KY8aAEgZQ6ywHXH3PMzoAb8pheAAsC-RvQioQ57wcCyZa0YaDdlYxP0Wb0BPv43uhmAjihBPdExnOUV5pPrAFuhX9aC5FCMvk2PL_IxHf-kYkVfrRaNH9K6ZXj_CB40ux5vLdMu9bYnnlpNGmMcBow9-QkrGwvgPHt7953u793wa5_mRoF6aXrmefHefPM-kGJYCKtntgnoQCT85q-XgRwvaBLCli8IC53BP0CAfh2xwCt_jGj5TPp3YZHgID4RHC375sce2Y74W8cNz5yCgIEJb4T4oZ_xfxejF-M0u4KK0paxTrijmZUDdHGk4MggzUD65gXDWmt6W8nWGpv5qO5BFpFTZk0RVKwSJRxnubrNcaYR8eyaFJsKG1F2sQiZvmqzXNcIedJnLdFRiNZIsWMZogU03WaLxMu8jzDNOZtFhcrBikVPZPqXqqRdG4UZZzSokgjxQ5Cubkl9NJx0w9STYcsdAbcAGJAQlJJ7Tw3_UFqcd9qlWFe6m4xGKn93EtsGRCLw9g5SKmSzrsHu5deTS3oL-38Zg6XbUlQEteTOKG096F26qlikprsSTClJosFJO9kH5R-EtkKdSFGE38UU2uYTDB6UjoarSpfW1cn_XE8LLnpAespt9trMVjzv-AesJ4kcoD1rNKpxJ8BAAD__y--gaE">