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