Revert "[InstCombine] Support gep nuw in icmp folds" (#118698)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfwcvt-f-x.ll
blob3c1e07b4a5ef4808220f87750afd425026f43832
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,+zvfh \
3 ; RUN:   -verify-machineinstrs -target-abi=ilp32d | FileCheck %s
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+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(
8   <vscale x 1 x half>,
9   <vscale x 1 x i8>,
10   iXLen);
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
18 ; CHECK-NEXT:    ret
19 entry:
20   %a = call <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.nxv1f16.nxv1i8(
21     <vscale x 1 x half> undef,
22     <vscale x 1 x i8> %0,
23     iXLen %1)
25   ret <vscale x 1 x half> %a
28 declare <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f16.nxv1i8(
29   <vscale x 1 x half>,
30   <vscale x 1 x i8>,
31   <vscale x 1 x i1>,
32   iXLen, iXLen);
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
39 ; CHECK-NEXT:    ret
40 entry:
41   %a = call <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f16.nxv1i8(
42     <vscale x 1 x half> %0,
43     <vscale x 1 x i8> %1,
44     <vscale x 1 x i1> %2,
45     iXLen %3, iXLen 1)
47   ret <vscale x 1 x half> %a
50 declare <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.nxv2f16.nxv2i8(
51   <vscale x 2 x half>,
52   <vscale x 2 x i8>,
53   iXLen);
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
61 ; CHECK-NEXT:    ret
62 entry:
63   %a = call <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.nxv2f16.nxv2i8(
64     <vscale x 2 x half> undef,
65     <vscale x 2 x i8> %0,
66     iXLen %1)
68   ret <vscale x 2 x half> %a
71 declare <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f16.nxv2i8(
72   <vscale x 2 x half>,
73   <vscale x 2 x i8>,
74   <vscale x 2 x i1>,
75   iXLen, iXLen);
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
82 ; CHECK-NEXT:    ret
83 entry:
84   %a = call <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f16.nxv2i8(
85     <vscale x 2 x half> %0,
86     <vscale x 2 x i8> %1,
87     <vscale x 2 x i1> %2,
88     iXLen %3, iXLen 1)
90   ret <vscale x 2 x half> %a
93 declare <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.nxv4f16.nxv4i8(
94   <vscale x 4 x half>,
95   <vscale x 4 x i8>,
96   iXLen);
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
104 ; CHECK-NEXT:    ret
105 entry:
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,
109     iXLen %1)
111   ret <vscale x 4 x half> %a
114 declare <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f16.nxv4i8(
115   <vscale x 4 x half>,
116   <vscale x 4 x i8>,
117   <vscale x 4 x i1>,
118   iXLen, iXLen);
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
125 ; CHECK-NEXT:    ret
126 entry:
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,
131     iXLen %3, iXLen 1)
133   ret <vscale x 4 x half> %a
136 declare <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.nxv8f16.nxv8i8(
137   <vscale x 8 x half>,
138   <vscale x 8 x i8>,
139   iXLen);
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
147 ; CHECK-NEXT:    ret
148 entry:
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,
152     iXLen %1)
154   ret <vscale x 8 x half> %a
157 declare <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f16.nxv8i8(
158   <vscale x 8 x half>,
159   <vscale x 8 x i8>,
160   <vscale x 8 x i1>,
161   iXLen, iXLen);
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
168 ; CHECK-NEXT:    ret
169 entry:
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,
174     iXLen %3, iXLen 1)
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>,
181   <vscale x 16 x i8>,
182   iXLen);
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
190 ; CHECK-NEXT:    ret
191 entry:
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,
195     iXLen %1)
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>,
202   <vscale x 16 x i8>,
203   <vscale x 16 x i1>,
204   iXLen, iXLen);
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
211 ; CHECK-NEXT:    ret
212 entry:
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,
217     iXLen %3, iXLen 1)
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>,
224   <vscale x 32 x i8>,
225   iXLen);
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
233 ; CHECK-NEXT:    ret
234 entry:
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,
238     iXLen %1)
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>,
245   <vscale x 32 x i8>,
246   <vscale x 32 x i1>,
247   iXLen, iXLen);
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
254 ; CHECK-NEXT:    ret
255 entry:
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,
260     iXLen %3, iXLen 1)
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>,
267   <vscale x 1 x i16>,
268   iXLen);
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
276 ; CHECK-NEXT:    ret
277 entry:
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,
281     iXLen %1)
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>,
288   <vscale x 1 x i16>,
289   <vscale x 1 x i1>,
290   iXLen, iXLen);
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
297 ; CHECK-NEXT:    ret
298 entry:
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,
303     iXLen %3, iXLen 1)
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>,
310   <vscale x 2 x i16>,
311   iXLen);
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
319 ; CHECK-NEXT:    ret
320 entry:
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,
324     iXLen %1)
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>,
331   <vscale x 2 x i16>,
332   <vscale x 2 x i1>,
333   iXLen, iXLen);
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
340 ; CHECK-NEXT:    ret
341 entry:
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,
346     iXLen %3, iXLen 1)
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>,
353   <vscale x 4 x i16>,
354   iXLen);
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
362 ; CHECK-NEXT:    ret
363 entry:
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,
367     iXLen %1)
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>,
374   <vscale x 4 x i16>,
375   <vscale x 4 x i1>,
376   iXLen, iXLen);
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
383 ; CHECK-NEXT:    ret
384 entry:
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,
389     iXLen %3, iXLen 1)
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>,
396   <vscale x 8 x i16>,
397   iXLen);
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
405 ; CHECK-NEXT:    ret
406 entry:
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,
410     iXLen %1)
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>,
417   <vscale x 8 x i16>,
418   <vscale x 8 x i1>,
419   iXLen, iXLen);
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
426 ; CHECK-NEXT:    ret
427 entry:
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,
432     iXLen %3, iXLen 1)
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>,
439   <vscale x 16 x i16>,
440   iXLen);
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
448 ; CHECK-NEXT:    ret
449 entry:
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,
453     iXLen %1)
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>,
460   <vscale x 16 x i16>,
461   <vscale x 16 x i1>,
462   iXLen, iXLen);
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
469 ; CHECK-NEXT:    ret
470 entry:
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,
475     iXLen %3, iXLen 1)
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>,
482   <vscale x 1 x i32>,
483   iXLen);
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
491 ; CHECK-NEXT:    ret
492 entry:
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,
496     iXLen %1)
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>,
503   <vscale x 1 x i32>,
504   <vscale x 1 x i1>,
505   iXLen, iXLen);
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
512 ; CHECK-NEXT:    ret
513 entry:
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,
518     iXLen %3, iXLen 1)
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>,
525   <vscale x 2 x i32>,
526   iXLen);
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
534 ; CHECK-NEXT:    ret
535 entry:
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,
539     iXLen %1)
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>,
546   <vscale x 2 x i32>,
547   <vscale x 2 x i1>,
548   iXLen, iXLen);
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
555 ; CHECK-NEXT:    ret
556 entry:
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,
561     iXLen %3, iXLen 1)
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>,
568   <vscale x 4 x i32>,
569   iXLen);
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
577 ; CHECK-NEXT:    ret
578 entry:
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,
582     iXLen %1)
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>,
589   <vscale x 4 x i32>,
590   <vscale x 4 x i1>,
591   iXLen, iXLen);
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
598 ; CHECK-NEXT:    ret
599 entry:
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,
604     iXLen %3, iXLen 1)
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>,
611   <vscale x 8 x i32>,
612   iXLen);
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
620 ; CHECK-NEXT:    ret
621 entry:
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,
625     iXLen %1)
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>,
632   <vscale x 8 x i32>,
633   <vscale x 8 x i1>,
634   iXLen, iXLen);
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
641 ; CHECK-NEXT:    ret
642 entry:
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,
647     iXLen %3, iXLen 1)
649   ret <vscale x 8 x double> %a