Skip to content

Commit 53dbc1f

Browse files
committed
[RISCV] Add vselect pattern with SelectFPImm.
1 parent f83d5d2 commit 53dbc1f

File tree

2 files changed

+53
-5
lines changed

2 files changed

+53
-5
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoVSDPatterns.td

+7-1
Original file line numberDiff line numberDiff line change
@@ -1404,13 +1404,19 @@ foreach fvti = !listconcat(AllFloatVectors, AllBFloatVectors) in {
14041404
fvti.RegClass:$rs2, fvti.RegClass:$rs1, (fvti.Mask V0),
14051405
fvti.AVL, fvti.Log2SEW)>;
14061406

1407+
def : Pat<(fvti.Vector (vselect (fvti.Mask V0),
1408+
(SplatFPOp (SelectFPImm (XLenVT GPR:$imm))),
1409+
fvti.RegClass:$rs2)),
1410+
(!cast<Instruction>("PseudoVMERGE_VXM_"#fvti.LMul.MX)
1411+
(fvti.Vector (IMPLICIT_DEF)),
1412+
fvti.RegClass:$rs2, GPR:$imm, (fvti.Mask V0), fvti.AVL, fvti.Log2SEW)>;
1413+
14071414
def : Pat<(fvti.Vector (vselect (fvti.Mask V0),
14081415
(SplatFPOp (fvti.Scalar fpimm0)),
14091416
fvti.RegClass:$rs2)),
14101417
(!cast<Instruction>("PseudoVMERGE_VIM_"#fvti.LMul.MX)
14111418
(fvti.Vector (IMPLICIT_DEF)),
14121419
fvti.RegClass:$rs2, 0, (fvti.Mask V0), fvti.AVL, fvti.Log2SEW)>;
1413-
14141420
}
14151421
}
14161422

llvm/test/CodeGen/RISCV/rvv/vselect-fp.ll

+46-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22
; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3-
; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-ZVFH
3+
; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32,CHECK-ZVFH
44
; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfh,+v -target-abi=lp64d \
5-
; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-ZVFH
5+
; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64,CHECK-ZVFH
66
; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfhmin,+v -target-abi=ilp32d \
7-
; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-ZVFHMIN
7+
; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32,CHECK-ZVFHMIN
88
; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfhmin,+v -target-abi=lp64d \
9-
; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-ZVFHMIN
9+
; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64,CHECK-ZVFHMIN
1010

1111
define <vscale x 1 x half> @vfmerge_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %cond) {
1212
; CHECK-LABEL: vfmerge_vv_nxv1f16:
@@ -142,6 +142,17 @@ define <vscale x 8 x half> @vfmerge_zv_nxv8f16(<vscale x 8 x half> %va, <vscale
142142
ret <vscale x 8 x half> %vc
143143
}
144144

145+
define <vscale x 8 x half> @vfmerge_nzv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x i1> %cond) {
146+
; CHECK-LABEL: vfmerge_nzv_nxv8f16:
147+
; CHECK: # %bb.0:
148+
; CHECK-NEXT: lui a0, 1048568
149+
; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma
150+
; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0
151+
; CHECK-NEXT: ret
152+
%vc = select <vscale x 8 x i1> %cond, <vscale x 8 x half> splat (half -0.0), <vscale x 8 x half> %va
153+
ret <vscale x 8 x half> %vc
154+
}
155+
145156
define <vscale x 8 x half> @vmerge_truelhs_nxv8f16_0(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
146157
; CHECK-LABEL: vmerge_truelhs_nxv8f16_0:
147158
; CHECK: # %bb.0:
@@ -322,6 +333,17 @@ define <vscale x 8 x float> @vfmerge_zv_nxv8f32(<vscale x 8 x float> %va, <vscal
322333
ret <vscale x 8 x float> %vc
323334
}
324335

336+
define <vscale x 8 x float> @vfmerge_nzv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x i1> %cond) {
337+
; CHECK-LABEL: vfmerge_nzv_nxv8f32:
338+
; CHECK: # %bb.0:
339+
; CHECK-NEXT: lui a0, 524288
340+
; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma
341+
; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0
342+
; CHECK-NEXT: ret
343+
%vc = select <vscale x 8 x i1> %cond, <vscale x 8 x float> splat (float -0.0), <vscale x 8 x float> %va
344+
ret <vscale x 8 x float> %vc
345+
}
346+
325347
define <vscale x 16 x float> @vfmerge_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x i1> %cond) {
326348
; CHECK-LABEL: vfmerge_vv_nxv16f32:
327349
; CHECK: # %bb.0:
@@ -442,6 +464,26 @@ define <vscale x 8 x double> @vfmerge_zv_nxv8f64(<vscale x 8 x double> %va, <vsc
442464
ret <vscale x 8 x double> %vc
443465
}
444466

467+
define <vscale x 8 x double> @vfmerge_nzv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x i1> %cond) {
468+
; RV32-LABEL: vfmerge_nzv_nxv8f64:
469+
; RV32: # %bb.0:
470+
; RV32-NEXT: fcvt.d.w fa5, zero
471+
; RV32-NEXT: fneg.d fa5, fa5
472+
; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, ma
473+
; RV32-NEXT: vfmerge.vfm v8, v8, fa5, v0
474+
; RV32-NEXT: ret
475+
;
476+
; RV64-LABEL: vfmerge_nzv_nxv8f64:
477+
; RV64: # %bb.0:
478+
; RV64-NEXT: li a0, -1
479+
; RV64-NEXT: slli a0, a0, 63
480+
; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
481+
; RV64-NEXT: vmerge.vxm v8, v8, a0, v0
482+
; RV64-NEXT: ret
483+
%vc = select <vscale x 8 x i1> %cond, <vscale x 8 x double> splat (double -0.0), <vscale x 8 x double> %va
484+
ret <vscale x 8 x double> %vc
485+
}
486+
445487
define <vscale x 16 x double> @vselect_combine_regression(<vscale x 16 x i64> %va, <vscale x 16 x double> %vb) {
446488
; CHECK-LABEL: vselect_combine_regression:
447489
; CHECK: # %bb.0:

0 commit comments

Comments
 (0)