<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/92633>92633</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[LoopVectorize] LLVM fails to vectorise loops with multi-exit
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
vfdff
</td>
</tr>
</table>
<pre>
* Since the [RFC](https://discourse.llvm.org/t/on-multi-exit-loop-vectorizer/58458), the process is slow,
so use a simple case to track the result, https://gcc.godbolt.org/z/r6KGKMYMd
> the case from above RFC, which is expect a base case, both gcc and llvm don't support it now.
```
int foo(float *a, int n, int M){
int i;
for (i=0; i<n; i++){
if (a[i] == 0) break;
}
return i;
}
```
* kernel body of loop
```
.LBB0_2: // =>This Inner Loop Header: Depth=1
ldr s0, [x8, x0, lsl #2]
fcmp s0, #0.0
b.eq .LBB0_5
add x0, x0, #1
cmp x9, x0
b.ne .LBB0_2
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8VF2PqzYQ_TXDyyiR144DeeAhhEtb3d2XtrpSnypjhuCug6ltNun--sok2S9VRQjbHM-ZM-PxqBDMcSQqQVYg60zNcXC-fOm7vs9a1_1TAt_jb2bUhHEgBFn92hxA1sCLIcYpgNgDb4A3nQnazT7Q2tqX09r5I_AmAm_cuDrNNpoVXUxcWeem1Qvp6Lx5JQ-8kcVGFsB3wA-Li8k7TSGgCRisOwM_AKuB7RGDQ5wDocJgTpMl1CoQRofRK_28GHsKs42J6rO6o9bro-taZ-NN2ivwxm-___T96Y-n7u4BxLeFZiHuvTuhat0LYYqZH_A8GD0kYXSZSEdU2KaNaXeCWxcHPGqNauwwZQE7NwLPI4Z5mpyPaCKO7ry-uoMtu73L0owRe-eAF711KiLwvUqs6f94nzylROXVXW_6ZUC8rXvnEXhhQNQMRJWww3id8Gp5P1ojmj5tVyArA7JGEDWIGhnwHbae1PMHasjr-9RTnP34wfEb9iWk25fv8Zn8SBZTRaHrMVXBf1qsH6uK_clBLPL-77me61Xyt98HE_CXcSSPj85N-DOpjnxiqWmKA4j64T3o9NjOL2NgKbMgq0uRJpdlaYNF4IKnMv9k1evTdDfhgq3ZZ7hd099pvAYhP4Oq65bx6uJyJ7nrSswLvLvBX5hHemfmX1KXdaXodmKnMiof8octY0UuNtlQkpZs03JJBfV5LmXXsl273QiRU846rjJTcsY3TD4UTDIpNutckhBKF1vdSyLewYbRSRn7dqkzE8JM5Y5vhcisasmGpXdwPtIZFxB4ylzmy2SzaudjgA2zJsTwzhJNtEvTScf1494OUg0-Pv54wl4ZG9LNvnWKQEvJBDybOOB7O8lmb8svN93EYW7X2p2AN8nfbVhN3v1FOnWkRWUA3ixR_BsAAP__k9Nppw">