<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/151459>151459</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Convert branch to bnez with EVL tail folding
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:RISC-V,
            vectorizers
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            lukel97
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          lukel97
      </td>
    </tr>
</table>

<pre>
    With EVL tail folding today the branch condition is `bne iv, trip-count`, e.g. this loop generates

```c
void f(int *x, int n) {
  for (int i = 0; i < n; i++)
    x[i]++;
}
```

```asm
# %bb.1: # %for.body.preheader
        li      a2, 0
.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 v8, (a4)
        vadd.vi v8, v8, 1
        add     a2, a2, a3
        vse32.v v8, (a4)
        bne     a2, a1, .LBB0_2
```

Given that the trip count is countable we should be able to instead emit something like 

```asm
# %bb.1:                                # %for.body.preheader
        li      a2, 0
        mv      a3, a1
.LBB0_2: # %vector.body
                                        # =>This Inner Loop Header: Depth=1
        vsetvli a4, a3, e32, m2, ta, ma
        sh2add  a5, a2, a0
        vle32.v v8, (a5)
        add     a2, a2, a4
        vadd.vi v8, v8, 1
        vse32.v v8, (a5)
        sub     a3, a3, a4
        bnez    a3, .LBB0_2
```

To do this we need to use a separate phi to carry the AVL, and not compute it from the EVL based IV. This is closer to the stripmining examples given in the RVV spec, and is what GCC currently does.

This removes a use of the trip count in the branch and also shortens the dependency chain for the AVL.

I have two patches to submit for this soon, one to add the separate phi to carry the AVL, and another to change the branch.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVU1z4ygT_jX40hWVBFZsHXTwx2TeVOU075T3uIVE22IHgQqQksyv32qkJN6d7JZv66IwavrjaXi6kSHoi0WsWblnnJvxB5pqwzhn5XElx9g5Xy_CVePUa_2bjh18OT1BlNrA2Rml7QWiU_IVYofQeGnbDlpnlY7aWdAB2H3eWAQ9MX6A6PVw17rRRnafkwCzSwax0wGMcwNc0KKXEQPLdzTu83m0LN9NTis4M77VNgLjuxeyp7VlvAK22bN8B3B2HhYdDUwcIWdin5YHsGnJ-D6NKukDvLByr1l5XOSC_LDN8Tr839DI0NMnF8B42TRZwcQOls-z8xmdVTZ47FAq9Mm4MprlleSEmdxlT_t9_ju_MpywjYvtAuyWXzIWRya-fKdDfLQWPTzRUf5vDi52cMQhdkwcixlJGBuCIgiKLNLMl52OS6Voc72IaZ6zr6aAcZqzmE3TjCIp9WmOMq3lYmBQ8Gyi1ZbkjG_Jb7XsSqWySb_vzvMCcUHBr1CIdxT_4rSx-GGXUns7518u86ue0ELsZEzMJWJCIiZxNi1kYxCeEULnRqOgQUiS6EDbEFEqwF5HCK7H2FEdGP0D4Raq3HKnNzOJ5VU_XV_of0quK5asb2LJB-fKTzj3CYXK99v-hCXrG8j1GYU-nP6lOsS108biz_etf-TVdwfKzR3tGcEiKmLMGBAkBBwkdTcYOk3SVno_N87d6SmFsgqsi9C6fhgjgo5w9q5PKtR2GxlQweMpg3QhxFTjAnpyRjqBaNxrS2zEF9kPBgNcEtO1TRrfTicIA7Zv0Qgm1cDXwwHa0Xu00byCchiyJR8K5LF3EwaQKRF3_qVk7HX7J7_SBEeV4yPakDYVDmgV2vYV2k5qmzr1kvsS6xE6OSHEZweDjG2HgRILY0N1NqvrAME5S_CdTcUolZpzv-VwpXWxm8-r7aS94BXubKVqoSpRyRXWxaYU1VrkRbXq6u26VZs1L9otL-WmuZdFI6oShRJtUYicr3TNc17mG1Hk91yIKuNbxPO6QazOuWrWyNY59lKbzJipz5y_rHQII9ZFWazLamVkgyYsz3Aj2x9oFRO7b4__P9yd6D3mB8b5XMT6J_qwvNG-Jn93zXgJbJ0bHWL4iBB1NFgfnJ3Qx7e7iQ6Ix_D82Uu-Gr2puxiHwMSO8QfGHy46dmOTta5n_IFcL393g3d_YBsZf0iZBMYflmSmmv8ZAAD__9EFZ3A">