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

    <tr>
        <th>Summary</th>
        <td>
            miscompilation? with 3010f60381bcd828d1b409cfaa576328bcd05bbc on RISCV
        </td>
    </tr>

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

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

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

<pre>
    With 3010f60381bcd828d1b409cfaa576328bcd05bbc the following code seems to yield unexpected results:

```
void Fill(unsigned char* buffer, int n) {
  for (int i = 0; i < n; i++)
    buffer[i] = (i & 0xff);
}
```

This behavioural change only appears on optimized builds with the v extension).

BB2 seems to loose the advancement of the indicies value (`vadd.vx v8, v8, a3`).

Before:
```
_Z4FillPhi:
        blez    a1, .LBB0_3
 li      a2, 0
        csrr    a3, vlenb
        add     a4, a3, a1
        addi    a4, a4, -1
        neg     a5, a3
        and a4, a4, a5
        vsetvli a5, zero, e8, m1, ta, ma
        vid.v v8
        vsetvli zero, zero, e64, m8, ta, ma
        vid.v v16
.LBB0_2:
        vsetvli zero, zero, e64, m8, ta, ma
 vsaddu.vx       v24, v16, a2
        vmsltu.vx       v0, v24, a1
 add     a5, a0, a2
        vse8.v  v8, (a5), v0.t
        add     a2, a2, a3
        vsetvli zero, zero, e8, m1, ta, ma
        vadd.vx v8, v8, a3
        bne     a4, a2, .LBB0_2
.LBB0_3:
 ret
.Lfunc_end0:
        .size   _Z4FillPhi, .Lfunc_end0-_Z4FillPhi
```

After:
```
_Z4FillPhi:
 blez    a1, .LBB0_3
        li      a2, 0
        csrr    a3, vlenb
 add     a4, a3, a1
        addi    a4, a4, -1
        neg a5, a3
        and     a4, a4, a5
        vsetvli a5, zero, e8, m1, ta, ma
        vid.v   v8
        vsetvli zero, zero, e64, m8, ta, ma
 vid.v   v16
.LBB0_2:
        vsaddu.vx       v24, v16, a2
 vmsltu.vx       v0, v24, a1
        add     a5, a0, a2
        add a2, a2, a3
        vse8.v  v8, (a5), v0.t
        bne     a4, a2, .LBB0_2
.LBB0_3:
        ret
.Lfunc_end0:
        .size _Z4FillPhi, .Lfunc_end0-_Z4FillPhi
```

The removals of the `vsetvli` should be harmless as the vtype is not changing (questionable if it is correct due to the tail handling, but lets ignore that).  The `add a2, a2, a3` is being scheduled differently but that should be save as the `vse8.v` is not impacted by that.  At that point, the only difference is the `vadd.vx v8, v8, a3`, where `a3` is `vlenb` which would be the stride, and thus is simply forwarding the index base by the stride which is being unrolled here through the vector unit.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysV81u4zYQfhr6MohAUZYsHXyIExgo0EPRLrZALwtKHFlsKdIlKSXO0xekZMf2OpvsdgWDVMiZb_74iRPunNxpxDXJNyR_XPDBd8auG9PvNVqxqI04rP-UvoOMprQtaFamdSNKVoq0XtKqaTnPV0XGyroRNK_rBnyH0BqlzJPUO2iMQHCIvQNv4CBRCRg0Pu-x8SjAohuUdyS7J_SR0ONY0PkX_xyNFLCVShFWDjo6LKDpuCXsHuqhbdES9gBSe9CEVUBWm0kRoDUWCCvDlgSSPQIl2Sa-PoCOr4Rt4q86qsARMt9Ikj9GrQABhBVAn9s2yGazBbJ6vOnyNH7qpIMaOz5KM1iugtN6h2C0OgDf75FbB0aD2XvZyxcUUA9SCQdPIeMhkSPgs0ftpAmRJefgmw17TawyxmHU4GLkusEetQfTxiWphWwkOhi5GjAEQwo6ciGS8RnGMuRuGnkWAri2g62x-Fqhy0C__LUMlfmtkycJmJ9a4UuYeRqwk183G_olm0WUnGQ4C3v0UrFx1sbNLLqmUNeXAlyIaV7OXocx_UpGnsnE8e5KRuNuks1nnEsELS60eX65Pzr0o5Kz9gtaE2aMmexjzJ7Hd36lJ0UyhozfRDvinPCKaLwv3wVMi2l5yjT7qh4_YmF0XIghnJMZg0XZYCtkhF1Z6J3y59I0Ck86pwKdqjdlnd5EclgmI8znkrAyCFcRjSb-jdPAZqQbtXwz9verdZsnlydd4_l5ZK_nnZ2XJHstiUV_3GkH3XxBLehXBUucfAnAZxyLwCeNu7Odt79C961H-z38_RZx5-cH-fszifs2aa-1fy5x4adQ94T1Pms_xMCPUe-aMd9gYJB5h1EfZuj382N-voMm_5MknzoEi70ZuXLHezPcklNpSUHBdWZQAmqEjtteoXPA3XRJ-8MeQTrQxk9XfOh8CCv_HdB5aTSvFYJsQfog1RhrsfEgBgxXd0DwXCrouBZK6l3wvx48KPQO5E4bG2527sPFDPBpcuxGeQoKsd0Ixl3ToRgUChAyNDOovTpE1IB0FovjIx7jmOItk3GGCuHIfs9jp1YfomoCcD-D7I3UPh7tbm5pjraamI0j5NuNxgM8dWineI7-B434xSgoPHWy6eDp6GsAdN5KgRFDC_Dd4IKSk_1eHUK398StCAmY-x58hpo7nLw_as-4p2QN2hoVchWd8Z01w25uv7DxxsKgpU8WYp2JKqv4AtdpsUqXRZlldNGtadq2bZNltCxZiozlgqdlVa9WVcXytmoXcs0oYylLq7RY5hlNVkVZtstqWYh6lWZNQZYUey5VotTYJ8buFtK5Add5lVfLheI1Khc7dMZq3vyDWpDs_vdf_ni4-0xYKD9hzOLOopsaxXmply408lJxPy_njwu7Dkbu6mHnyJIq6bx7NeulV7i-0su2Uz_64f8AjIbg3OfFYNW6834f-3u2JWy7k74b6qQxPWHbYHae7vbW_I2NJ2wbQ3eEbWP0_wUAAP__5emAGw">