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