<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/149354>149354</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[RISCV] Handle recurrences in VLOptimizer
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:RISC-V
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
lukel97
</td>
</tr>
</table>
<pre>
With EVL tail folding given a loop with an induction variable:
```c
void f(int *x, int n) {
for (int i = 0; i < n; i++)
x[i] += i;
}
```
We will have an extra vsetvli toggle because we can't currently reduce the VL of the induction increment, which is used by a phi node forming a cycle:
```
.LBB0_2: # %vector.body
# =>This Inner Loop Header: Depth=1
sub a3, a1, a2
sh2add a4, a2, a0
vsetvli a3, a3, e32, m2, ta, ma
vle32.v v10, (a4)
add a2, a2, a3
vadd.vv v10, v10, v8
vse32.v v10, (a4)
vsetvli a4, zero, e32, m2, ta, ma
vadd.vx v8, v8, a3
bne a2, a1, .LBB0_2
```
I have a patch that I plan on posting shortly that handles this, based off the work here: https://www.youtube.com/watch?v=Mfb5fRSdJAc
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEVFGP4yYQ_jXkZbQRhngdP_gh2Vx0W6WqdFflHisMk0CXgAXY2dyvryC-bqpW1wjhEcPMfPPxZUSM5uwQO1JvSb1biDFpHzo7vqFtm0Xv1a37ZpKGT8cDJGEsnLxVxp3hbCZ0IMB6P8A1XxEOjFOjTMY7mEQwordI-IbQsp7pfUlCN5M3Ck6ErY1LQNjmnbAXyLYjrAXSbAndAJx8gPmOAcJ3QAnfFvMFXDEJ25bVlvsA76TeGlLvIJ_yHRjCcyrS7B4R3AF9Q7gaa0GLCTN2fE9BwBQxTdZA8uezRehRijEiXBGkcIQ1CeQYArpkbxBQjRIhaYTjAfypWB8UGCcDXtCl3NxVG6nBRBgjKuhvIGDQBpxXmPu8ZEoFyJv8L8oI3SwP2y39gxFe-vzZjzAOhNUTyuTDMr9gJqec8h3hn37XJsKrcxjgkN_uMwqFISfe4ZA04buqlG_j2BPaCp7hi6rsbPZoJpTKztV8nPc7r-3M4Edo2ZGXS5eyJ1FsMQdY5Gw5Zaui2UHYOidu7-65EnuoxOdAodRyegj88Vn_jeRniR-Alja-Y_D_B7VUfM_Weq70gKd3-IG0EPbj1f4lvtdZdjCIJDUkLRK8wmCFA-9g8DFlQUTtQxZacWvhlMUISZuYc_ciK8mf7rK7-vAGGkNWD-iUhphlxPaE7a_X6_LmxzT2uJT-kk9yUcL3E-G7X099ffryVf2ykQvVcdXyViywq5qaNc9tXdUL3a1YpeTptO5XUrEVFTVyXPcV9g17Zq0QC9MxymraVE31zOqKL9eMI20opaKmtKkrsqJ4EcYurZ0uSx_OCxPjiF21anm9WljRo41lCDHWC_mGThG--fL69eXpSBjLoyl0OfapH8-RrKg1McWPbMkkW4ZYDjnmCfC50AUB7_9XiRGMg-PhtyGZi_mOYTEG2_2TqbNJeuxnknLu-fM0BP8nykTYvsCOhO1n5FPH_goAAP__FAiIEQ">