1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+zfh,+zvfh < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
3 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zfh,+zvfh < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+zfh,+zvfhmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
5 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zfh,+zvfhmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
7 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i7(<vscale x 2 x i7>, <vscale x 2 x i1>, i32)
9 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i7(<vscale x 2 x i7> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
10 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i7:
12 ; ZVFH-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
13 ; ZVFH-NEXT: vadd.vv v8, v8, v8
14 ; ZVFH-NEXT: vsra.vi v9, v8, 1
15 ; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
16 ; ZVFH-NEXT: vfwcvt.f.x.v v8, v9, v0.t
19 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i7:
21 ; ZVFHMIN-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
22 ; ZVFHMIN-NEXT: vadd.vv v8, v8, v8
23 ; ZVFHMIN-NEXT: vsra.vi v8, v8, 1
24 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
25 ; ZVFHMIN-NEXT: vsext.vf2 v9, v8, v0.t
26 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v9, v0.t
27 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
28 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
30 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i7(<vscale x 2 x i7> %va, <vscale x 2 x i1> %m, i32 %evl)
31 ret <vscale x 2 x half> %v
34 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
36 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
37 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i8:
39 ; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
40 ; ZVFH-NEXT: vfwcvt.f.x.v v9, v8, v0.t
41 ; ZVFH-NEXT: vmv1r.v v8, v9
44 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i8:
46 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
47 ; ZVFHMIN-NEXT: vsext.vf2 v9, v8, v0.t
48 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v9, v0.t
49 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
50 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
52 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
53 ret <vscale x 2 x half> %v
56 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
57 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i8_unmasked:
59 ; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
60 ; ZVFH-NEXT: vfwcvt.f.x.v v9, v8
61 ; ZVFH-NEXT: vmv1r.v v8, v9
64 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i8_unmasked:
66 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
67 ; ZVFHMIN-NEXT: vsext.vf2 v9, v8
68 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v9
69 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
70 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
72 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
73 ret <vscale x 2 x half> %v
76 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
78 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
79 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i16:
81 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
82 ; ZVFH-NEXT: vfcvt.f.x.v v8, v8, v0.t
85 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i16:
87 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
88 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v9, v8, v0.t
89 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
90 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
92 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
93 ret <vscale x 2 x half> %v
96 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
97 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i16_unmasked:
99 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
100 ; ZVFH-NEXT: vfcvt.f.x.v v8, v8
103 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i16_unmasked:
105 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
106 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v9, v8
107 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
108 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
110 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
111 ret <vscale x 2 x half> %v
114 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
116 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
117 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i32:
119 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
120 ; ZVFH-NEXT: vfncvt.f.x.w v9, v8, v0.t
121 ; ZVFH-NEXT: vmv1r.v v8, v9
124 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i32:
126 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
127 ; ZVFHMIN-NEXT: vfcvt.f.x.v v9, v8, v0.t
128 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
129 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
131 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
132 ret <vscale x 2 x half> %v
135 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
136 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i32_unmasked:
138 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
139 ; ZVFH-NEXT: vfncvt.f.x.w v9, v8
140 ; ZVFH-NEXT: vmv1r.v v8, v9
143 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i32_unmasked:
145 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
146 ; ZVFHMIN-NEXT: vfcvt.f.x.v v9, v8
147 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
148 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
150 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
151 ret <vscale x 2 x half> %v
154 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
156 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
157 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i64:
159 ; ZVFH-NEXT: vsetvli zero, a0, e32, m1, ta, ma
160 ; ZVFH-NEXT: vfncvt.f.x.w v10, v8, v0.t
161 ; ZVFH-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
162 ; ZVFH-NEXT: vfncvt.f.f.w v8, v10, v0.t
165 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i64:
167 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
168 ; ZVFHMIN-NEXT: vfncvt.f.x.w v10, v8, v0.t
169 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
170 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
172 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
173 ret <vscale x 2 x half> %v
176 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
177 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i64_unmasked:
179 ; ZVFH-NEXT: vsetvli zero, a0, e32, m1, ta, ma
180 ; ZVFH-NEXT: vfncvt.f.x.w v10, v8
181 ; ZVFH-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
182 ; ZVFH-NEXT: vfncvt.f.f.w v8, v10
185 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i64_unmasked:
187 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
188 ; ZVFHMIN-NEXT: vfncvt.f.x.w v10, v8
189 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
190 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
192 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
193 ret <vscale x 2 x half> %v
196 declare <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
198 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
199 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i8:
201 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
202 ; CHECK-NEXT: vsext.vf2 v9, v8, v0.t
203 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t
205 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
206 ret <vscale x 2 x float> %v
209 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
210 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i8_unmasked:
212 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
213 ; CHECK-NEXT: vsext.vf2 v9, v8
214 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9
216 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
217 ret <vscale x 2 x float> %v
220 declare <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
222 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
223 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i16:
225 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
226 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8, v0.t
227 ; CHECK-NEXT: vmv1r.v v8, v9
229 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
230 ret <vscale x 2 x float> %v
233 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
234 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i16_unmasked:
236 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
237 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8
238 ; CHECK-NEXT: vmv1r.v v8, v9
240 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
241 ret <vscale x 2 x float> %v
244 declare <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
246 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
247 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i32:
249 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
250 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
252 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
253 ret <vscale x 2 x float> %v
256 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
257 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i32_unmasked:
259 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
260 ; CHECK-NEXT: vfcvt.f.x.v v8, v8
262 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
263 ret <vscale x 2 x float> %v
266 declare <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
268 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
269 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i64:
271 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
272 ; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t
273 ; CHECK-NEXT: vmv.v.v v8, v10
275 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
276 ret <vscale x 2 x float> %v
279 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
280 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i64_unmasked:
282 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
283 ; CHECK-NEXT: vfncvt.f.x.w v10, v8
284 ; CHECK-NEXT: vmv.v.v v8, v10
286 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
287 ret <vscale x 2 x float> %v
290 declare <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
292 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
293 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i8:
295 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
296 ; CHECK-NEXT: vsext.vf4 v10, v8, v0.t
297 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t
299 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
300 ret <vscale x 2 x double> %v
303 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
304 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i8_unmasked:
306 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
307 ; CHECK-NEXT: vsext.vf4 v10, v8
308 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10
310 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
311 ret <vscale x 2 x double> %v
314 declare <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
316 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
317 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i16:
319 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
320 ; CHECK-NEXT: vsext.vf2 v10, v8, v0.t
321 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t
323 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
324 ret <vscale x 2 x double> %v
327 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
328 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i16_unmasked:
330 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
331 ; CHECK-NEXT: vsext.vf2 v10, v8
332 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10
334 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
335 ret <vscale x 2 x double> %v
338 declare <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
340 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
341 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i32:
343 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
344 ; CHECK-NEXT: vfwcvt.f.x.v v10, v8, v0.t
345 ; CHECK-NEXT: vmv2r.v v8, v10
347 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
348 ret <vscale x 2 x double> %v
351 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
352 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i32_unmasked:
354 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
355 ; CHECK-NEXT: vfwcvt.f.x.v v10, v8
356 ; CHECK-NEXT: vmv2r.v v8, v10
358 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
359 ret <vscale x 2 x double> %v
362 declare <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
364 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
365 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i64:
367 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
368 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
370 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
371 ret <vscale x 2 x double> %v
374 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
375 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i64_unmasked:
377 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
378 ; CHECK-NEXT: vfcvt.f.x.v v8, v8
380 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
381 ret <vscale x 2 x double> %v
384 declare <vscale x 32 x half> @llvm.vp.sitofp.nxv32f16.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i1>, i32)
386 define <vscale x 32 x half> @vsitofp_nxv32f16_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
387 ; ZVFH-LABEL: vsitofp_nxv32f16_nxv32i32:
389 ; ZVFH-NEXT: vmv1r.v v24, v0
390 ; ZVFH-NEXT: csrr a1, vlenb
391 ; ZVFH-NEXT: srli a2, a1, 2
392 ; ZVFH-NEXT: vsetvli a3, zero, e8, mf2, ta, ma
393 ; ZVFH-NEXT: vslidedown.vx v0, v0, a2
394 ; ZVFH-NEXT: slli a1, a1, 1
395 ; ZVFH-NEXT: sub a2, a0, a1
396 ; ZVFH-NEXT: sltu a3, a0, a2
397 ; ZVFH-NEXT: addi a3, a3, -1
398 ; ZVFH-NEXT: and a2, a3, a2
399 ; ZVFH-NEXT: vsetvli zero, a2, e16, m4, ta, ma
400 ; ZVFH-NEXT: vfncvt.f.x.w v28, v16, v0.t
401 ; ZVFH-NEXT: bltu a0, a1, .LBB25_2
402 ; ZVFH-NEXT: # %bb.1:
403 ; ZVFH-NEXT: mv a0, a1
404 ; ZVFH-NEXT: .LBB25_2:
405 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
406 ; ZVFH-NEXT: vmv1r.v v0, v24
407 ; ZVFH-NEXT: vfncvt.f.x.w v24, v8, v0.t
408 ; ZVFH-NEXT: vmv8r.v v8, v24
411 ; ZVFHMIN-LABEL: vsitofp_nxv32f16_nxv32i32:
413 ; ZVFHMIN-NEXT: vmv1r.v v1, v0
414 ; ZVFHMIN-NEXT: csrr a1, vlenb
415 ; ZVFHMIN-NEXT: srli a2, a1, 2
416 ; ZVFHMIN-NEXT: vsetvli a3, zero, e8, mf2, ta, ma
417 ; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a2
418 ; ZVFHMIN-NEXT: slli a1, a1, 1
419 ; ZVFHMIN-NEXT: sub a2, a0, a1
420 ; ZVFHMIN-NEXT: sltu a3, a0, a2
421 ; ZVFHMIN-NEXT: addi a3, a3, -1
422 ; ZVFHMIN-NEXT: and a2, a3, a2
423 ; ZVFHMIN-NEXT: vsetvli zero, a2, e32, m8, ta, ma
424 ; ZVFHMIN-NEXT: vfcvt.f.x.v v24, v16, v0.t
425 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
426 ; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v24
427 ; ZVFHMIN-NEXT: bltu a0, a1, .LBB25_2
428 ; ZVFHMIN-NEXT: # %bb.1:
429 ; ZVFHMIN-NEXT: mv a0, a1
430 ; ZVFHMIN-NEXT: .LBB25_2:
431 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
432 ; ZVFHMIN-NEXT: vmv1r.v v0, v1
433 ; ZVFHMIN-NEXT: vfcvt.f.x.v v8, v8, v0.t
434 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
435 ; ZVFHMIN-NEXT: vfncvt.f.f.w v16, v8
436 ; ZVFHMIN-NEXT: vmv8r.v v8, v16
438 %v = call <vscale x 32 x half> @llvm.vp.sitofp.nxv32f16.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 %evl)
439 ret <vscale x 32 x half> %v
442 declare <vscale x 32 x float> @llvm.vp.sitofp.nxv32f32.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i1>, i32)
444 define <vscale x 32 x float> @vsitofp_nxv32f32_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
445 ; CHECK-LABEL: vsitofp_nxv32f32_nxv32i32:
447 ; CHECK-NEXT: vmv1r.v v24, v0
448 ; CHECK-NEXT: csrr a1, vlenb
449 ; CHECK-NEXT: srli a2, a1, 2
450 ; CHECK-NEXT: vsetvli a3, zero, e8, mf2, ta, ma
451 ; CHECK-NEXT: vslidedown.vx v0, v0, a2
452 ; CHECK-NEXT: slli a1, a1, 1
453 ; CHECK-NEXT: sub a2, a0, a1
454 ; CHECK-NEXT: sltu a3, a0, a2
455 ; CHECK-NEXT: addi a3, a3, -1
456 ; CHECK-NEXT: and a2, a3, a2
457 ; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma
458 ; CHECK-NEXT: vfcvt.f.x.v v16, v16, v0.t
459 ; CHECK-NEXT: bltu a0, a1, .LBB26_2
460 ; CHECK-NEXT: # %bb.1:
461 ; CHECK-NEXT: mv a0, a1
462 ; CHECK-NEXT: .LBB26_2:
463 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
464 ; CHECK-NEXT: vmv1r.v v0, v24
465 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
467 %v = call <vscale x 32 x float> @llvm.vp.sitofp.nxv32f32.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 %evl)
468 ret <vscale x 32 x float> %v
471 define <vscale x 32 x float> @vsitofp_nxv32f32_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {
472 ; CHECK-LABEL: vsitofp_nxv32f32_nxv32i32_unmasked:
474 ; CHECK-NEXT: csrr a1, vlenb
475 ; CHECK-NEXT: slli a1, a1, 1
476 ; CHECK-NEXT: sub a2, a0, a1
477 ; CHECK-NEXT: sltu a3, a0, a2
478 ; CHECK-NEXT: addi a3, a3, -1
479 ; CHECK-NEXT: and a2, a3, a2
480 ; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma
481 ; CHECK-NEXT: vfcvt.f.x.v v16, v16
482 ; CHECK-NEXT: bltu a0, a1, .LBB27_2
483 ; CHECK-NEXT: # %bb.1:
484 ; CHECK-NEXT: mv a0, a1
485 ; CHECK-NEXT: .LBB27_2:
486 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
487 ; CHECK-NEXT: vfcvt.f.x.v v8, v8
489 %v = call <vscale x 32 x float> @llvm.vp.sitofp.nxv32f32.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> shufflevector (<vscale x 32 x i1> insertelement (<vscale x 32 x i1> undef, i1 true, i32 0), <vscale x 32 x i1> undef, <vscale x 32 x i32> zeroinitializer), i32 %evl)
490 ret <vscale x 32 x float> %v