Skip to content

Commit fd50151

Browse files
authored
[RISCV] Only support SPLAT_VECTOR for Zvfhmin when also enable the scalar extension of half fp (#88275)
1 parent f4509cf commit fd50151

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1063,7 +1063,8 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
10631063
setOperationAction({ISD::CONCAT_VECTORS, ISD::INSERT_SUBVECTOR,
10641064
ISD::EXTRACT_SUBVECTOR, ISD::SCALAR_TO_VECTOR},
10651065
VT, Custom);
1066-
setOperationAction(ISD::SPLAT_VECTOR, VT, Custom);
1066+
if (Subtarget.hasStdExtZfhminOrZhinxmin())
1067+
setOperationAction(ISD::SPLAT_VECTOR, VT, Custom);
10671068
// load/store
10681069
setOperationAction({ISD::LOAD, ISD::STORE}, VT, Custom);
10691070

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

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,36 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22
; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zfh,+zvfh,+v -target-abi ilp32d -verify-machineinstrs < %s \
3-
; RUN: | FileCheck %s --check-prefixes=CHECK,OPTIMIZED
3+
; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFH,OPTIMIZED
44
; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zfh,+zvfh,+v -target-abi lp64d -verify-machineinstrs < %s \
5-
; RUN: | FileCheck %s --check-prefixes=CHECK,OPTIMIZED
5+
; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFH,OPTIMIZED
66
; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zfh,+zvfh,+v,+no-optimized-zero-stride-load -target-abi ilp32d -verify-machineinstrs < %s \
7-
; RUN: | FileCheck %s --check-prefixes=CHECK,NOT-OPTIMIZED
7+
; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFH,NOT-OPTIMIZED
88
; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zfh,+zvfh,+v,+no-optimized-zero-stride-load -target-abi lp64d -verify-machineinstrs < %s \
9-
; RUN: | FileCheck %s --check-prefixes=CHECK,NOT-OPTIMIZED
9+
; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFH,NOT-OPTIMIZED
10+
; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zfh,+zvfhmin,+v -target-abi ilp32d -verify-machineinstrs < %s \
11+
; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,OPTIMIZED
12+
; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zfh,+zvfhmin,+v -target-abi lp64d -verify-machineinstrs < %s \
13+
; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,OPTIMIZED
14+
; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zfh,+zvfhmin,+v,+no-optimized-zero-stride-load -target-abi ilp32d -verify-machineinstrs < %s \
15+
; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,NOT-OPTIMIZED
16+
; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zfh,+zvfhmin,+v,+no-optimized-zero-stride-load -target-abi lp64d -verify-machineinstrs < %s \
17+
; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,NOT-OPTIMIZED
1018

1119
define <vscale x 8 x half> @vsplat_nxv8f16(half %f) {
12-
; CHECK-LABEL: vsplat_nxv8f16:
13-
; CHECK: # %bb.0:
14-
; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
15-
; CHECK-NEXT: vfmv.v.f v8, fa0
16-
; CHECK-NEXT: ret
20+
; ZVFH-LABEL: vsplat_nxv8f16:
21+
; ZVFH: # %bb.0:
22+
; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
23+
; ZVFH-NEXT: vfmv.v.f v8, fa0
24+
; ZVFH-NEXT: ret
25+
;
26+
; ZVFHMIN-LABEL: vsplat_nxv8f16:
27+
; ZVFHMIN: # %bb.0:
28+
; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
29+
; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
30+
; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
31+
; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
32+
; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12
33+
; ZVFHMIN-NEXT: ret
1734
%head = insertelement <vscale x 8 x half> poison, half %f, i32 0
1835
%splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1936
ret <vscale x 8 x half> %splat

0 commit comments

Comments
 (0)