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