<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">