<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/108559>108559</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Missed combines for `(icmp (udiv exact x1, y) (udiv exact x2, y))`
</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>
Kmeakin
</td>
</tr>
</table>
<pre>
InstCombine is able to optimize the `eq`, `ne`, `uge` and `ult` cases, but misses the `ugt` and `ule` cases (rust example: https://godbolt.org/z/jfPzcMsP3)
https://alive2.llvm.org/ce/z/WA-VaW
```llvm
define i1 @src1(i8 %x1, i8 %x2, i8 %y) {
%div1 = udiv exact i8 %x1, %y
%div2 = udiv exact i8 %x2, %y
%ret = icmp eq i8 %div1, %div2
ret i1 %ret
}
define i1 @tgt1(i8 %x1, i8 %x2, i8 %y) {
%ret = icmp eq i8 %x1, %x2
ret i1 %ret
}
define i1 @src2(i8 %x1, i8 %x2, i8 %y) {
%div1 = udiv exact i8 %x1, %y
%div2 = udiv exact i8 %x2, %y
%ret = icmp ne i8 %div1, %div2
ret i1 %ret
}
define i1 @tgt2(i8 %x1, i8 %x2, i8 %y) {
%ret = icmp ne i8 %x1, %x2
ret i1 %ret
}
define i1 @src3(i8 %x1, i8 %x2, i8 %y) {
%div1 = udiv exact i8 %x1, %y
%div2 = udiv i8 %x2, %y
%ret = icmp ugt i8 %div1, %div2
ret i1 %ret
}
define i1 @tgt3(i8 %x1, i8 %x2, i8 %y) {
%ret = icmp ugt i8 %x1, %x2
ret i1 %ret
}
define i1 @src4(i8 %x1, i8 %x2, i8 %y) {
%div1 = udiv exact i8 %x1, %y
%div2 = udiv exact i8 %x2, %y
%ret = icmp uge i8 %div1, %div2
ret i1 %ret
}
define i1 @tgt4(i8 %x1, i8 %x2, i8 %y) {
%ret = icmp uge i8 %x1, %x2
ret i1 %ret
}
define i1 @src5(i8 %x1, i8 %x2, i8 %y) {
%div1 = udiv exact i8 %x1, %y
%div2 = udiv exact i8 %x2, %y
%ret = icmp ult i8 %div1, %div2
ret i1 %ret
}
define i1 @tgt5(i8 %x1, i8 %x2, i8 %y) {
%ret = icmp ult i8 %x1, %x2
ret i1 %ret
}
define i1 @src6(i8 %x1, i8 %x2, i8 %y) {
%div1 = udiv exact i8 %x1, %y
%div2 = udiv i8 %x2, %y
%ret = icmp ule i8 %div1, %div2
ret i1 %ret
}
define i1 @tgt6(i8 %x1, i8 %x2, i8 %y) {
%ret = icmp ule i8 %x1, %x2
ret i1 %ret
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVk1vozAQ_TXDxUpkxpiPA4e0EdJqVamn7ZkPh7hrIMUmavvrVzakTapG2mXZVSXUjvGb8bw3OHq51rJuhUiB3wDfevlg9l2ffm9E_lO2XtFVL-m3VpvbrilkK4jUJC-UIKYj3cHIRr4KYvaCQEjFE4QU8NbGrXiPh9ouSN5WbqWMXZW5FtoCisGQRmot9KnOUJsLvHjDE8C4H7Qh4jlvDkoA25C9MQcNbAOYAWZ1VxWdMuuurwGzV8DscXf_Wt7pewaYAN0C3Yx_L_NyJY8C10odmym3FFOBh83qR_4wpYZ0fCxwfFWJndPFJxBQ3Zc-YCxjAsiffctvivE9fgFMCEQ3Yz6xryp59AmwLRkqebTsSkPOi7isET6i8QoaP6Bt3Avj0LJsDkQ8TVB75AS29U54C7ZcXNpEOtqeC3dB2NRmFuHPe3oj-zy3H92X-I8H8LcTsL0uO4FZjD_vaZEJsP8-gd_VfqjN0uLPInulqUXUD7749z_Ui1-AWZSvNLXIDPhXn4Fa_B7MonylqUVmEH7dXyG1-A2YRfZKU3-q_skTeVXKqoQluSdSP8IQGeOMefs0jIKqSOguKngZVhwDP2asoHHix6zYRejJFCkGNPGZz_yYszUXZVhQpJxGwo9ZAgEVTS7Vm0HzpNaDSH0ac554Ki-E0s7CIjprxjay1aYcTSug1QEQnc-sVpNxzY3sWrvHt16f2rRVMdQaAqqkNvr9LCONcgb5zAgD35I7V45Mp2iy63ribG_sFAWMz76iUdVxCpcbeNqwT0i9oVfpB1crzX4o1mXXAGaO3_hvdei7R1EawMzpoQGzSZJjir8CAAD__87eI9o">