<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/113261>113261</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Wrong `select` `icmp` folding
</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/a4819bd46d8baebc3aaa8b38f78065de33593199/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp#L4236-L4256
Alive2 report: https://alive2.llvm.org/ce/z/azNiRR
```llvm
----------------------------------------
define <2 x i1> @src_x_and_nmask_eq.2(<2 x i16> %#0, <2 x i16> %#1, i1 %#2) {
entry:
%#3 = shl <2 x i16> { 65535, 65535 }, %#1
%#4 = select i1 %#2, <2 x i16> %#3, <2 x i16> { 0, 0 }
%#6 = udiv <2 x i16> { 2, 2 }, %#0
%#7 = icmp eq <2 x i16> %#4, %#6
ret <2 x i1> %#7
}
=>
define <2 x i1> @src_x_and_nmask_eq.2(<2 x i16> %#0, <2 x i16> %#1, i1 %#2) {
entry:
%#3 = icmp ugt <2 x i16> %#0, { 2, 2 }
%#4 = select i1 %#2, <2 x i1> { 0, 0 }, <2 x i1> %#3
ret <2 x i1> %#4
}
Transformation doesn't verify!
ERROR: Target's return value is more undefined
Example:
<2 x i16> %#0 = < #x0003 (3), #x0003 (3) >
<2 x i16> %#1 = < #x0080 (128), #x0000 (0) >
i1 %#2 = undef
Source:
<2 x i16> %#3 = < poison, #xffff (65535, -1) >
<2 x i16> %#4 = < poison, #x0000 (0) [based on undef value] >
<2 x i16> %#6 = < #x0000 (0), #x0000 (0) >
<2 x i1> %#7 = < #x1 (1), #x1 (1) >
Target:
<2 x i1> %#3 = < #x1 (1), #x1 (1) >
<2 x i1> %#4 = < #x1 (1), #x1 (1) >
Source value: < #x1 (1), #x1 (1) >
Target value: < #x1 (1), #x1 (1) >
Summary:
0 correct transformations
1 incorrect transformations
0 failed-to-prove transformations
0 Alive2 errors
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVs1u4zYQfprxhYhBDfV70CGOY6DAogXcBXoMKImymUqkl6TcZJ--IGU7llebTXqqYdgiZ-b75odDDbdW7pQQJSQrSNYLPri9NmWl1e55UM-LSjev5d65gwV2D7gB3Oyk2w_VstY94Kbrjue_u4PRz6J2gJuq0xXghsd5VFRNnDZ5xUVVM855XrG8zXKaJo1gLClYVBRXONLbfTVc2Vab3gJuflPWPei-kkpMVw-6P3Aj7LI-HADZlxhZevclxiQFugZ6P_7ed_IokBhx0MYBuyfTYHgQLz39Upsd4Kb2NN-96Pvvcru9xoKUjt_g7ZXg7oOfUbsRrVSCAHtA8kJkBOyRQEytqZ9enrhqnlTP7d9P4tsSAfOLWhr0MAFkFPCBzAkiL5DRaYWABYFsNdIK5cyrDzysyEmHEWBrYvfdLV62ImmSsMQjhgcC2TrwnpgmMPEIIzpRu4kD836yGUG2IiEuGogm6GlAHxp5nDEKJDj1jk7ts2Av6_5AxLdZh-I32_Rsa4S7KdIIdqr82Ulga2CP_9vShqiHnZsFHdmmSRwxPl7WmeL9ID4V_f3ExjeJvVwD3EmtSKOFVYCZI0dhZPsKGF334ON2-8fWN_hXbnbCAWbWEw1GkSPvBkGkJb02ggxqrFIzsX7h_aETlxzOJiskA5g_KOyFUsoIYM4Ai_HwTPfI5VDMVvMGK6feLsJ8ihZ26QTtrQpjU_horiP5Uw-mfj8QdiE_aGm1OhO2bdt6wkvf30W_DCT-Cda180ALSFYVt6IhWo0uj0WBZP0-fHqb8zfQd7M017cTqCjk-wrnsnEFMh7D8Tz9kNC5fH4Yeeb0fxpkrPQpkez-U7ZjUP_N9sQ-9D2f3DqU1NoYf1O4Sefas0JEpPqFCiUtl51o7pz288RR_Fzx9GYXxmhjb17Q144umpI1BSv4QpRRhkWS0bhIF_uSiSpLUsqTBDNB26JgjFUiazIaUWySdCFLpBhHFJHGUZykS8arto2yos1iGud5BTEVPZfdZX5YSGsHUUYRwzRadLwSnQ2jFaIS_5AgBUQ_aZkyDE3VsLMQ005aZ99gnHSdKP8yWu0IpHS8gCGlfuEvdP_Y6q6RarcYTPf5CS144serk6vHEv8NAAD__6idjLA">