<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/85830>85830</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Fold `(sext(a) & sext(c1)) == c2` to `(a & c1) == c2` or `0`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
XChy
</td>
</tr>
</table>
<pre>
Alive2 proof: https://alive2.llvm.org/ce/z/ed6xP8 (contains generalized pattern)
### Motivating example
```llvm
define i1 @src(i8 %a) {
entry:
%conv = sext i8 %a to i32
%0 = and i32 %conv, -2147483647
%cmp = icmp eq i32 %0, 1
ret i1 %cmp
}
```
can be folded to:
```llvm
define i1 @tgt(i8 %a) {
entry:
%and = and i8 %a, -127
%cmp = icmp eq i8 %and, 1
ret i1 %cmp
}
```
### Real-world motivation
This snippet of IR is derived from [abseil-cpp/float_conversion.cc@FloatToBuffer](https://github.com/abseil/abseil-cpp/blob/fa6a3cd6c9e9f01164a0e4b5d2d8f0dbd1453fee/absl/strings/internal/str_format/float_conversion.cc#L1285) (after O3 pipeline).
The example above is a reduced version. If you're interested in the original suboptimal IR and optimal IR, email me please.
**Let me know if you can confirm that it's an optimization opportunity, thanks.**
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVE2P2zYQ_TX0ZWCDGn0fdNhdw8ACKVoEOfQWUOLIZkORKkl51_vrC1K2sxugaRGAsMXhe0O--RLeq6Mh6lj5yMr9RizhZF3359PpsumtvHQPWp0JYXbWjix_gFMIs2f5A8MDw4NIpzutz9POuiPDw0AMD28MDySr1z8aAIbNYE0Qyng4kiEntHojCbMIgZxh2DK-Z_zh-ov5uuA3G9RZBGWOQK9imjXBB2DF1xXvXk2SRmUIVAas4N4NDBvVAMNSMGyB1Y8rjExwl6gg7eIDy8GaM7B8D55eA1xJECyoHN_BeMIII6P9xmP4BFvMirpo8qqo33ud5kRQ8YP-vpF4ZGQ3nKOQXpzgV2n1_geN63YQBnqC0WpJEoK9a_ivWIRj-P-xiPLuMm-UJ9hm-FNtzZX7q-J-TP9nEnr7Yp2WMF0rwZr30C8n5cEbNc8UwI7w_BmUB0lOnUnC6OwErHwUvSelt8M8MzyM2orwNSaNnFfW7IaBFfwQrV_s4zKO5Fi5Z9h8LPKjCqel3w12ihWfHN4_rp57bft4gahEPshqaKkdeZZVheBU9KVE2Yxc9jIrynwkWunRiw9OmaNneFAmtoO4Gr-O1k0i_MujMf-UYVOmVGIjxkAOfs9hVjNpZYhhu7sFie7dI3p7phgjAY7kMpCEm0t4HuFiF4a1I0gPIR9IgjIQTgTWqaMyQoNfejsHNQkdwx0r5Ps2Jp4moTRMBLMm4Wn3MbVxfaIQz78Z-wIqXQqxrAdrRuUmCCcRQAWGtQdhVu_qLeUe7DxbFxajwiXeFU7CfPO71e1Gdrls81ZsqMvqjDdVi1W-OXUksryuqOSjQGwLnpXN2FNLRSWKrOLVRnXIseB51mY11gXf0VD3JAsx9Djysa9YwZOs-5DbKO8X6pqyyflGi560T9MT0dALpEOGGIep6yJn2y9HzwqulQ_-u5eggk5j99n48GSnPiau3MPBagmxLbCJ0yjmd81zBdf9kMWhGW35PvbggKzicVqtLJGwCfQRYV1ExJbbLE53PynyNEfWv-3s7F80xEpM0mKpJun_BAAA__9yKdXx">