Issue |
143923
|
Summary |
[RISCV] Optimize the AVL of vleNff.v/clarify if we need to preserve vl output
|
Labels |
backend:RISC-V
|
Assignees |
|
Reporter |
lukel97
|
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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs