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

    <tr>
        <th>Summary</th>
        <td>
            [RISCV] Optimize the AVL of vleNff.v/clarify if we need to preserve vl output
        </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>
    In RISCVVLOptimizer we currently don't reduce the AVL of vleNff.v. 

#121705 originally proposed to handle it, but in the review I argued that this would affect the output vl: https://github.com/llvm/llvm-project/pull/121705#discussion_r1903617168

However I think I was wrong here, since I recently realised that after #90049 we actually fold vmerge.vvm masks into vleNff.v, e.g.

```llvm
define <vscale x 2 x i32> @vpmerge_vleff(<vscale x 2 x i32> %passthru, ptr %p, <vscale x 2 x i1> %m, i32 zeroext %vl) {
; CHECK-LABEL: vpmerge_vleff:
; CHECK:       # %bb.0:
; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, mu
; CHECK-NEXT: vle32ff.v v8, (a0), v0.t
; CHECK-NEXT:    ret
  %1 = zext i32 %vl to i64
 %a = call { <vscale x 2 x i32>, i64 } @llvm.riscv.vleff.nxv2i32(<vscale x 2 x i32> undef, ptr %p, i64 %1)
  %b = extractvalue { <vscale x 2 x i32>, i64 } %a, 0
  %c = call <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1> %m, <vscale x 2 x i32> %b, <vscale x 2 x i32> %passthru, i32 %vl)
  ret <vscale x 2 x i32> %c
}
```

So if we currently fold vmerge masks into vleNff.vs, this may affect the output vl.

Given this, is it safe to assume that we can add masks or tweak the AVL of a vleNff.v? Presumably as long as we don't increase the AVL/output vl, i.e. keep it within the range of implementation allowed values.

In which case we should probably go ahead and handle vleNff.vs in RISCVVLOptimizer.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVV2P4jYU_TXm5WqixE6APPDAfNBFHW2rbjXq28pxboiLY0e2Y4b99ZUNzLLbYdQipHz4xvece4_P5c7JnUZckeqeVI8zPvne2JWa9qjqxawx7XG11fDH9svDy8vzb6OXg_yGFg4IYrIWtVdHaI0mdOHBYjsJBN8jrF-ewXQQFH7uuixkQPJ1_FNW0GKRV2Cs3EnNlTrCaM1oHLbgDfRctwpBekIfoJk8SJ32sxgkHmAL3O6mGNpzD76XDg5mUi3wrkPhU6iZ_Dh5CIqwNfTej46wNaEbQjc76fupyYQZCN0oFS6Xu9Gav1F4QjfjpBShmxNKQlkrnZick0Z_tUWds3mxKObLE5tP5oABLWwjEr2HLRy4g4M1egc9WowcnNQCYQsWxalYFrmS7kKBdx4tEMrqPC_rWFYu_JTK0hnVQhjQ7jALYYCBu70Dqb15K2tMgNkuOxd3np_-iVm-brGTGoGwh-AEVwivQOEVJKOEPQEp8zCm3b8GhV1H6PJWJK1G7pzv7RQTjt6mV_H-X18U5w-GuCoZhW9oDb76-C4oQmsgi_uIld3Dw6enh1_vntf3T8-xVT-iYevrqLh--hHK4l5Nk-U_xdx9fvrrz3NgcOiDkil7RMKLVCpG42VIDz6RGaZ3twgKGY0VhrBMPOmS54TW8T7kmb-V12JciiirAgh7hG-Re6xD4h8VLudlDCG04ilCcKViUW70KdVxXgJZPMaWxdZmVjoRslSnTL8GGiNvdm_SLXY_9y3tSKsiUjrjbRIafPWWCx-4mvC_oqIVj8_5ZSdxxeum9hKRMGYnfX_A4gdF3VZo8_HytYDf2nFhb9F_8KmIzV48Xh-w03n7YkB2Pzrh1Zl977y6JLzoWgM_vutZ56P8iwyoU2QC7EB6cLzDKCDu3DTgyT5icq6Bt-05nbHgD8j31ybMv_sF28DvFt008EYdgTtQ0auiaeGbi0stLHL35uOEbr5bakSTYQZ7xDGCOshofSeL5nqHMZ8cRoUDas-9NBq4UuaALSRNuTPBrYZDL0UPImY6ILg--fhoTZOw7QzwHnkLXLeXqfBWxjgVfh5J2axdsbZmNZ_hqliU9aIs2ZLO-tW8rkq2KKhoBO3yZdd22Ja0YGxJxaJuyplc0ZxW-bygxTyfF3UmKoElrzgviqKum4qUOQ5cqiyp1tjdTDo34aooWU3ZTPEGlUsjlNKGiz3qlrB1RHj3QiiNg9Wu0qBppp2L6pfOu--7eelVGsGJFKke4ULrvWFK6EYobmV3POtP42l4jhYd2hALdVbUbLJq9b9nYCLn4hQ88Qsr-k8AAAD__3FVgYQ">