[llvm] cd2761f - [RISCV] Remove vp.reverse mask check in performVP_REVERSECombine (#180724)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 11 01:13:48 PST 2026
Author: Luke Lau
Date: 2026-02-11T09:13:42Z
New Revision: cd2761f7ab71b4c926e4f7d2ee8947db95a43e30
URL: https://github.com/llvm/llvm-project/commit/cd2761f7ab71b4c926e4f7d2ee8947db95a43e30
DIFF: https://github.com/llvm/llvm-project/commit/cd2761f7ab71b4c926e4f7d2ee8947db95a43e30.diff
LOG: [RISCV] Remove vp.reverse mask check in performVP_REVERSECombine (#180724)
Similar to #180706, the masked off lanes in vp.reverse are poison so can
be replaced with anything. Because of this, we should be able to fold a
masked vp.reverse(vp.load) into a vp.strided.load stride=-1 even when
the mask isn't all ones.
Added:
Modified:
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/test/CodeGen/RISCV/rvv/vp-combine-reverse-load.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index 61267e65e22de..733ac2cb544f6 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -19270,10 +19270,6 @@ static SDValue performVP_REVERSECombine(SDNode *N, SelectionDAG &DAG,
!N->getOperand(0).hasOneUse())
return SDValue();
- // Check if the mask of outer vp.reverse are all 1's.
- if (!isOneOrOneSplat(N->getOperand(1)))
- return SDValue();
-
SDValue LoadMask = VPLoad->getMask();
// If Mask is all ones, then load is unmasked and can be reversed.
if (!isOneOrOneSplat(LoadMask)) {
diff --git a/llvm/test/CodeGen/RISCV/rvv/vp-combine-reverse-load.ll b/llvm/test/CodeGen/RISCV/rvv/vp-combine-reverse-load.ll
index 73700ecda5060..96bc5e77b5fcf 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vp-combine-reverse-load.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vp-combine-reverse-load.ll
@@ -64,6 +64,21 @@ define <vscale x 2 x float> @test_load_mask_not_all_one(<vscale x 2 x float>* %p
ret <vscale x 2 x float> %rev
}
+define <vscale x 2 x float> @test_load_reverse_mask_not_all_one(ptr %ptr, <vscale x 2 x i1> %notallones, i32 zeroext %evl) {
+; CHECK-LABEL: test_load_reverse_mask_not_all_one:
+; CHECK: # %bb.0:
+; CHECK-NEXT: slli a2, a1, 2
+; CHECK-NEXT: add a0, a2, a0
+; CHECK-NEXT: addi a0, a0, -4
+; CHECK-NEXT: li a2, -4
+; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
+; CHECK-NEXT: vlse32.v v8, (a0), a2
+; CHECK-NEXT: ret
+ %load = call <vscale x 2 x float> @llvm.vp.load.nxv2f32.p0nxv2f32(ptr %ptr, <vscale x 2 x i1> splat (i1 true), i32 %evl)
+ %rev = call <vscale x 2 x float> @llvm.experimental.vp.reverse.nxv2f32(<vscale x 2 x float> %load, <vscale x 2 x i1> %notallones, i32 %evl)
+ ret <vscale x 2 x float> %rev
+}
+
define <vscale x 2 x float> @test_
diff erent_evl(<vscale x 2 x float>* %ptr, <vscale x 2 x i1> %mask, i32 zeroext %evl1, i32 zeroext %evl2) {
; CHECK-LABEL: test_
diff erent_evl:
; CHECK: # %bb.0:
More information about the llvm-commits
mailing list