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

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] nnan should not be propagated
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            miscompilation,
            llvm:instcombine,
            floating-point,
            generated by fuzzer
      </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/ugLcnT
```
; bin/opt -passes=instcombine test.ll -S
define float @clamp_float_fast_unordered_strict_minmax2(float %x) {
  %cmp2 = fcmp nnan ninf ugt float %x, 1.000000e+00
  %max = select nnan ninf i1 %cmp2, float %x, float 1.000000e+00
  %cmp1 = fcmp nnan ugt float %x, 2.550000e+02
  %r = select i1 %cmp1, float 2.550000e+02, float %max
 ret float %r
}
```
```
----------------------------------------
define float @clamp_float_fast_unordered_strict_minmax2(float %x) {
#0:
  %cmp2 = fcmp nnan ninf ugt float %x, 1.000000
  %max = select nnan ninf i1 %cmp2, float %x, float 1.000000
  %cmp1 = fcmp nnan ugt float %x, 255.000000
  %r = select i1 %cmp1, float 255.000000, float %max
  ret float %r
}
=>
define float @clamp_float_fast_unordered_strict_minmax2(float %x) nofree willreturn memory(none) {
#0:
  %cmp2.inv = fcmp nnan ninf ole float %x, 1.000000
  %max = select nnan ninf i1 %cmp2.inv, float 1.000000, float %x
  %.inv = fcmp nnan ole float %max, 255.000000
  %r1 = select nnan i1 %.inv, float %max, float 255.000000
  ret float %r1
}
Transformation doesn't verify!

ERROR: Target is more poisonous than source

Example:
float %x = #x7f800000 (+oo)

Source:
i1 %cmp2 = poison
float %max = poison
i1 %cmp1 = #x1 (1)
float %r = #x437f0000 (255)

Target:
i1 %cmp2.inv = poison
float %max = poison
i1 %.inv = poison
float %r1 = poison
Source value: #x437f0000 (255)
Target value: poison

Summary:
  0 correct transformations
  1 incorrect transformations
  0 failed-to-prove transformations
  0 Alive2 errors
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0lltvqzgUhX-N82IlMhsIyQMPaXMijTTSSD19r4zZEI98QbbJSfrrR1xCLk07Z2bOoEotNmvtxf6Abu69rA1iTtInAlAGcXw__SAAJN3OeBv21uXj4qyw5Sl_wcbZshXoSLyh-xAaT-INgR2BHVfygLBQ6qAX1tUEdgIJ7N4J7Nr6d2FeCduQJRt_2IbET7SQhsDONoHOG-49ehJvpfFBWF1IgzSgDwul6Pw7YZsSq26tUpYHShImFNfNW3_6VnEf3lpjXYkOyzcfnBThTUuj-REIrEYRpEcCa0qyJ8I2tDsXugFK4i2thG6oMdxQI01F2zrQa9EzjRasP5DAE2NnvebHXu5RoQhXBjI623fiW6vh7LGh0E10F-hjFlik6SSFs9RdJ5nqR5eKd7LrXJofOxuHV6VcRynb3nO7-nv-k8f_QI9AzLpn719z_IUE_xm7NL2T_T23i-QBs0-hxVsSf_ulrTe2coj0h1TKYWidoRq1dScCK2MNfklnIc3hESGr8L8T6swfcLnlNto9CHKToWvrY07RhxhDgtvqF4sP9D7SiiZcr44bX1mneZDW0NKiNwSyQA_oZHUi0F_KNt9eXv546T6_r9zVGKj0VFuHtLHSW2NbT8OeG-pt6wSOkiPXjcIByKUh_d0QiI9ZterzUQIrAk_WElgPyu-DSy-8dLsXDvWuDc-cpp3LszyV6lZW0eB_6cK0ncRZdU4CaTrlGO71PsdE8qezfKEY6U4bw63TA1dt14DP440cpgsnh86k1Zq70_lVYFRY57qnJ9zQ9v1uRKX5ap_RikuF5TzYeePsAT-5atP_J6bonHX-7os9K_O4XMdrPsM8ypI1RCxZrmb7POGJqNIiK0TEknQZFWVW8jIp-LpalRAvZzIHBilbsmUUJVmyXBRJIgSwai3SdYIZkISh5lJNI8BMet9iHiVxBGymeIHKj6OGll5Y3UjVB-8mDngmAJ2SxJurEWDa6jlJU88bK02Ylms06HjAkhYnWrXv7-jG-cXlndu8aGtPEqakD_6SLMig-rHnN-PD81gq3Q4vtd_bVpXU2EALpI2zDa-7ErPWqfx26Kll2LfFQlhNYNenH351fP5EEQjs-iZ4AruxD4cc_goAAP__VajRMA">