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

    <tr>
        <th>Summary</th>
        <td>
            Wrong folding to `fabs` (`NaN` not handled)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    https://github.com/llvm/llvm-project/blob/1ceccbb0dd9d8539fec2213566fe6cc2a05b7993/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp#L2814-L2885

Alive2 report: https://alive2.llvm.org/ce/z/y2UAwe


```llvm
----------------------------------------
define double @select_fcmp_ole_zero.2(double %x) {
#0:
  %lezero = fcmp ole double %x, 0.000000
  %negx = fsub double 0.000000, %x
  %fabs = select i1 %lezero, double %negx, double %x
  ret double %fabs
}
=>
define double @select_fcmp_ole_zero.2(double %x) {
#0:
  %fabs = fabs double %x
  ret double %fabs
}
Transformation doesn't verify!

ERROR: Value mismatch

Example:
double %x = #xfff0000000000008 (SNaN)

Source:
i1 %lezero = #x0 (0)
double %negx = #x7ff0000000000008 (SNaN)
double %fabs = #xfff0000000000008 (SNaN)

Target:
double %fabs = #x7ff0000000000008 (SNaN)
Source value: #xfff0000000000008 (SNaN)
Target value: #x7ff0000000000008 (SNaN)


----------------------------------------
define double @select_fcmp_nnan_ole_zero.2(double %x) {
#0:
  %lezero = fcmp ole double %x, 0.000000
  %negx = fsub nnan double 0.000000, %x
  %fabs = select i1 %lezero, double %negx, double %x
  ret double %fabs
}
=>
define double @select_fcmp_nnan_ole_zero.2(double %x) {
#0:
  %fabs = fabs double %x
  ret double %fabs
}
Transformation doesn't verify!

ERROR: Value mismatch

Example:
double %x = #xfff0000000004000 (SNaN)

Source:
i1 %lezero = #x0 (0)
double %negx = poison
double %fabs = #xfff0000000004000 (SNaN)

Target:
double %fabs = #x7ff0000000004000 (SNaN)
Source value: #xfff0000000004000 (SNaN)
Target value: #x7ff0000000004000 (SNaN)


----------------------------------------
define half @select_fcmp_nnan_ugt_negzero.2(half %x) {
#0:
  %#1 = fcmp ugt half %x, 0x8000
  %negx = fsub nnan half 0x0000, %x
  %#2 = fadd half %negx, 0x0000
  %fabs = select i1 %#1, half %x, half %#2
  ret half %fabs
}
=>
define half @select_fcmp_nnan_ugt_negzero.2(half %x) {
#0:
  %fabs = fabs half %x
  ret half %fabs
}
Transformation doesn't verify!

ERROR: Value mismatch

Example:
half %x = #xfc04 (SNaN)

Source:
i1 %#1 = #x1 (1)
half %negx = poison
half %#2 = poison
half %fabs = #xfc04 (SNaN)

Target:
half %fabs = #x7c04 (SNaN)
Source value: #xfc04 (SNaN)
Target value: #x7c04 (SNaN)

Summary:
  0 correct transformations
  3 incorrect transformations
  0 failed-to-prove transformations
  0 Alive2 errors
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcV11v4ygU_TXkBTXCl_jrwQ-dZiKtNJqV2tndxwowdlxhiABn0vn1K5zEsWfTJt2ZarVjVW4M59x7gHuQLnOuqbWUBYo_oHg5Y51fG1two-unTj_NuCmfi7X3G4foLYIVglXd-HXH58K0CFZKbY__bjbWPEnhEay4MhzBKhJSCM5JWeZlFtO8kgIgonGSVDIRAhiJeZrndBSnCbwvlmlXGds6BKvftPN3puWNltOvB6mk8HOx2SCgnyCLFjefIMtiRJaI3O7ft6rZSsBWboz1iN7i6VJYPz0PyefG1ghWIiT5hmD1DH_cfpXjWId3QvZ_veJ-6ObKZ48uZdVoiUvTcSUxWhDXr-OxEu3m0Sj5-E1aMwcE2REC8Q5BjlH64SABKAlL6D9wmFcykDCiSxzCYKNOCXr2HSZz0j8jlpb1bs9xHT_iBxzc7bknfMW46_F7xbiJTrkD_JQxRJ6ODHGs9KPhEPKwqHR5-EGXiH58v70aVtH_-DcKh_JkvjEal0Y6jSD1eCttUz0jiMYF8_H-_vf7UHp_MtVJ3DauZV6sJ5AdazdKDjpHonqlCOiuqioyejKMIHv4zD4jyMehHkxnxSnS-IiGUCRwyUCcHtuASi8lnO7RW4V-YbaW_sySJ8EuitivF2_D3oZNvkrBPveUdDHT-P0THa810_-l7UP-_5_3f2TXfoELYEEIedcLYGMaZ_TVPn9Fz9t9fjbYJZ-fJV3y-Suyf8Dna6aqs_Xa1f5Ry3oo2T3wcsEioNHJ5F3t8Yh5h8kuu2jwnkB2L5gbAYWDI8pyCH408oF26S4IKgN8ou34ETKM7XUcv-4O-Ok7Or0CTqzrFL67_QdBJ7MJsniL4YeSCeQwkkUDbXy-_zD7-MBenJzeAy9L-877Z-npOfpZt58DnnX4K3vVtS2zz6NiIFgYa0MV-8mpuiOA4kZfgBBcsUbJ8sab0ANt5cvAQz8irTXWfddQzMqCljnN2UwWUUpJlCxITGbrIs1KEXORL0qSlIIkhFcpExQ4ywRNgM-aAggsIgI5iUhKyZxlIuM0lhmDlOQ8QwsiW9aoodOZNc51sogimmf5TDEuletbQAAtv-J-FgGEjtAWfXPHu9qhBVGN8-4UxjdeyeIva3SNK6PKRtfYG4wS0vsm6a9XlJBwFAnB2gRj6VLJEkE-66x6e2_ZawuN4UH8toC_AwAA__8qphhw">