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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64][SVE] Case where loop-reroll is useful to vectorize (TSVC s351)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          m-saito-fj
      </td>
    </tr>
</table>

<pre>
    Original code:
```c
#define LEN 32000
#define LEN2 256
static int ntimes = 200000;

float a[LEN], b[LEN], c[LEN], d[LEN], e[LEN];
float aa[LEN2][LEN2], bb[LEN2][LEN2], cc[LEN2][LEN2], dd[LEN2][LEN2];

int dummy(float[LEN], float[LEN], float[LEN], float[LEN], float[LEN],
          float[LEN2][LEN2], float[LEN2][LEN2], float[LEN2][LEN2], float);

int s351()
{
 float alpha = c[0];
        for (int nl = 0; nl < 8*ntimes; nl++) {
 for (int i = 0; i < LEN; i += 5) {
 a[i] += alpha * b[i];
                        a[i + 1] += alpha * b[i + 1];
                        a[i + 2] += alpha * b[i + 2];
 a[i + 3] += alpha * b[i + 3];
                        a[i + 4] += alpha * b[i + 4];
                }
                dummy(a, b, c, d, e, aa, bb, cc, 0.);
        }
        return 0;
}
```
Option:
`-Ofast -march=armv8.2-a+sve`

In the original code, only interleave is applied in loop-vectorize. (VF=1, IC=2)

Code for manually rerolling the original code:
```c
int s351()
{
        float alpha = c[0];
        for (int nl = 0; nl < 8*ntimes; nl++) {
                for (int i = 0; i < LEN; i += 1) {
 a[i] += alpha * b[i];
                }
 dummy(a, b, c, d, e, aa, bb, cc, 0.);
        }
        return 0;
}
```
In the manually rerolled code, vectorization is applied in loop-vectorize (VF=vscale x 4, IC=2)
Register an Issue as a valid case for Loop-reroll.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVl1vqzgQ_TXmZZTIDJCSBx6S0EiVqltp76rvBpzgK4Mj2-Ru99evbJMPukmraq9WF0WU4XgO4-GcKcwYse85L0i2JlkZscG2ShfdzDBh1Wz3I6pU81a8aLEXPZNQq4aTZEVoSeiKLGj41WOMScN3oufw_PgNEqSU3gAQMFuE-8YyK2oQvYXeio4bIEkJLo9SkqzHZH_eScUsMJKtnx-_kawkuIFqEtWTqJlE_BKdaEfCkREddLly5NU9pK7vIU1zE5nuxO22GbrujWDui5hU-ovuhEfB-bha8O-y_yuIyxtbNEkWE8wdGJCHcQmMnZeHlvn37dpJr_t0LlppIJh7eUi_1KkiXG8gJ7gKqgk3Ca79bwlXj7owiAuB8PmuVyHAtYOyaaoThiBZeYLHenHlZSdu1fv-8BQuH-L7RGf8C3T4Cd1EdVd5ySd5ydfKSD-hSz-iIw_lbeDkDRYs7p3tDe19jBvn2eDP4EXcAJ1fa_DuEzS3g-7harScVpwnWQhfDlao_nrOzV52zFiYdUzXLUlKprtjPscZI7g2R37ODOenHmzLQU2mJm5A9fLNTTuuJWdHDsIAOxyk4A2IHqRSh9mR11Zp8TefO-G-bklSxi71aUOSEi9u8ueNarjXeMf6gUn5BpprJaXo9zcKuDe2P3br9QD5f0z77viKh-Nf5uGLeH4DPY56eveWeXMW1kk1zOn2Q1mdVXU0NZMc_oL0hrz-4HthLNfAengyZuDADDA4MikaqJkJqnt2zKGWedQUSbNMliziRfxA8wSzPE6jtqge8goXuFwmu-UiY_EirxjuMspZU8X1A49EgRRTivGSLrJFls7zNKUpy7BZVFWFPCMp5R0Tci7lsZsrvY-EK6nIEeM8kqzi0vjvF8Se_wQPEnQzMNKFy5lVw96QlEphrLmwWGGl__BZrXTdLtLw3-3766NTzMZt8mfLNQ8NDNt0rR0M3w0SrIJJU__8_roZbbSMBi2L1tqDcabDLcHtXth2qOa16ghuXQnjn9lBqx-8tgS3vnBDcOs39k8AAAD__6--gKA">