<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62401>62401</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Miscompilation on vector operations with undef and poison elements
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ericliuu
</td>
</tr>
</table>
<pre>
The following test case is miscompiled by InstCombine:
```llvm
define <2 x i32> @src(<2 x i1> %x, <2 x i32> %y) {
%0:
%sext.i1 = sext <2 x i1> %x to <2 x i32>
%r = urem <2 x i32> %y, %sext.i1
ret <2 x i32> %r
}
=>
define <2 x i32> @tgt(<2 x i1> %x, <2 x i32> %y) {
%0:
%1 = icmp eq <2 x i32> %y, { 4294967295, 4294967295 }
%r = select <2 x i1> %1, <2 x i32> { 0, 0 }, <2 x i32> %y
ret <2 x i32> %r
}
Transformation doesn't verify!
ERROR: Value mismatch
```
Here is the alive2 output that produces an example input that causes a value mismatch: https://alive2.llvm.org/ce/z/JX-TLu
And here is the original IR file that produced the miscompilation:
```
define <2 x i32> @zext_bool_urem_divisor_vec(<2 x i1> %x, <2 x i32> %y) {
%ext = zext <2 x i1> %x to <2 x i32>
%sext.i = sext <2 x i1> %x to <2 x i32>
%sext.i1 = sext <2 x i1> %x to <2 x i32>
%r.i2 = xor <2 x i32> <i32 42, i32 -7>, %sext.i1
%r.i = xor <2 x i32> <i32 42, i32 -7>, %r.i2
%r = urem <2 x i32> %y, %r.i
ret <2 x i32> %r
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVd2OqzYQfhpzM9oIxhDCBRe7yYl6qlaVVquqdytjhuDK2NQ2Odl9-grYZJP9qZTtkaJgxvPP980I79XOEJUsu2PZJhJDaK0rySmp1TBEla2fyoeWoLFa2x_K7CCQDyCFJ1AeOuWl7XqlqYbqCb4bH9a2q5Qhxm9ZvGHx8X8Zzz-t990sqqlRhoDxNcIBFEfGvwFLY-8kw9VRnExSzA4M1291MXtiWADL716CYBaf4sJ47-kQFioBxjcwnuGdWwj20u2ZtZvsBkfdh5HXZxGOVo7Ce133kl6-eTnwzSnQZ10Iu_DTujDXr2TXA_3zWSn5HaRYpMUyxyIbJa9vcMr8rC2eNMn3DU0-yDC_g3gUx5Ojjyu4pn8PThjfWNeJoKyB2pI3DPMAe3KqeWKYnEPv2_39H_eM38KfQg80QrYTQbZvcHlu8Qu5Cd2hJRBa7QnBDqEfAoRWBOidrQdJHoQBOoiu1wTKnK6lGPx4CfvLePwW2hB6P34b3DLczq4XIyMW1u0YbiUx3D4z3P76183Db8Ocza2poT3LyDq1U0Zo-H4PjdJ0kVQ9qZxoOTXoMyr-NwCf6RAeK2v140iAx1rtlbfucU9fZeeEnZmDG3i-mowz0b7A5P8_BhYKJ9ODdW-L5GvFEVIc6x9PN_lo--FomD19xdGYwJVjyS3UdSPpCIqoLnld8EJEVCbLFWYFTzlGbVln1aqQkuJGppTKpqgKiU0jeZHiMl_mkSoxRh6nmCdJzDNcrDKOSZ2uKK0wXxYxS2PqhNInxEfK-4HKJaZxEmlRkfbHReTKUemmGnaepbFWPvhXs6CCnlbW-b7JNvD7BezBGtiTDNaB7clNMg8_VGhhMDU1IEwNvVXeGiBNHZngo8Hp8pKlOxXaoVpI2zHcTttrftz0zv5NMjDcTmV4htupkn8DAAD__1Q8Ars">