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

    <tr>
        <th>Summary</th>
        <td>
            Wrong folding `and` of `icmp`s on undefined values
        </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/d3f70db51cbc0876937d404e96fbda04df793bd4/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp#L2747-L2754


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


```llvm
----------------------------------------
define i1 @bitwise_and_bitwise_and_icmps_comm1.2(i8 %x, i8 %y, i8 %z, ptr %#0) {
#1:
  %c1 = icmp eq i8 %y, 42
  %x.m1 = and i8 %x, 1
  %#2 = zext i1 %c1 to i8
  %z.shift = shl i8 1, %#2
  %x.m2 = and i8 %x, %z.shift
  %c2 = icmp ne i8 %x.m1, 0
  %c3 = icmp ne i8 %x.m2, 0
 %#3 = and i1 1, 1
  %and1 = and i1 %#3, %c2
  %and2 = and i1 %c3, %and1
  ret i1 %and2
}
=>
define i1 @bitwise_and_bitwise_and_icmps_comm1.2(i8 %x, i8 %y, i8 %z, ptr %#0) {
#1:
  %c1 = icmp eq i8 %y, 42
  %#2 = zext i1 %c1 to i8
 %z.shift = shl nsw nuw i8 1, %#2
  %#3 = or i8 %z.shift, 1
  %#4 = and i8 %x, %#3
  %and2 = icmp eq i8 %#4, %#3
  ret i1 %and2
}
Transformation doesn't verify!

ERROR: Target's return value is more undefined

Example:
i8 %x = #x03 (3)
i8 %y = undef
i8 %z = #x00 (0)        [based on undef value]
ptr %#0 = null  [based on undef value]

Source:
i1 %c1 = #x0 (0)        [based on undef value]
i8 %x.m1 = #x01 (1)
i8 %#2 = #x00 (0)
i8 %z.shift = #x01 (1)
i8 %x.m2 = #x01 (1)
i1 %c2 = #x1 (1)
i1 %c3 = #x1 (1)
i1 %#3 = #x1 (1)
i1 %and1 = #x1 (1)
i1 %and2 = #x1 (1)

SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 >    size: 0 align: 1        alloc type: 0   alive: false    address: 0
Block 1 >    size: 4 align: 1        alloc type: 0   alive: true     address: 1

Target:
i1 %c1 = #x1 (1)
i8 %#2 = #x01 (1)
i8 %z.shift = #x02 (2)
i8 %#3 = #x03 (3)
i8 %#4 = #x03 (3)
i1 %and2 = #x0 (0)
Source value: #x1 (1)
Target value: #x0 (0)

Summary:
  0 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/eJzUVkFv6jgQ_jXmYhU544SQAwfagrTavofUdrX7Tk9O7IC7ic3aDi38-pWTAIZCX7u3rVBqx998nvF8ngyzVi6VEBOU3KLkfsAat9Jmkmu1fGnUyyDXfDtZObe2iE4RzBHMl9KtmnxY6BrBvKo2-383a6NfROEQzPNK5wjmnJYp4XkSFXlBxukooymPSSyyUZlzRmJephnNeRzwSG_3bJiypTa1RTD_TVl3p-tcKnE6myq-MH9pMyzWawT0AdI4vXmANIkRuUdkGj6nldwIwEastXGITvFpSKxdHnonhtosEcwLv9kOwfzbj5d7-fSeEY1I92s9b1_dfPKvQ3NRSiWwjDCKSS7dq7TiJ1P8ZziWRb22Pwtd19EQEIzlGCNI3hDc4W64PQ53frh2xo8RUIIgwyi97d0FGvlw2wn2kCLCiN5jvwMW_4R0MQSwt2HdAZniONg-CjAIKLSYnXhzbUQtvdNYjgPYbmhXsnQt0q4qzxZ5qp7hdFO4tOmRJAwEjoH4Ax3v3fYWJATSy0AIgZ0z9Lh71DkZxssUj0JAb9N7WMApFM6gxR7oafZQI_YH5y36nKX3_YDeIzr7X8nmE5K4oAhlX7FqXj9QxiE32uz97wXxXpPxFQm1ubqQotOYPMEFgw8TdShczEmtMNfCKgSpwxthZLlFEIUlZPb4uHj0xeiZmaVwCFLr6Ruj8IZVjcDS4lobgRvVZZ2fWL-xel2JQ3b6GNtIENA3QjGCMUWQhevbdr0lDF_vjmbEm5HWLEPJbc6s4FirzqZzDCV9vIFsWgLVVNUnzLrnk25MEfgfBfJqPfmCI8dLfzT3fOPoLP6DLs9jDc4iEOV1okOJugiJgsLkAZfX6cfrB61fRRwK0UeIq170aVj88Xg3w99m3xaPP_DT8_R5FlSd__Rrzb8vvt88LO6mD_j2YXH3-9Mh0beVLv7GXjAzRDIrd14Dvv5mrJJL5SdRO6l0gd12HS5v2knJKiv8C86NsLZfP3JHZ9zxF7idac6oT-5sf1WvivYTorsIeSc68Ch4T0R_ccEPde8i5L0mzq5Adyn720Wnl2LqjuAUcsbSczV1zcw2-H4QXGhjROGwO6mUdg-IsFS_gBBcMlkJfuO07zg34jqw7_qEMdrYs7ZtwCeUZzRjAzGJUkpIBnEMg9UkhREk6ZjRbJQkIkvykoiU5FmcFSyBBAZyAgTiiMCYJFFMYEhpCVGRjGHES0oKhmIiaiarQz85kNY2YhJFdDyCQcVyUdm24QZQ4hW3qwjA999m0rbSebO0KCaVtM4eaZx0lZj8abRa4lJXXKolRiPCFEcjgnXpJ_4jhkbEHiql_250ybKDxlRfb-Zb93wn3vu_mcC_AQAA__9laDf-">