<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/134540>134540</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization when using `llvm.assume`, although scalar-evolution can use it to figure out the range.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
GINN-Imp
</td>
</tr>
</table>
<pre>
Missed optimization: `store i1 %0, ptr @a, align 1` --> `store i1 true, ptr @a, align 1`
```llvm
@a = external global i1
define i1 @src(ptr %G) {
BB:
%L = load i1, ptr %G, align 1
%0 = xor i1 %L, true
store i1 %0, ptr @a, align 1
call void @llvm.assume(i1 %0)
ret i1 %0
}
```
clang-trunk -O3 generates:
```llvm
define noundef i1 @src(ptr readonly captures(none) %G) local_unnamed_addr #0 {
%L = load i1, ptr %G, align 1
%0 = xor i1 %L, true
store i1 %0, ptr @a, align 1
tail call void @llvm.assume(i1 %0)
ret i1 true
}
```
We found that `scalar-evolution` looked like it could do some analysis with llvm.assume (it found that the value of `%L` was `false`), but the optimization was still missed:
```
Printing analysis 'Scalar Evolution Analysis' for function 'src':
Classifying expressions for: @src
%L = load i1, ptr %G, align 1
--> %L U: [0,-1) S: [0,-1)
```
Godbolt: https://godbolt.org/z/bd9fEGe18
Alive2 proof: https://alive2.llvm.org/ce/z/AYhVHx
The reduced IR is derived from https://github.com/torvalds/linux/blob/master/mm/page_alloc.c
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVdtu4zYQ_Rr6ZWCDomTJetCDsonTANtt0e0FfQoocSSxoUiDFyfZry9IKZcmbbELLGDAEmfO0ZzDGZI7J0eN2JD9Bdlfbnjwk7HN9c2nT9ub-bTpjHhsfpTOoQBz8nKWX7iXRpO8BVJS541FkBkQtqeEfYCTt0AKyuMzV3LUkJGSwnZL8qt_ALwN-N8AQtv4K-nyU-o8x_eCciD5JeCDR6u5glGZjiuQGaGtwEHqpZiCOtsTdkjkbH9NWA2kuiC0vbggeaSGuP4xkSnDRWR4KiblvxRD2yQupT4Yu4r9GFOShsj1VTbExJ4rBWcjRYxGVTvuXJiRsMMzuk6ZFv0zIW1Jdfnaj8WeXnE9br0N-g62P-UwokbLPbpF4lv3Vn-0CVrg8M4ni1wYrR6h5ycfLDrCDtpoTN6tHirTc3UbtOYzilsuRLQrp6u33-TpdzTVc6m-3tnV2PUzq7HvvP0DYYhGgZ-4T43bc8XtFs9GhTQAJQVlzB0KUPIOQXroTVAChAFnZgSuuXp00sG99BO8qghiSf41vZ8QzlwFBDPEbyUrSgr33MXXgSuHabmO0ruwIF6PY0p1XioFcxrWNy1AaPuzldpLPb4URlj1OamCqydV0K5BwioYjIUh6D4FCKtSr1QL8wcVT47hMRLiw8mic9JoFzHpaFg661t7YjkmFshviWd_Ebd-m8Xu-_x25f22XRvRGeVj4uT9KU0COxJ2HJfAztiRsOMXwo6dqIera8wOhLatkmdkcLLGDO-xPEV3aQsXfI8rSfvn9PsPD4S2v04IFkXoUcDNLyAdCLTyjAIGa-a3xUg_hW7Xm5mwozf2zJVwhB2V1OEhlqZMR9hx5s6jjQ8x78RHvOVKmX7Xb0STizqv-QabrCryuqgORb2ZGtEh3xd9yZkY6KHKkYlaHFhW1V1VDFm-kQ2jbE8LWmb5vmL1rqtE1zNRDlhXrCxzUlCcuVTPcjfSuYBNlhf7gm4U71C5dFswpvEeUpQwFi8P20TQtguji0MonXcvNF56hf92lcD9hBqCi620nlZPs1vSpUP8ZMI4wdsZhJ5HYBo-b2CQY7AIZp0Py_WIu02wqvkf-9PhuPxtT9b8hb0n7JhUxS1ZZZ8b9ncAAAD__503KJM">