<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/138303>138303</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Formation of fmax ignores SNaN
</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>
According to LangRef, `fmax SNaN, num -> QNaN`
```llvm
; Transforms/InstCombine/fcmp-select.ll
define double @test_fcmp_select_maxnum(double %x) {
%cmp1 = fcmp ogt double %x, 1.000000
%sel1 = select nnan nsz i1 %cmp1, double %x, double 1.000000
%cmp2 = fcmp olt double %sel1, 255.000000
%sel2 = select nnan nsz i1 %cmp2, double %sel1, double 255.000000
ret double %sel2
}
=>
define double @test_fcmp_select_maxnum(double %x) {
%sel1 = fmax nsz double %x, 1.000000
%sel2 = fmin nsz double %sel1, 255.000000
ret double %sel2
}
Transformation doesn't verify! (unsound)
ERROR: Value mismatch
Example:
double %x = #x7ff4000000000000 (SNaN)
Source:
i1 %cmp1 = #x0 (0)
double %sel1 = #x3ff0000000000000 (1)
i1 %cmp2 = #x1 (1)
double %sel2 = #x3ff0000000000000 (1)
Target:
double %sel1 = #x7ffc000000000000 (QNaN)
double %sel2 = #x406fe00000000000 (255)
Source value: #x3ff0000000000000 (1)
Target value: #x406fe00000000000 (255)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVF9vuzYU_TTmxUpkriEJDzykTSJNmjo1nfZaGbCJJ_9B2ETpPv1knNCEqe0efggJXXzPuX99mHOyNZyXKH9C-S5hgz_ZvjSDsZ2yHXdJZZuPclvXtm-kabG3-Hdm2iMXCJ4xWhGh2QW_vbCXYJtB4wWie_wafqwIItvwrkh8lTrrYNMn_GfPjBO21w7B4Tfj_LPVlTQcwUHUuls4rnjtl0ohsm24kIbjxg6V4hhlxHPn34Pbe3R71-xiBo1gc_OB_IKgwGj9hMgWB7vWXYoR3eGAw7b1-MH3GadLMj43gOMqAmIMbAwz2Lh_sExvfAE2Y7ma92TRGe6Cq_vgIU5AQp7_NwP4PgN4zOBGdf0zY-z5LCyEWax340R2iO5_Vaunzo27ERL-udXX9mhpZoAv2vNNMdNqMS-twY3lziBYe3zmvRQfCEL3NoNxdjANggKR7f54_OOI6Bb_xdTAsZZOM1-f4vruL0x3iiMajLtKxowR0MtaiIzcPYE-3ogiMrzZoa-vBJ_bM-FHAInej4VPLlQIMg-RRsTnMkze6d3xY5P-D2FoIetb7ucVP2S0FqKeE7xORX8RNSMrwWcgyPOIiV3C5zCCMIsf0ow5Prp_yz_JUNKUtClowRJeputsBQRoWiSnsloT2BR1VfMcNnnDciBpJjZNw9MipbRKZAkEcpITSFdpmhdLQTJBKsJYDlCxNEMZ4ZpJtQxSt7R9m0jnBl6mdEMJTRSruHKj2AJo6WqrO6nGPUUQLjMCGEWSbqVxvr5pIgRt7stwtKiG1qGMKOm8-wzjpVejit9rab7Dh-keWBHvo2yN7bkbNTsZelWevO9cmDUcEBxa6U9DtaytRnAYc4mfRdfbv3ntERzGkoJuX6s6l_BvAAAA__9p9c1i">