[llvm] 9e9bf1e - [RISCV] Use setcc to truncate results in widenVectorOpsToi8
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Thu May 4 02:49:38 PDT 2023
Author: Luke Lau
Date: 2023-05-04T10:49:27+01:00
New Revision: 9e9bf1e3ed9eb3001fdce2e5a3b02569db166527
URL: https://github.com/llvm/llvm-project/commit/9e9bf1e3ed9eb3001fdce2e5a3b02569db166527
DIFF: https://github.com/llvm/llvm-project/commit/9e9bf1e3ed9eb3001fdce2e5a3b02569db166527.diff
LOG: [RISCV] Use setcc to truncate results in widenVectorOpsToi8
To avoid an unnecessary vand.vi
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D149771
Added:
Modified:
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index 423c102e1f4ab..77f0d5ff17fa5 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -7318,9 +7318,9 @@ static SDValue widenVectorOpsToi8(SDValue N, SDLoc &DL, SelectionDAG &DAG) {
SDValue WideN = DAG.getNode(N.getOpcode(), DL, VTs, WideOps);
SmallVector<SDValue, 4> TruncVals;
for (unsigned I = 0; I < NumVals; I++) {
- TruncVals.push_back(DAG.getNode(ISD::TRUNCATE, DL,
- N->getSimpleValueType(I),
- SDValue(WideN.getNode(), I)));
+ TruncVals.push_back(
+ DAG.getSetCC(DL, N->getSimpleValueType(I), WideN.getValue(I),
+ DAG.getConstant(0, DL, WideVT), ISD::SETNE));
}
if (TruncVals.size() > 1)
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
index 25d160e39f1a6..de0e9db9c76b9 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
@@ -18,10 +18,8 @@ define {<vscale x 16 x i1>, <vscale x 16 x i1>} @vector_deinterleave_nxv16i1_nxv
; CHECK-NEXT: vmv1r.v v0, v8
; CHECK-NEXT: vmerge.vim v12, v10, 1, v0
; CHECK-NEXT: vnsrl.wi v8, v12, 0
-; CHECK-NEXT: vand.vi v8, v8, 1
; CHECK-NEXT: vmsne.vi v0, v8, 0
-; CHECK-NEXT: vnsrl.wi v8, v12, 8
-; CHECK-NEXT: vand.vi v10, v8, 1
+; CHECK-NEXT: vnsrl.wi v10, v12, 8
; CHECK-NEXT: vmsne.vi v8, v10, 0
; CHECK-NEXT: ret
%retval = call {<vscale x 16 x i1>, <vscale x 16 x i1>} @llvm.experimental.vector.deinterleave2.nxv32i1(<vscale x 32 x i1> %vec)
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll b/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
index f6e6de24af91f..d22f2edb366f4 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
@@ -17,15 +17,13 @@ define <vscale x 32 x i1> @vector_interleave_nxv32i1_nxv16i1(<vscale x 16 x i1>
; CHECK-NEXT: vwaddu.vv v16, v8, v12
; CHECK-NEXT: li a0, -1
; CHECK-NEXT: vwmaccu.vx v16, a0, v12
-; CHECK-NEXT: vand.vi v8, v18, 1
-; CHECK-NEXT: vmsne.vi v10, v8, 0
-; CHECK-NEXT: vand.vi v8, v16, 1
-; CHECK-NEXT: vmsne.vi v0, v8, 0
+; CHECK-NEXT: vmsne.vi v8, v18, 0
+; CHECK-NEXT: vmsne.vi v0, v16, 0
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: srli a0, a0, 2
; CHECK-NEXT: add a1, a0, a0
; CHECK-NEXT: vsetvli zero, a1, e8, mf2, tu, ma
-; CHECK-NEXT: vslideup.vx v0, v10, a0
+; CHECK-NEXT: vslideup.vx v0, v8, a0
; CHECK-NEXT: ret
%res = call <vscale x 32 x i1> @llvm.experimental.vector.interleave2.nxv32i1(<vscale x 16 x i1> %a, <vscale x 16 x i1> %b)
ret <vscale x 32 x i1> %res
More information about the llvm-commits
mailing list