1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+zfh,+zvfh \
3 ; RUN: -verify-machineinstrs -target-abi=ilp32d | FileCheck %s
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zfh,+zvfh \
5 ; RUN: -verify-machineinstrs -target-abi=lp64d | FileCheck %s
7 declare <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.nxv1f16.nxv1i8(
12 define <vscale x 1 x half> @intrinsic_vfwcvt_f.x.v_nxv1f16_nxv1i8(<vscale x 1 x i8> %0, iXLen %1) nounwind {
13 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv1f16_nxv1i8:
14 ; CHECK: # %bb.0: # %entry
15 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
16 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8
17 ; CHECK-NEXT: vmv1r.v v8, v9
20 %a = call <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.nxv1f16.nxv1i8(
21 <vscale x 1 x half> undef,
25 ret <vscale x 1 x half> %a
28 declare <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f16.nxv1i8(
34 define <vscale x 1 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv1f16_nxv1i8(<vscale x 1 x half> %0, <vscale x 1 x i8> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
35 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv1f16_nxv1i8:
36 ; CHECK: # %bb.0: # %entry
37 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu
38 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t
41 %a = call <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f16.nxv1i8(
42 <vscale x 1 x half> %0,
47 ret <vscale x 1 x half> %a
50 declare <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.nxv2f16.nxv2i8(
55 define <vscale x 2 x half> @intrinsic_vfwcvt_f.x.v_nxv2f16_nxv2i8(<vscale x 2 x i8> %0, iXLen %1) nounwind {
56 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv2f16_nxv2i8:
57 ; CHECK: # %bb.0: # %entry
58 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
59 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8
60 ; CHECK-NEXT: vmv1r.v v8, v9
63 %a = call <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.nxv2f16.nxv2i8(
64 <vscale x 2 x half> undef,
68 ret <vscale x 2 x half> %a
71 declare <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f16.nxv2i8(
77 define <vscale x 2 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv2f16_nxv2i8(<vscale x 2 x half> %0, <vscale x 2 x i8> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
78 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv2f16_nxv2i8:
79 ; CHECK: # %bb.0: # %entry
80 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu
81 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t
84 %a = call <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f16.nxv2i8(
85 <vscale x 2 x half> %0,
90 ret <vscale x 2 x half> %a
93 declare <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.nxv4f16.nxv4i8(
98 define <vscale x 4 x half> @intrinsic_vfwcvt_f.x.v_nxv4f16_nxv4i8(<vscale x 4 x i8> %0, iXLen %1) nounwind {
99 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv4f16_nxv4i8:
100 ; CHECK: # %bb.0: # %entry
101 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
102 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8
103 ; CHECK-NEXT: vmv1r.v v8, v9
106 %a = call <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.nxv4f16.nxv4i8(
107 <vscale x 4 x half> undef,
108 <vscale x 4 x i8> %0,
111 ret <vscale x 4 x half> %a
114 declare <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f16.nxv4i8(
120 define <vscale x 4 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv4f16_nxv4i8(<vscale x 4 x half> %0, <vscale x 4 x i8> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
121 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv4f16_nxv4i8:
122 ; CHECK: # %bb.0: # %entry
123 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu
124 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t
127 %a = call <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f16.nxv4i8(
128 <vscale x 4 x half> %0,
129 <vscale x 4 x i8> %1,
130 <vscale x 4 x i1> %2,
133 ret <vscale x 4 x half> %a
136 declare <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.nxv8f16.nxv8i8(
141 define <vscale x 8 x half> @intrinsic_vfwcvt_f.x.v_nxv8f16_nxv8i8(<vscale x 8 x i8> %0, iXLen %1) nounwind {
142 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv8f16_nxv8i8:
143 ; CHECK: # %bb.0: # %entry
144 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
145 ; CHECK-NEXT: vfwcvt.f.x.v v10, v8
146 ; CHECK-NEXT: vmv2r.v v8, v10
149 %a = call <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.nxv8f16.nxv8i8(
150 <vscale x 8 x half> undef,
151 <vscale x 8 x i8> %0,
154 ret <vscale x 8 x half> %a
157 declare <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f16.nxv8i8(
163 define <vscale x 8 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv8f16_nxv8i8(<vscale x 8 x half> %0, <vscale x 8 x i8> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
164 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv8f16_nxv8i8:
165 ; CHECK: # %bb.0: # %entry
166 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu
167 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t
170 %a = call <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f16.nxv8i8(
171 <vscale x 8 x half> %0,
172 <vscale x 8 x i8> %1,
173 <vscale x 8 x i1> %2,
176 ret <vscale x 8 x half> %a
179 declare <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.nxv16f16.nxv16i8(
180 <vscale x 16 x half>,
184 define <vscale x 16 x half> @intrinsic_vfwcvt_f.x.v_nxv16f16_nxv16i8(<vscale x 16 x i8> %0, iXLen %1) nounwind {
185 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv16f16_nxv16i8:
186 ; CHECK: # %bb.0: # %entry
187 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
188 ; CHECK-NEXT: vfwcvt.f.x.v v12, v8
189 ; CHECK-NEXT: vmv4r.v v8, v12
192 %a = call <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.nxv16f16.nxv16i8(
193 <vscale x 16 x half> undef,
194 <vscale x 16 x i8> %0,
197 ret <vscale x 16 x half> %a
200 declare <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f16.nxv16i8(
201 <vscale x 16 x half>,
206 define <vscale x 16 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv16f16_nxv16i8(<vscale x 16 x half> %0, <vscale x 16 x i8> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind {
207 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv16f16_nxv16i8:
208 ; CHECK: # %bb.0: # %entry
209 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu
210 ; CHECK-NEXT: vfwcvt.f.x.v v8, v12, v0.t
213 %a = call <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f16.nxv16i8(
214 <vscale x 16 x half> %0,
215 <vscale x 16 x i8> %1,
216 <vscale x 16 x i1> %2,
219 ret <vscale x 16 x half> %a
222 declare <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.nxv32f16.nxv32i8(
223 <vscale x 32 x half>,
227 define <vscale x 32 x half> @intrinsic_vfwcvt_f.x.v_nxv32f16_nxv32i8(<vscale x 32 x i8> %0, iXLen %1) nounwind {
228 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv32f16_nxv32i8:
229 ; CHECK: # %bb.0: # %entry
230 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
231 ; CHECK-NEXT: vfwcvt.f.x.v v16, v8
232 ; CHECK-NEXT: vmv8r.v v8, v16
235 %a = call <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.nxv32f16.nxv32i8(
236 <vscale x 32 x half> undef,
237 <vscale x 32 x i8> %0,
240 ret <vscale x 32 x half> %a
243 declare <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv32f16.nxv32i8(
244 <vscale x 32 x half>,
249 define <vscale x 32 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv32f16_nxv32i8(<vscale x 32 x half> %0, <vscale x 32 x i8> %1, <vscale x 32 x i1> %2, iXLen %3) nounwind {
250 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv32f16_nxv32i8:
251 ; CHECK: # %bb.0: # %entry
252 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu
253 ; CHECK-NEXT: vfwcvt.f.x.v v8, v16, v0.t
256 %a = call <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv32f16.nxv32i8(
257 <vscale x 32 x half> %0,
258 <vscale x 32 x i8> %1,
259 <vscale x 32 x i1> %2,
262 ret <vscale x 32 x half> %a
265 declare <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.nxv1f32.nxv1i16(
266 <vscale x 1 x float>,
270 define <vscale x 1 x float> @intrinsic_vfwcvt_f.x.v_nxv1f32_nxv1i16(<vscale x 1 x i16> %0, iXLen %1) nounwind {
271 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv1f32_nxv1i16:
272 ; CHECK: # %bb.0: # %entry
273 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
274 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8
275 ; CHECK-NEXT: vmv1r.v v8, v9
278 %a = call <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.nxv1f32.nxv1i16(
279 <vscale x 1 x float> undef,
280 <vscale x 1 x i16> %0,
283 ret <vscale x 1 x float> %a
286 declare <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f32.nxv1i16(
287 <vscale x 1 x float>,
292 define <vscale x 1 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv1f32_nxv1i16(<vscale x 1 x float> %0, <vscale x 1 x i16> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
293 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv1f32_nxv1i16:
294 ; CHECK: # %bb.0: # %entry
295 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu
296 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t
299 %a = call <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f32.nxv1i16(
300 <vscale x 1 x float> %0,
301 <vscale x 1 x i16> %1,
302 <vscale x 1 x i1> %2,
305 ret <vscale x 1 x float> %a
308 declare <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.nxv2f32.nxv2i16(
309 <vscale x 2 x float>,
313 define <vscale x 2 x float> @intrinsic_vfwcvt_f.x.v_nxv2f32_nxv2i16(<vscale x 2 x i16> %0, iXLen %1) nounwind {
314 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv2f32_nxv2i16:
315 ; CHECK: # %bb.0: # %entry
316 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
317 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8
318 ; CHECK-NEXT: vmv1r.v v8, v9
321 %a = call <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.nxv2f32.nxv2i16(
322 <vscale x 2 x float> undef,
323 <vscale x 2 x i16> %0,
326 ret <vscale x 2 x float> %a
329 declare <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f32.nxv2i16(
330 <vscale x 2 x float>,
335 define <vscale x 2 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv2f32_nxv2i16(<vscale x 2 x float> %0, <vscale x 2 x i16> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
336 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv2f32_nxv2i16:
337 ; CHECK: # %bb.0: # %entry
338 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu
339 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t
342 %a = call <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f32.nxv2i16(
343 <vscale x 2 x float> %0,
344 <vscale x 2 x i16> %1,
345 <vscale x 2 x i1> %2,
348 ret <vscale x 2 x float> %a
351 declare <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.nxv4f32.nxv4i16(
352 <vscale x 4 x float>,
356 define <vscale x 4 x float> @intrinsic_vfwcvt_f.x.v_nxv4f32_nxv4i16(<vscale x 4 x i16> %0, iXLen %1) nounwind {
357 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv4f32_nxv4i16:
358 ; CHECK: # %bb.0: # %entry
359 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
360 ; CHECK-NEXT: vfwcvt.f.x.v v10, v8
361 ; CHECK-NEXT: vmv2r.v v8, v10
364 %a = call <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.nxv4f32.nxv4i16(
365 <vscale x 4 x float> undef,
366 <vscale x 4 x i16> %0,
369 ret <vscale x 4 x float> %a
372 declare <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f32.nxv4i16(
373 <vscale x 4 x float>,
378 define <vscale x 4 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv4f32_nxv4i16(<vscale x 4 x float> %0, <vscale x 4 x i16> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
379 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv4f32_nxv4i16:
380 ; CHECK: # %bb.0: # %entry
381 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu
382 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t
385 %a = call <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f32.nxv4i16(
386 <vscale x 4 x float> %0,
387 <vscale x 4 x i16> %1,
388 <vscale x 4 x i1> %2,
391 ret <vscale x 4 x float> %a
394 declare <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.nxv8f32.nxv8i16(
395 <vscale x 8 x float>,
399 define <vscale x 8 x float> @intrinsic_vfwcvt_f.x.v_nxv8f32_nxv8i16(<vscale x 8 x i16> %0, iXLen %1) nounwind {
400 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv8f32_nxv8i16:
401 ; CHECK: # %bb.0: # %entry
402 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
403 ; CHECK-NEXT: vfwcvt.f.x.v v12, v8
404 ; CHECK-NEXT: vmv4r.v v8, v12
407 %a = call <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.nxv8f32.nxv8i16(
408 <vscale x 8 x float> undef,
409 <vscale x 8 x i16> %0,
412 ret <vscale x 8 x float> %a
415 declare <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f32.nxv8i16(
416 <vscale x 8 x float>,
421 define <vscale x 8 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv8f32_nxv8i16(<vscale x 8 x float> %0, <vscale x 8 x i16> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
422 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv8f32_nxv8i16:
423 ; CHECK: # %bb.0: # %entry
424 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu
425 ; CHECK-NEXT: vfwcvt.f.x.v v8, v12, v0.t
428 %a = call <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f32.nxv8i16(
429 <vscale x 8 x float> %0,
430 <vscale x 8 x i16> %1,
431 <vscale x 8 x i1> %2,
434 ret <vscale x 8 x float> %a
437 declare <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.nxv16f32.nxv16i16(
438 <vscale x 16 x float>,
442 define <vscale x 16 x float> @intrinsic_vfwcvt_f.x.v_nxv16f32_nxv16i16(<vscale x 16 x i16> %0, iXLen %1) nounwind {
443 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv16f32_nxv16i16:
444 ; CHECK: # %bb.0: # %entry
445 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
446 ; CHECK-NEXT: vfwcvt.f.x.v v16, v8
447 ; CHECK-NEXT: vmv8r.v v8, v16
450 %a = call <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.nxv16f32.nxv16i16(
451 <vscale x 16 x float> undef,
452 <vscale x 16 x i16> %0,
455 ret <vscale x 16 x float> %a
458 declare <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f32.nxv16i16(
459 <vscale x 16 x float>,
464 define <vscale x 16 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv16f32_nxv16i16(<vscale x 16 x float> %0, <vscale x 16 x i16> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind {
465 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv16f32_nxv16i16:
466 ; CHECK: # %bb.0: # %entry
467 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu
468 ; CHECK-NEXT: vfwcvt.f.x.v v8, v16, v0.t
471 %a = call <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f32.nxv16i16(
472 <vscale x 16 x float> %0,
473 <vscale x 16 x i16> %1,
474 <vscale x 16 x i1> %2,
477 ret <vscale x 16 x float> %a
480 declare <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.nxv1f64.nxv1i32(
481 <vscale x 1 x double>,
485 define <vscale x 1 x double> @intrinsic_vfwcvt_f.x.v_nxv1f64_nxv1i32(<vscale x 1 x i32> %0, iXLen %1) nounwind {
486 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv1f64_nxv1i32:
487 ; CHECK: # %bb.0: # %entry
488 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
489 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8
490 ; CHECK-NEXT: vmv1r.v v8, v9
493 %a = call <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.nxv1f64.nxv1i32(
494 <vscale x 1 x double> undef,
495 <vscale x 1 x i32> %0,
498 ret <vscale x 1 x double> %a
501 declare <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f64.nxv1i32(
502 <vscale x 1 x double>,
507 define <vscale x 1 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv1f64_nxv1i32(<vscale x 1 x double> %0, <vscale x 1 x i32> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
508 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv1f64_nxv1i32:
509 ; CHECK: # %bb.0: # %entry
510 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu
511 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t
514 %a = call <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f64.nxv1i32(
515 <vscale x 1 x double> %0,
516 <vscale x 1 x i32> %1,
517 <vscale x 1 x i1> %2,
520 ret <vscale x 1 x double> %a
523 declare <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.nxv2f64.nxv2i32(
524 <vscale x 2 x double>,
528 define <vscale x 2 x double> @intrinsic_vfwcvt_f.x.v_nxv2f64_nxv2i32(<vscale x 2 x i32> %0, iXLen %1) nounwind {
529 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv2f64_nxv2i32:
530 ; CHECK: # %bb.0: # %entry
531 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
532 ; CHECK-NEXT: vfwcvt.f.x.v v10, v8
533 ; CHECK-NEXT: vmv2r.v v8, v10
536 %a = call <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.nxv2f64.nxv2i32(
537 <vscale x 2 x double> undef,
538 <vscale x 2 x i32> %0,
541 ret <vscale x 2 x double> %a
544 declare <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f64.nxv2i32(
545 <vscale x 2 x double>,
550 define <vscale x 2 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv2f64_nxv2i32(<vscale x 2 x double> %0, <vscale x 2 x i32> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
551 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv2f64_nxv2i32:
552 ; CHECK: # %bb.0: # %entry
553 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu
554 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t
557 %a = call <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f64.nxv2i32(
558 <vscale x 2 x double> %0,
559 <vscale x 2 x i32> %1,
560 <vscale x 2 x i1> %2,
563 ret <vscale x 2 x double> %a
566 declare <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.nxv4f64.nxv4i32(
567 <vscale x 4 x double>,
571 define <vscale x 4 x double> @intrinsic_vfwcvt_f.x.v_nxv4f64_nxv4i32(<vscale x 4 x i32> %0, iXLen %1) nounwind {
572 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv4f64_nxv4i32:
573 ; CHECK: # %bb.0: # %entry
574 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
575 ; CHECK-NEXT: vfwcvt.f.x.v v12, v8
576 ; CHECK-NEXT: vmv4r.v v8, v12
579 %a = call <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.nxv4f64.nxv4i32(
580 <vscale x 4 x double> undef,
581 <vscale x 4 x i32> %0,
584 ret <vscale x 4 x double> %a
587 declare <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f64.nxv4i32(
588 <vscale x 4 x double>,
593 define <vscale x 4 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv4f64_nxv4i32(<vscale x 4 x double> %0, <vscale x 4 x i32> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
594 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv4f64_nxv4i32:
595 ; CHECK: # %bb.0: # %entry
596 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu
597 ; CHECK-NEXT: vfwcvt.f.x.v v8, v12, v0.t
600 %a = call <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f64.nxv4i32(
601 <vscale x 4 x double> %0,
602 <vscale x 4 x i32> %1,
603 <vscale x 4 x i1> %2,
606 ret <vscale x 4 x double> %a
609 declare <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.nxv8f64.nxv8i32(
610 <vscale x 8 x double>,
614 define <vscale x 8 x double> @intrinsic_vfwcvt_f.x.v_nxv8f64_nxv8i32(<vscale x 8 x i32> %0, iXLen %1) nounwind {
615 ; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv8f64_nxv8i32:
616 ; CHECK: # %bb.0: # %entry
617 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
618 ; CHECK-NEXT: vfwcvt.f.x.v v16, v8
619 ; CHECK-NEXT: vmv8r.v v8, v16
622 %a = call <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.nxv8f64.nxv8i32(
623 <vscale x 8 x double> undef,
624 <vscale x 8 x i32> %0,
627 ret <vscale x 8 x double> %a
630 declare <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f64.nxv8i32(
631 <vscale x 8 x double>,
636 define <vscale x 8 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv8f64_nxv8i32(<vscale x 8 x double> %0, <vscale x 8 x i32> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
637 ; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv8f64_nxv8i32:
638 ; CHECK: # %bb.0: # %entry
639 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu
640 ; CHECK-NEXT: vfwcvt.f.x.v v8, v16, v0.t
643 %a = call <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f64.nxv8i32(
644 <vscale x 8 x double> %0,
645 <vscale x 8 x i32> %1,
646 <vscale x 8 x i1> %2,
649 ret <vscale x 8 x double> %a