1
1
; 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
+ }
18
36
19
37
define <vscale x 8 x half > @vsplat_nxv8f16 (half %f ) {
20
38
; ZVFH-LABEL: vsplat_nxv8f16:
@@ -25,10 +43,17 @@ define <vscale x 8 x half> @vsplat_nxv8f16(half %f) {
25
43
;
26
44
; ZVFHMIN-LABEL: vsplat_nxv8f16:
27
45
; ZVFHMIN: # %bb.0:
28
- ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
46
+ ; ZVFHMIN-NEXT: fmv.x.w a0, fa0
29
47
; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma
30
48
; ZVFHMIN-NEXT: vmv.v.x v8, a0
31
49
; 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
32
57
%head = insertelement <vscale x 8 x half > poison, half %f , i32 0
33
58
%splat = shufflevector <vscale x 8 x half > %head , <vscale x 8 x half > poison, <vscale x 8 x i32 > zeroinitializer
34
59
ret <vscale x 8 x half > %splat
@@ -83,20 +108,26 @@ define <vscale x 8 x double> @vsplat_zero_nxv8f64() {
83
108
ret <vscale x 8 x double > splat (double zeroinitializer )
84
109
}
85
110
86
- ; Test that we fold this to a vlse with 0 stride.
87
111
define <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
100
131
%f = load float , ptr %ptr
101
132
%head = insertelement <vscale x 8 x float > poison, float %f , i32 0
102
133
%splat = shufflevector <vscale x 8 x float > %head , <vscale x 8 x float > poison, <vscale x 8 x i32 > zeroinitializer
0 commit comments