<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/97475>97475</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
integer vector miscompile from instcombine
</td>
</tr>
<tr>
<th>Labels</th>
<td>
miscompilation,
llvm:instcombine
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
regehr
</td>
</tr>
</table>
<pre>
I believe this is being mis-optimized:
```lllvm
define <4 x i32> @f(<4 x i32> %0) {
%2 = icmp eq <4 x i32> %0, zeroinitializer
%3 = shufflevector <4 x i32> %0, <4 x i32> zeroinitializer, <4 x i32> <i32 1, i32 1, i32 0, i32 3>
%4 = select <4 x i1> %2, <4 x i32> %3, <4 x i32> zeroinitializer
ret <4 x i32> %4
}
```
I'll just give Alive's reasoning, which is pretty easy to follow and seems correct:
```
regehr@ohm:~$ ~/alive2-regehr/build/alive-tv -passes=instcombine foo.ll
----------------------------------------
define <4 x i32> @f(<4 x i32> %#0) {
#1:
%#2 = icmp eq <4 x i32> %#0, { 0, 0, 0, 0 }
%#3 = shufflevector <4 x i32> %#0, <4 x i32> { 0, 0, 0, 0 }, 1, 1, 0, 3
%#4 = select <4 x i1> %#2, <4 x i32> %#3, <4 x i32> { 0, 0, 0, 0 }
ret <4 x i32> %#4
}
=>
define <4 x i32> @f(<4 x i32> %#0) {
#1:
ret <4 x i32> { 0, 0, 0, 0 }
}
Transformation doesn't verify!
ERROR: Value mismatch
Example:
<4 x i32> %#0 = < #x00000000 (0), #x00000001 (1), #x00000000 (0), poison >
Source:
<4 x i1> %#2 = < #x1 (1), #x0 (0), #x1 (1), poison >
<4 x i32> %#3 = < #x00000001 (1), #x00000001 (1), #x00000000 (0), poison >
<4 x i32> %#4 = < #x00000001 (1), #x00000000 (0), #x00000000 (0), poison >
Target:
Source value: < #x00000001 (1), #x00000000 (0), #x00000000 (0), poison >
Target value: < #x00000000 (0), #x00000000 (0), #x00000000 (0), #x00000000 (0) >
Summary:
0 correct transformations
1 incorrect transformations
0 failed-to-prove transformations
0 Alive2 errors
regehr@ohm:~$
```
cc @nunoplopes
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vk1v2zgQ_TX0ZeCAGspxdNDBtWOgpwWyxd4paSSxoEQtSblJDv3tC0q2Y_mjSYqtYMjUcDjvDefxQzqnqpYoZYsvbLGZyd7XxqaWKqrtLDPFS_oVMtKKdgS-Vg6Ug4xUW0Gj3Nx0XjXqlQomVoxvGF-xez7-tNa7ZrQVVKqWgIl1DM-gBDLxCCzmJcOHMyMuOMME2PLLOBSCCYGJDai86YD-PQ8zjFjDK1mjWuWV1OqV7MloMYx2dV-WmnaUe2NvxJhazyNeODCxVgIhCj2TBj80BBOPJ0zikQlpyv0xVrRngFcAcCHe57WPb8lfDo_3RVluzqozfn5luNQavvfOQ6V2BCutdsRw6cCSdKZVbRUI_KhVXofKd5a8fwGS7gW8gdJobX6AbAtwRI2D3FhLub9Uw_g5yorF3NQNE6ufDGP4yXArAyzO9924zXqli4N97ncw76Rz5JjYqNb53DRZEFRpzJ3We6ThPf_g8xu6ZCim0mQoomOisHd5R6pjkHUIMqrk5AXHKh2CfUi5x5DTjlsAuB51Gh3tYgr6S5GGDK_qNLD9BIsR8apkA4Vz1YrNcSH9rzW7QuCXjI-Nb1a2rjS2kV6ZFgpDrmW49LAjq8oXhtGpKh-fnv56YmIF_0jdU9g4G-nzeuLyLJtO09vCuZbKUBkm1sBQPPP9AwwfQpLD7L_Zo2CPLu0T_84oZ1o4Tu74_tv0Nr-kcqqBCZNLqHNOE48L0GtaupbqrZR-L9VruvsM6q2J_8AEf5O2ordNcpxv2AVxBJX8SQIj9E2sD8X8jP1CW33TSPtysgb54dAAP1lU7uAQgWrfceFQSqWpmHsz76wJV5VbjsMJh0DWGutun0pXj688DztN27em06YjB7MiFUUiEjmjNFpGSbKIkuh-VqdR8VBK8UCcOFIWCcwWhYiz-1jmScLv-UylyDHmS47IcRHd3yUSxTLDxUMp4yLKExZzaqTSd-EadWdsNVPO9ZQmy3i5mGmZkXbDpQ2xUS43Taf0kCvDsEMzxOH-JVYnB2boWmxmNg1d86yvHIu5Vs67NxSvvKZUtZ4qsrA_dI4IBKU1DZzEnPVWp7X3nQs1xS3DbaV83Wd3uWkYbgcW418ozfdwO8DtkItjuB3T2aX4XwAAAP__96m4Jw">