<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/58977>58977</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
InstSimplify: xor pattern miscompiles undef lane
</td>
</tr>
<tr>
<th>Labels</th>
<td>
good first issue,
miscompilation,
llvm:optimizations
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nunoplopes
</td>
</tr>
</table>
<pre>
This test case from Transforms/InstSimplify/AndOrXor.ll gets miscompiled because of the undef lane:
```llvm
define <2 x i4> @or_xorn_and_commute2(<2 x i4> %a, <2 x i4> %b) {
%nega = xor <2 x i4> %a, { undef, 15 }
%and = and <2 x i4> %b, %a
%xor = xor <2 x i4> %b, %nega
%or = or <2 x i4> %xor, %and
ret <2 x i4> %or
}
=>
define <2 x i4> @or_xorn_and_commute2(<2 x i4> %a, <2 x i4> %b) {
%1 = xor <2 x i4> %a, %b
%xor = xor <2 x i4> %1, { undef, 15 }
ret <2 x i4> %xor
}
Transformation doesn't verify!
ERROR: Target's return value is more undefined
Example:
<2 x i4> %a = < #xf (15, -1), #x0 (0) >
<2 x i4> %b = < #xf (15, -1), #x0 (0) >
Source:
<2 x i4> %nega = < #xf (15, -1) [based on undef value], #xf (15, -1) >
<2 x i4> %and = < #xf (15, -1), #x0 (0) >
<2 x i4> %xor = < #x0 (0), #xf (15, -1) >
<2 x i4> %or = < #xf (15, -1), #xf (15, -1) >
Target:
<2 x i4> %1 = < #x0 (0), #x0 (0) >
<2 x i4> %xor = < #x0 (0), #xf (15, -1) >
Source value: < #xf (15, -1), #xf (15, -1) >
Target value: < #x0 (0), #xf (15, -1) >
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9VcFu2zAM_Rr5IjSwZDuODz6kTQvsVKDrYbdCtuVEgywZklyk-_rRUpykSdOuxTbAkCGKfCSfSLHSzUv5uBEWO24drpnluDW6w4-GKdtq01lE774p676LrpeifYHtUjX35oc2MynxmjuLO2Fr3fVC8gZXvGYDoOgWuw3Hg2p4iyVTHCVLFK9QvETzOHxSPndBBDpCcYySG4q3WKQoucUojbV52mqjnphqnsBBNzhOEV28VqMZQ_QGnworRAuM8uvgAI8ixdcM9FYYQM_0A0h-HSIeNySD_erIHsLw5uF_5u4mwBz0g5u33U36Y0xHJjuLNwwAZHKhmsnCcHemCHqB5il2AISj_0k0-YDl0ejPaCIf3MpbBGzPGNgXM3NCK9xobhWiucPP3PiSJjsDv94-PNw_QLXiR2agvEHRjn4Go_AzkwPH0C2dNrvaBjqbV9ZbBo1yVO2nDPhcQQqbZNvCuiDZmNgV5FoEepJtPMpjz-x0dWe8fxnIr9_1YOrLYe575aKDuEDZdQUPRoOB09Dnnh-UrSbvp0aXs5l66y8QM9XTBLU3-XxUJ0iXgnoHMNRfKKRLXJP3w_23KYc62N0cFP3Xcw1ZniN9hv9pNES8JPP5IiX5Yp5GTZk0RVKwyAkneflqHIGjMfueOcehQw-jyB7Nnmgwstw419vxEugdfGvhNkM1A2XY-EkUfle90T95DW1_J6wd-Dj_skWR59GmTHiW1rCpsiSmRdzUVU7iqqjbNpkvCEkiySoubQmNgShda93gVhiYqx4JRIEBug_Sv0cHuQ8jWereiU788od2PM1WkShpTCkhJI0LmtJ0RtNmztKWJXVOMppxeMV5x4ScjSAzbdaRKX0-1bC2cCiFdfZwyKwVa8W5jxXw2eA22pRqULqXuuc28jGXPvXfqgQjCA">