<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/54077>54077</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
select -> fneg/copysign propagates nsz incorrectly
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nunoplopes
</td>
</tr>
</table>
<pre>
Test Transforms/InstCombine/select.ll, fn copysign2:
Simplified without vectors:
```llvm
define float @src(float %x) {
%0:
%i = bitcast float %x to i32
%isneg = icmp slt i32 %i, 0
%r = select nsz i1 %isneg, float 42.000000, float -42.000000
ret float %r
}
=>
define float @tgt(float %x) {
%0:
%1 = fneg nsz float %x, exceptions=ignore
%r = copysign float 42.000000, %1, exceptions=ignore
ret float %r
}
Transformation doesn't verify!
ERROR: Value mismatch
Example:
float %x = #x00000000 (+0.0)
Source:
i32 %i = #x00000000 (0)
i1 %isneg = #x0 (0)
float %r = #xc2280000 (-42)
Target:
float %1 = #x00000000 (+0.0)
float %r = #x42280000 (42)
Source value: #xc2280000 (-42)
Target value: #x42280000 (42)
```
Dropping nsz from `fneg` makes it correct.
https://alive2.llvm.org/ce/z/tNATrd
cc @rotateright @LebedevRI
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVFFvmzAQ_jXmxWpEDCTkgYe2tFKlaZPSau_GGOLNYGSbNOmv39lQIGvWbYgEjL_77r7z3RWqPGcv3Fj8omlrKqUbg8jjU2vsvWoK0XJYGS45syspEbnHVYuZ6s5G1C1B0S0KcxTePoumk6ISvMSvwh5Ub_ERTJQ2EwRtwuGW8tgMn0pegQNcSUUtRnFoNEMkHZckOSGyw2h7N9qTJJzIsNsXGEU5LoRlFOKfzbBVWERkiTQtrz1asKbDRloH8DtOUriAag8bFOPWvGGxnhi8fO8mJqvQX_Onm_nbyKb5Iio9qtjm40uUo-jheh5sbf8nD2sfcuUkuoCXdveYnxjvrFAtnEQOZ6Y0_6D2_TyviXP8f-H5VOdUVtQZ41Jx0yKydfWhRXVGZD0a-P-H_f7bHtTh71T2HDfCgB07XEBOFGqNTylYnLvTgkh0CscLFikid-EKlOyWHM-q12ymeK-FqwSz7aISZuQlZE7DhGAEACMX1MhvkbxQXXP7Ucz6X8Rc8RYvvC2cDYLx0WXVpfezwIaQLrF_oJ16eikp16rrRDsWo1YNBoCrTnjghv7kBgsLNae1GyqDzcHazo8K8gg3leLIycoNipXS0HaPzI2hN_jZr1BR5dIdY65ltLLUQkXVB99BX3jBS37cPwVlFpW7aEcDK6zk2djYN9B7vmMc93v1dxA4rYHGDI3fjjHKc9BrmV3GWMOY64sVUw0s_EgbHjfA8gOMYCmM6bmbpkkcbrfBISuSTbVbw5UUJdskcZpuWJkUKU93nBY7FkhacGkylNwhQlr-ij0FvKMkD0RGQuLuZB3G2yRdVWvGt2VYbUhaxO5Y4pA3VMgpcYHOfEhFXxvYlMJYM29S41Rz7t0BP-1hcOus7VvVSdVxE3jvmY_-FyoavrY">