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