<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/132908>132908</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed Optimizeation: Missed Optimization: Consecutive divisions can be merged into one if intermediate multiplication doesn't overflow.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MaxGraey
</td>
</tr>
</table>
<pre>
I'm wondering why `computeOverflowForUnsignedMul` can't pass this scenario:
Alive2 proof: https://alive2.llvm.org/ce/z/AYcyYF
```llvm
define noundef i8 @src(i8 noundef %a, i8 noundef %b, i8 noundef %c) {
start:
;; assume b < sqrt(max)
%b_less_than_sqrt_max = icmp ult i8 %b, 15
tail call void @llvm.assume(i1 %b_less_than_sqrt_max)
;; assume c < sqrt(max)
%c_less_than_sqrt_max = icmp ult i8 %c, 15
tail call void @llvm.assume(i1 %c_less_than_sqrt_max)
;; perform a / b / c
%div_ab = udiv i8 %a, %b
%res = udiv i8 %div_ab, %c
ret i8 %res
}
```
```llvm
define noundef i8 @tgt(i8 noundef %a, i8 noundef %b, i8 noundef %c) {
start:
;; perform a / (b * c)
%mul_cb = mul nuw i8 %c, %b
%res = udiv i8 %a, %mul_cb
ret i8 %res
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VE2P4zYM_TX0hdjAkeOvgw_JDFz0MNhTD3sKZIlOVMiSK8nOZH99ITuTJu0W3TkUEJCAoh4fH-nHvVcnQ9RAfoD8NeFTOFvXvPH3Xxyna9JZeW1-BVYOeLFGklPmhJfzFaFIhR3GKdDXmVyv7aW17jezoMm3SUORouAGWBlw5N5jOCuPXpDhTlnI9pDGs9dqJoajs7aHbI_nEEYfb1kLrOXL7UbredhYdwLWCgLWfgfW7r-J67d2BYEiXU9MhHQvqVeG0NjJSOpRVQi71DsBrFLVPQws58Be8DnU_TMkgNUI5QHSvQ_chZU8ImQHyA7IvZ8Gwg4he0H_hwvAqoG_A6vXLJZ3R03eH8OZm2NMOA78HSF7RSWGEScdFoq32tt8eRa40ii41jhbJWMDiwprsdjI9t-Q74Wf6Ikf04vt_SQ78Wl2P0Je6z4SHMn11g3IEVgbZWQtig_ppJqPvMOFzyTVfOOyDG5R7JbnyP89Z316S1wBHX0048hHGuXr4_p8YpvCKfw_2_SsBrAqCrJH8bBOw6SPolvaHSaNZro8Tug_VPlQbgX5GVUS2WSyzmqeULMtd6yqy7QuknNTZKKXeVFUvOY7JvpuK4uyLPs87WjHiSeqYSnL04zl2zTd5cWmykRR5sU2I8ryPtvBLqWBK33_whPl_UTNNmN1WiWad6T9Yk2MGbrgcguMRadyTXz0pZtOPq6f8sH_BRNU0NS8Ke9J4tcxqEF9Jx6UNdFknuP38Is1nsQU1Ewo1ay8ssZHE8OOcCB3IonKBIvWEKo-_ic3kFQ8UJxEUKNWYoFDacmv5mdv9rhJJqebZ387qXCeuo2wA7B2Wbf158vo7O8kArB2adkDa2-azA37MwAA__9WY7uF">