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

    <tr>
        <th>Summary</th>
        <td>
            InstCombine: incorrect fabs formation
        </td>
    </tr>

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

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

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

<pre>
    Test `Transforms/InstCombine/fabs.ll` shows the following transformation:
```llvm
define double @select_fcmp_ole_zero(double %x) {
  %lezero = fcmp ole double %x, 0.000000
  %negx = fsub double 0.000000, %x, exceptions=ignore
  %fabs = select i1 %lezero, double %negx, double %x
  ret double %fabs
}
=>
define double @select_fcmp_ole_zero(double %x) {
  %1 = fabs double %x, exceptions=ignore
  ret double %1
}
```

This is not correct as `fabs` produces a non-deterministic NaN payload, while the original function preserved the NaN payload when x > 0.

cc @arsenm @jcranmer-intel @jyknight @rotateright
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytU8Fy4yAM_Rp8YZqxcZzEBx_Spp3ZS0-9ZzDINl0MHsBtul-_Asdt2sOeNsPESOg9noTUWvnRvIAPlOzyF8eN76wbPWFPv4wPD3ZslQG0Ot76jdYYRP1g3z0NA9DOam3flelpWJE8KGtIeST5ieRHDF-W1m_j4pLQISOVdm41ULLNPWgQ4dyJcTpbDec_4CxhhzWAVRfCakr29wueRpeGGEVJeaIRRxFHvwEeaL7J0-8GZaC_LBg_t2v8ZxxiVixcBEwxEY_RqjfWwQ1NLEWiWZRTVXxJiugvIfHC757LyuMg3Lgj5bVi-9N1U55I-fgfa1YsqUfxP0r1j3S_yyx-alyf92qm_5dBeYrL2ECFdS6WiPvYXilLbKDJWTkL8JRjkLmTEMCNyigflKDP_JlO_ENbLqO290Hh3bHZrFO9MlzTbjYiqkUe8ODeQKbzGyCiwND41o_4vrfihIjl486DGePuVWDjjuDulAmgk-fjt1H9EOLe2cBRWzQzaIrdrj4cqm1VZbIpZV3WPAsqaGhuR6U8UmXWvFO1P8cim51uhhAmHweEPeHqVRjmdiPsiEYakuVzhzV6RQY0lfczxIGsaravs6FhZc1KxneCsVoWW1ZyBhx9smvFtoZ9pnkL2jekuieMjcoj-6T0MpmMLY3O0mXlUaF0sU45I9UpUw3LGStYXuR1vi2qjSxA8oOodrwo66IWWBgYudKbSLGxrs9ckzS3c-_xUOND-q9D7j32FEDSg_x8DoN1jZmNnbSdwGcpwyal9xfCHmy1">