<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/83430>83430</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Missed optimization: fail to fold `(A >> C1) Pred C2` if `shr` is used multiple times
</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/4JKW9d
### Motivating example
```llvm
define i1 @src(i32 %a){
entry:
%div = ashr exact i32 %a, 3
call void @use(i32 %div)
%cmp = icmp slt i32 %div, 15
ret i1 %cmp
}
```
can be folded to:
```llvm
define i1 @tgt(i32 %a) {
%div = ashr exact i32 %a, 3
call void @use(i32 %div)
%cmp = icmp slt i32 %a, 120
ret i1 %cmp
}
```
This enable more optimizations for the other user of `shr` as I observe in benchmark.
Unsigned case is in alive2 proof.
### Real-world motivation
Signed case is derived from [z3/src/sat/smt/pb_solver.cpp](https://github.com/Z3Prover/z3/blob/master/src/sat/smt/pb_solver.cpp) (after O3 pipeline).
Unsigned case is derived from [z3/src/tactic/core/collect_occs.cpp](https://github.com/Z3Prover/z3/blob/master/src/tactic/core/collect_occs.cpp) (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/eJy8Vd1u3DYTfRruzcALidT-6EIX9m4E-PsaNEhTtOhNQJGj1dQUKZCUXPvpC3IdbzZoYxQoChCUKA7P8IzOzMgQ6GQRG7a5Y5vjSs5xcL759TA8rTqnn5pbQwtymLxzPRO3MMQ4BSZuGW8Zb2XeXRuzjGvnT4y3Chlvnxlvq__9_5das-LIituXmYvzgPcu0iIj2RPgH3KcDMKV4bY4j4R7_qSxJ4tAJbCqCF4xvifBgfGNZLxmu7uzGdron9Lt8grSvqYFmDiCDINP3lSEy8kDiC-mShoDiyOdPMwBLx40LcnHBVKNU4ak9BLMK2A2PEC5ebH1GPON84kXarvjNxzPSyUtdAi9Mxo1RPfK4a1YxFO8jgW8BuO_pp8BS158Mf0H9D8NFACt7AzC6DyCmyKN9CwjORugdx7igODigB7mgB5cD2xbhMGzbQEywD24LqBfEChF0qphlP5hfYb_2WaVa1AyIFBINvIrYa__WqYfUZqbR-eNhvFFsc6ejX66xtPoaUENvXcjsM3ds2C8zTJtg4xpHtM8dZ-DMwv6tZomtjkyvr_OpxPFYe7Wyo2Mt7-JD94t6FNCJbzOuI7xdpQh5o9v4Sct8L3sI3r4UcBEExqyyHj9d2H5Do0oVaT0opzH_DAGVfzslAr_Ips33bxJ6tOAr0VFdm7JxCR41LNCDQv6QM6u4b6HJzczvvNJMhE9hog6KSMrzdOJrDQQ5i5rURq4_wjSargsk95xlGRgRJgMyoDfKCmNHzCm_QfrHoGyU0jZrpztyY8QBxmBIuO7ANJeCR_cNDkfZ0vxKfmKg7QPYX2GXelG6FrUcoVNuStqXm6ruloNTbEvdmXZFUVZ7eodRyGl6CtE2ddqu93xFTW84FXBeV1WvBTVer8Tst8Xoi9LVAX2rCoyrde6vqIQZmz2ohLFysgOTcgNg3OLj5A3Geepf_gmnbnp5lNgVWEoxHBBiRRN7jT3NsSDG7v04zZHeE8hoL6inlpNnyIbXS6KKdkZ398CE--YeAeHMinhg0cNB55KAH1dDyikIqFhnE2kJIRII4bV7E3zHYXmCnt-3Eze_Y4q5VRmFxhvM_s_AwAA___wKy9E">