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

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] Incorrect fabs + nsz fold
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            miscompilation,
            llvm:instcombine
      </td>
    </tr>

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

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

<pre>
    https://alive2.llvm.org/ce/z/FmBrma
```llvm
define float @src(float %a) {
  %i32 = bitcast float %a to i32
  %cmp = icmp slt i32 %i32, 0
  call void @llvm.assume(i1 %cmp)

  %b = fneg nsz float %a
 %c = call float @llvm.fabs(float %b)
  ret float %c
}
```
The fabs is optimized away here, even though `fneg nsz` can flip the sign bit of zero.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxcUk2PozAM_TXmYk2VmvJ14NBOhTT3_QMhmOLdQCoSupr--lXSzky1EhKx_PzsZz_tvVwW5haKExTnTG9hcmu7yB8xWe-Gz3YK4eohPwJ1QJ22cmPaWXubd269AHWGgbo7UNfNp3XWoI5QqscXUaCOA4-yMI7W6YBwUH41QPUzpEIDNQjVCdQRYyw5IeRn7CUY7QP-ADE4lJy-gGa-JqDEh7cBU2UiAHpHlXBGW4s3J0PsnMbW3m8zA9Wyf7IANXHsJ22fSMeFL7j4-0v7CIgFKZ94vyUl4lH3_lVY_-BFXPlFhYmtqvPrnkAdf02MsR7Fo7sGmeXOA-q_-hMnXjnq4RsvGCa3XSaEUn0NCKVCoxccrVwxTIzxoHF56Ea88-p22dDmQ5M3OuN2XxV5XamibLKppZJ50CYfmYq-rmvd0JBXuuSxGGmgMZOWFBWqytVe7UvV7MxQVXpQddmMhzo_KDgonrXYb0Nk4v3G7b7Y5yrPrO7Z-uQtolm8cfNVrA7iFqB4JCBKJsmPsvhg3NzLwjFVnLO1jam3frv4uGHxwf-0CRJsMu3H4sP7s64448di3LqyCY9tAp0eR3R2yLbV_ufmi4Rp63fGzUBdGuTxe7uu7jebANQlPR6oe0q6tfQvAAD__ycS-Yc">