<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">