<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/113301>113301</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Wrong canonicalization of `add` and bitwise logic operation
        </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/f1ade1f874db066a46142cacbb67f80d272862ed/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp#L2158-L2200

Alive2 report: https://alive2.llvm.org/ce/z/n2TNxF

```llvm

----------------------------------------
define <2 x i8> @t5_splat_undef_0b1000.2(<2 x i8> %x) {
#0:
  %#1 = xor <2 x i8> %x, { 15, undef }
  %x.lowbits.are.zero = icmp eq <2 x i8> %#1, { 0, 0 }
  %x.biased = add <2 x i8> %x, { 16, 16 }
  %x.biased.highbits = and <2 x i8> %x.biased, { 240, 240 }
  %x.roundedup = select <2 x i1> %x.lowbits.are.zero, <2 x i8> %x, <2 x i8> %x.biased.highbits
  ret <2 x i8> %x.roundedup
}
=>
define <2 x i8> @t5_splat_undef_0b1000.2(<2 x i8> %x) {
#0:
  %x.lowbits.are.zero = icmp eq <2 x i8> %x, { 15, undef }
  %#1 = and <2 x i8> %x, { 240, 240 }
  %x.biased.highbits = add <2 x i8> %#1, { 16, 16 }
  %x.roundedup = select <2 x i1> %x.lowbits.are.zero, <2 x i8> { 15, undef }, <2 x i8> %x.biased.highbits
  ret <2 x i8> %x.roundedup
}
Transformation doesn't verify!

ERROR: Value mismatch

Example:
<2 x i8> %x = < #x00 (0), #x00 (0) >

Source:
<2 x i8> %#1 = < #x0f (15), #x00 (0)   [based on undef value] >
<2 x i1> %x.lowbits.are.zero = < #x0 (0), #x1 (1) >
<2 x i8> %x.biased = < #x10 (16), #x10 (16) >
<2 x i8> %x.biased.highbits = < #x10 (16), #x10 (16) >
<2 x i8> %x.roundedup = < #x10 (16), #x00 (0) >

Target:
<2 x i1> %x.lowbits.are.zero = < #x0 (0), #x1 (1) >
<2 x i8> %#1 = < #x00 (0), #x00 (0) >
<2 x i8> %x.biased.highbits = < #x10 (16), #x10 (16) >
<2 x i8> %x.roundedup = < #x10 (16), #x02 (2) >
Source value: < #x10 (16), #x00 (0) >
Target value: < #x10 (16), #x02 (2) >


----------------------------------------
define i8 @t5_splat_undef_0b1000.3(i8 %x) {
#0:
  %#1 = xor i8 %x, undef
 %x.lowbits.are.zero = icmp eq i8 %#1, 0
  %x.biased = add i8 %x, 16
 %x.biased.highbits = and i8 %x.biased, 240
  %x.roundedup = select i1 %x.lowbits.are.zero, i8 %x, i8 %x.biased.highbits
  ret i8 %x.roundedup
}
=>
define i8 @t5_splat_undef_0b1000.3(i8 %x) {
#0:
  ret i8 %x
}
Transformation seems to be correct!

Summary:
  1 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/eJzMV11v6jgT_jXDjVVkT77gIhe0FOmVjt4j9VS7e1c5iQOukpi1HUr761c2kCYl9EPnnNUiFJJ4_MyMnwfPmBsj140QKUTXEC0nvLUbpdNMNevHtnmcZKp4TjfWbg0EC8AV4Got7abNprmqAVdVtTv9XG21ehS5BVxllcoAVyXjhWDlLAmLjMYxD2MWYs7zLIuTckYLTHAWoyh6ONLNu9e8MaXStQFc_a8x9kbVmWzE8GnRFN_1X0pP8-0WMPiGLJpdfUOkFOgS6OJwXVRyJ5BosVXaQrAgw2S4H54691Ol14Cr3Ll5AVw1eP___aqPBTE9fH20vYGrT34O1oUoZSMIBDdI9kTOILglEFIbPZhtxe1D2xSifKAZo5ROEXA2tMRoDzgnkFwfQ8CAunz8A3HjgAEjECzJXmkyMvnGTSYscnfeGYFk2Zu_n1bqKZPWTLkW0xehlUeTeb0l4u8zROfuBErdDT3DyyQ3ovAovCjeiSl2dyy-ADDdyPXGBXZAakaQjpYnQAx9RBiex6SVy71otx7MiErktsNjHd7bpfDIo_FfCKUL-uRdCzti3IVzZPUULQRLCG7_JeV8kflPaKnT4ihbn6BplPkRDfVVeFFGv4zzkZx_nwS6_ZBbqRpSKGEawMSSndCyfAZk_c3o9u7u-53b6f7gVStILU3Nbb4ZmOx5va1Ex_1ZKH55ILghgMGeUgI4o4Bzn-PgDem0ebj-UK3OLwN3auiwS4fklnIEHOgcouvMbx2qOS71zmUF0bLn-UP-hi7fZsN8CMNkLhA5AGIeyWntFer11cdgQ03_POpQ3O_gXabvnuu1sGf0_caVPVfE59T2n1tTdK9wAHf4MxwVGyy-SsmBjM9NH_H-0w2KnF0uLgHgzI1_sRnpphw3zqPdx5XnMPG0x9P3moueDxb3HVzqIY4Tep2DK0cflg3JLheLXgxD9NFKcDL5QgvwC7jpeX6_3hghakOsIpkgudLa9_iDkvOjrWuun3vg7GRJ7ADMvBrI5gMTSkouK1FcWeXOFjtx2fDY5QutlTZvmvXD46RIg2IezPlEpCzBeTRPkNHJJs3zeBYUcZ4l4azI8ziMMWIZK1jA8jijOJEpUgwZRWQspDSazstE8CijNEl4PqchhFTUXFbdKWIijWlFylgQUDapeCYq4w9YiI14In4UEN15S6f-6JS1awMhraSx5hXGSluJ9E-tmjXJeaMamfNKvhxYUSWBmPKigJh6GWfSPkkjSKXWMidqK7Q3nLS6-voJzsfojl_HJHYp_hMAAP__pbzGtQ">