<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/88263>88263</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: more precise range for `and`
</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://godbolt.org/z/nn9EvobqK
### Motivating example
```llvm
define i1 @src(i32 %offset) {
entry:
%cmp = icmp sgt i32 %offset, 128
br i1 %cmp, label %then, label %else
else:
; offset in [INT_MIN, 128]
; offset & -9 (0xfffffff7) cannot be 258 = 0x102
%and = and i32 %offset, -9
%cmp1 = icmp eq i32 %and, 258
call void @dummy()
ret i1 %cmp1
then:
ret i1 0
}
```
can be folded to:
```llvm
define i1 @tgt(i32 %offset) {
entry:
%cmp = icmp sgt i32 %offset, 128
br i1 %cmp, label %then, label %else
else:
call void @dummy()
ret i1 0
then:
ret i1 0
}
```
I don't have a good generalized form for it now. If we regard it as a missed optimization of SCCP, I guess it's similar to #79696.
Maybe cc @dtcxzyw.
### Real-world motivation
This snippet of IR is derived from [openssl/crypto/asn1/asn1_parse.c@asn1_parse2](https://github.com/openssl/openssl/blob/60f69680b280bc847819afa8421cdeddb98db87f/crypto/asn1/asn1_parse.c#L94) (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/eJzMVUuP2zYQ_jX0ZbCGNHoffNhHDRjNpkWaQ28BKY5kNhSpkJS93l9fUF6vvc6iTW4RCFEkh_P4ZuYT9171hmjFijtWPCz4FLbWrf6-3x4WwsrD6larHSGMztqOZbewDWH0LLtluGa47q0UVoeldT3D9TPDtTHNbzsrvv3OkgeW3L68MTsOeLRB7XhQpgd64sOoCd4IlslxaL0bjluSOmUIVAosT7xrGdYqQ2BY2K7zFBg2wKq7ozCZ4A7Ru3kFUaodRmDZA6j44fsAV7fvIcX6JC_cbGi-FY80F6TjOmzJvNkg7enS83l9YTi7g6MFUAZYcbf5-PnL4-bjyV7x8I4kwxJuGmBYJ0_d8alieC03xgYQBFjUczDJU5rgRZDcyHk_zt_Fd9O8hSM940HfTuLcyCiLxSsWLdcadlbJCLychuHAsGb4qszF2E5gpZdYzGBlt_Djz5XO5EVb9XBVFpdWWm4iJJ3VkiQE-4r-j5VS6MOvXUrwk4lI3kvBzwG7AWkNwyrAlu8IOPTWSujJkONaPZOEzrohvkAFMHa_hE0HewJHPXcybnIPHAblPUmwY1CDeuZBWQO2g7_u7_-MkW-gn8h7UIFh5cGrQWnuIFhgmFVN2ZTLF8cf-UEQtO0ceWifng_75fvE8om4vtlbpyUMLxxjzaXo563y4I0aRwrRmc0nUB4kObWLcTk7xDa1IxnvNcN16w5jsAzX3Jv0Zfoycudp2bI8OS8xNjPWV8SownYSy9YODNdnpecvoa1guC6TrmzKOhFYJ6Kt86pOG97xOse0lSSlaGop6qr7P4cw-9Dkc_1izbtADv7IYFQjaWWIYbM8gUCvvMuF3VHEgIMjObUkYUfOK2vmrB7sxLByBMoEcuQDyUhlYUtgneqV4Rr8JOYccx3hjORzXsZE08CVhoFg1MQ9XaUujg8U4vlXY_egZqOR7aC1plNugLDl4VQm3FwV1DhaFyajwiHaCltuvvrlUe1CrjLZZA1f0CqtUqwKzMtisV3lnKecRJ2ljZTUYJOJImul4KlsO8JioVaYYJ7kaZJilmOx7MqmywUJKpuuaKhieTKHtYy8En98C-X9RKu6xjJbzE3t578poqE9zIcMY5Es3CreuRFT71meaOWDP2sJKmhaPX7fObGNB-sIRket8gSOm57mJmRlEnm7TBaT06v_qMCZA4_TzejsP9QGhuvZN89wPfv-bwAAAP__mV9byg">