<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110919>110919</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Regression in and of masked comparison fold
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:instcombine,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
nikic
</td>
</tr>
</table>
<pre>
From https://github.com/rust-lang/rust/issues/131162:
```rust
const MASK: u8 = 1;
#[no_mangle]
pub fn test1(a1: u8, a2: u8) -> bool {
(a1 & !MASK) == (a2 & !MASK) && (a1 & MASK) == (a2 & MASK)
}
```
https://llvm.godbolt.org/z/Pasonhe9d:
```llvm
define i1 @test(i8 %a1, i8 %a2) {
%xor = xor i8 %a1, %a2
%cmp = icmp ult i8 %xor, 2
%lobit = trunc i8 %xor to i1
%lobit.inv = xor i1 %lobit, true
%and = and i1 %cmp, %lobit.inv
ret i1 %and
}
```
LLVM 18:
```llvm
define i1 @test(i8 %a1, i8 %a2) {
%and = icmp eq i8 %a1, %a2
ret i1 %and
}
```
LLVM 19:
```llvm
define i1 @test(i8 %a1, i8 %a2) {
%xor = xor i8 %a1, %a2
%cmp = icmp ult i8 %xor, 2
%lobit = trunc i8 %xor to i1
%lobit.inv = xor i1 %lobit, true
%and = and i1 %cmp, %lobit.inv
ret i1 %and
}
```
I believe this is fallout from removal of the trunc i1 canonicalization.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVdGK6zYQ_Zrxy5BgjeLEfvBDdtPApfdCaaGvRbZlR72ylEpy2O7XF8nOJrvLllK4DwshEjPnjM8ciZHwXg1GyhqKBygOmZjCybraqO-qzRrb_V0fnR3xFMLZA98DHYGOgwqnqVm3dgQ6usmHlRZmWPZAR-X9JD3QkXHGthR5-QHyPWzz-ZdwKdRa4wN-2__2M_A9TiUCPyAD_rAw5n_iUDwY-8cozKAlFIc5fp4a7A0G6QMDKgWbawA9oqDrvsIV8J-wsVYj7Ja6iIiJgUBbBGJJAVXx81FBzNG7HG3nyJX3IWlJLOp3hzft3_f22lmtL-N6sF1jdVhbFz19Bjr-Irw1J1l1762MjDnUyV4ZiYohbPLoCVCpSgQqBIuWLHtKim9GABVP1iXf43rPmOE3XDueE07FzaTDAn6yLqLvkdo2KiRscJNpb0AMFhV7i1wrc7kpYC_xWDa4Sd7hhekSMq4zsh3Pi9iXWle8k2EBCdP9l9P4-vX3b8jKH2PzVXqyT_71sdX_U3b1GW7HJ74cX7CRWsmLxHBSHpXHXmhtp4B9nJFOjvYiNNoew0lee2PYCmONaoVWzyIoa9ZZV_Ou4pXIZM12tCursiSWneq8qXbllrZyw0XR7HLR87LgeS94Qx2XbaZqymnD8pxYVfANW3PRbLt-I6kqZVV2OWxyOQql12mQWDdkaRbXjOUVqzItGql9mvVE6W7wvTI-tHZslJFABPQIRKPyXnYrew5qXFTHXHHIXB1pq2YaPGxyrXzwt28FFXR6Sb4YHx6XmsUBf5WDk94ra1CZdDi2x1H477LD1o5n4ZS3Bnuru2xyuv6X1yaJnpfV2dk_Zfv6wZn7vNT0TwAAAP__SsThRg">