11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2- ; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zfh,+zvfh,+v,+optimized-zero-stride-load -target-abi ilp32d -verify-machineinstrs < %s \
3- ; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFH,OPTIMIZED
4- ; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zfh,+zvfh,+v,+optimized-zero-stride-load -target-abi lp64d -verify-machineinstrs < %s \
5- ; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFH,OPTIMIZED
6- ; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zfh,+zvfh,+v -target-abi ilp32d -verify-machineinstrs < %s \
7- ; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFH,NOT-OPTIMIZED
8- ; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zfh,+zvfh,+v -target-abi lp64d -verify-machineinstrs < %s \
9- ; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFH,NOT-OPTIMIZED
10- ; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zfh,+zvfhmin,+v,+optimized-zero-stride-load -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,+optimized-zero-stride-load -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 -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 -target-abi lp64d -verify-machineinstrs < %s \
17- ; RUN: | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,NOT-OPTIMIZED
2+ ; RUN: llc -mtriple=riscv32 -mattr=+v,+zvfh,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,NOZFMIN,ZVFH
3+ ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfh,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,NOZFMIN,ZVFH
4+ ; RUN: llc -mtriple=riscv32 -mattr=+v,+zvfhmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,NOZFMIN,ZVFHMIN
5+ ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,NOZFMIN,ZVFHMIN
6+ ; RUN: llc -mtriple=riscv32 -mattr=+v,+zfhmin,+zfbfmin,+zvfhmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZFMIN
7+ ; RUN: llc -mtriple=riscv64 -mattr=+v,+zfhmin,+zfbfmin,+zvfhmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZFMIN
8+
9+ define <vscale x 8 x bfloat> @vsplat_nxv8bf16 (bfloat %f ) {
10+ ; NOZFMIN-LABEL: vsplat_nxv8bf16:
11+ ; NOZFMIN: # %bb.0:
12+ ; NOZFMIN-NEXT: fmv.x.w a0, fa0
13+ ; NOZFMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma
14+ ; NOZFMIN-NEXT: vmv.v.x v8, a0
15+ ; NOZFMIN-NEXT: ret
16+ ;
17+ ; ZFMIN-LABEL: vsplat_nxv8bf16:
18+ ; ZFMIN: # %bb.0:
19+ ; ZFMIN-NEXT: fmv.x.h a0, fa0
20+ ; ZFMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma
21+ ; ZFMIN-NEXT: vmv.v.x v8, a0
22+ ; ZFMIN-NEXT: ret
23+ %head = insertelement <vscale x 8 x bfloat> poison, bfloat %f , i32 0
24+ %splat = shufflevector <vscale x 8 x bfloat> %head , <vscale x 8 x bfloat> poison, <vscale x 8 x i32 > zeroinitializer
25+ ret <vscale x 8 x bfloat> %splat
26+ }
27+
28+ define <vscale x 8 x bfloat> @vsplat_zero_nxv8bf16 () {
29+ ; CHECK-LABEL: vsplat_zero_nxv8bf16:
30+ ; CHECK: # %bb.0:
31+ ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
32+ ; CHECK-NEXT: vmv.v.i v8, 0
33+ ; CHECK-NEXT: ret
34+ ret <vscale x 8 x bfloat> splat (bfloat zeroinitializer )
35+ }
1836
1937define <vscale x 8 x half > @vsplat_nxv8f16 (half %f ) {
2038; ZVFH-LABEL: vsplat_nxv8f16:
@@ -25,10 +43,17 @@ define <vscale x 8 x half> @vsplat_nxv8f16(half %f) {
2543;
2644; ZVFHMIN-LABEL: vsplat_nxv8f16:
2745; ZVFHMIN: # %bb.0:
28- ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
46+ ; ZVFHMIN-NEXT: fmv.x.w a0, fa0
2947; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma
3048; ZVFHMIN-NEXT: vmv.v.x v8, a0
3149; ZVFHMIN-NEXT: ret
50+ ;
51+ ; ZFMIN-LABEL: vsplat_nxv8f16:
52+ ; ZFMIN: # %bb.0:
53+ ; ZFMIN-NEXT: fmv.x.h a0, fa0
54+ ; ZFMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma
55+ ; ZFMIN-NEXT: vmv.v.x v8, a0
56+ ; ZFMIN-NEXT: ret
3257 %head = insertelement <vscale x 8 x half > poison, half %f , i32 0
3358 %splat = shufflevector <vscale x 8 x half > %head , <vscale x 8 x half > poison, <vscale x 8 x i32 > zeroinitializer
3459 ret <vscale x 8 x half > %splat
@@ -83,20 +108,26 @@ define <vscale x 8 x double> @vsplat_zero_nxv8f64() {
83108 ret <vscale x 8 x double > splat (double zeroinitializer )
84109}
85110
86- ; Test that we fold this to a vlse with 0 stride.
87111define <vscale x 8 x float > @vsplat_load_nxv8f32 (ptr %ptr ) {
88- ; OPTIMIZED-LABEL: vsplat_load_nxv8f32:
89- ; OPTIMIZED: # %bb.0:
90- ; OPTIMIZED-NEXT: vsetvli a1, zero, e32, m4, ta, ma
91- ; OPTIMIZED-NEXT: vlse32.v v8, (a0), zero
92- ; OPTIMIZED-NEXT: ret
93- ;
94- ; NOT-OPTIMIZED-LABEL: vsplat_load_nxv8f32:
95- ; NOT-OPTIMIZED: # %bb.0:
96- ; NOT-OPTIMIZED-NEXT: flw fa5, 0(a0)
97- ; NOT-OPTIMIZED-NEXT: vsetvli a0, zero, e32, m4, ta, ma
98- ; NOT-OPTIMIZED-NEXT: vfmv.v.f v8, fa5
99- ; NOT-OPTIMIZED-NEXT: ret
112+ ; CHECK-LABEL: vsplat_load_nxv8f32:
113+ ; CHECK: # %bb.0:
114+ ; CHECK-NEXT: flw fa5, 0(a0)
115+ ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
116+ ; CHECK-NEXT: vfmv.v.f v8, fa5
117+ ; CHECK-NEXT: ret
118+ %f = load float , ptr %ptr
119+ %head = insertelement <vscale x 8 x float > poison, float %f , i32 0
120+ %splat = shufflevector <vscale x 8 x float > %head , <vscale x 8 x float > poison, <vscale x 8 x i32 > zeroinitializer
121+ ret <vscale x 8 x float > %splat
122+ }
123+
124+ ; Test that we fold this to a vlse with 0 stride.
125+ define <vscale x 8 x float > @vsplat_load_nxv8f32_optimized (ptr %ptr ) "target-features" ="+optimized-zero-stride-load" {
126+ ; CHECK-LABEL: vsplat_load_nxv8f32_optimized:
127+ ; CHECK: # %bb.0:
128+ ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma
129+ ; CHECK-NEXT: vlse32.v v8, (a0), zero
130+ ; CHECK-NEXT: ret
100131 %f = load float , ptr %ptr
101132 %head = insertelement <vscale x 8 x float > poison, float %f , i32 0
102133 %splat = shufflevector <vscale x 8 x float > %head , <vscale x 8 x float > poison, <vscale x 8 x i32 > zeroinitializer
0 commit comments