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