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