Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfwcvt-rtz-x-f.ll
blobf3a73e4fa3639bb39731159b62338ebcf3650128
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 i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv1i32.nxv1f16(
8   <vscale x 1 x i32>,
9   <vscale x 1 x half>,
10   iXLen);
12 define <vscale x 1 x i32> @intrinsic_vfwcvt_rtz.x.f.v_nxv1i32_nxv1f16(<vscale x 1 x half> %0, iXLen %1) nounwind {
13 ; CHECK-LABEL: intrinsic_vfwcvt_rtz.x.f.v_nxv1i32_nxv1f16:
14 ; CHECK:       # %bb.0: # %entry
15 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
16 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v9, v8
17 ; CHECK-NEXT:    vmv1r.v v8, v9
18 ; CHECK-NEXT:    ret
19 entry:
20   %a = call <vscale x 1 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv1i32.nxv1f16(
21     <vscale x 1 x i32> undef,
22     <vscale x 1 x half> %0,
23     iXLen %1)
25   ret <vscale x 1 x i32> %a
28 declare <vscale x 1 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv1i32.nxv1f16(
29   <vscale x 1 x i32>,
30   <vscale x 1 x half>,
31   <vscale x 1 x i1>,
32   iXLen,
33   iXLen);
35 define <vscale x 1 x i32> @intrinsic_vfwcvt_mask_rtz.x.f.v_nxv1i32_nxv1f16(<vscale x 1 x i32> %0, <vscale x 1 x half> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
36 ; CHECK-LABEL: intrinsic_vfwcvt_mask_rtz.x.f.v_nxv1i32_nxv1f16:
37 ; CHECK:       # %bb.0: # %entry
38 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
39 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v9, v0.t
40 ; CHECK-NEXT:    ret
41 entry:
42   %a = call <vscale x 1 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv1i32.nxv1f16(
43     <vscale x 1 x i32> %0,
44     <vscale x 1 x half> %1,
45     <vscale x 1 x i1> %2,
46     iXLen %3, iXLen 1)
48   ret <vscale x 1 x i32> %a
51 declare <vscale x 2 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv2i32.nxv2f16(
52   <vscale x 2 x i32>,
53   <vscale x 2 x half>,
54   iXLen);
56 define <vscale x 2 x i32> @intrinsic_vfwcvt_rtz.x.f.v_nxv2i32_nxv2f16(<vscale x 2 x half> %0, iXLen %1) nounwind {
57 ; CHECK-LABEL: intrinsic_vfwcvt_rtz.x.f.v_nxv2i32_nxv2f16:
58 ; CHECK:       # %bb.0: # %entry
59 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
60 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v9, v8
61 ; CHECK-NEXT:    vmv1r.v v8, v9
62 ; CHECK-NEXT:    ret
63 entry:
64   %a = call <vscale x 2 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv2i32.nxv2f16(
65     <vscale x 2 x i32> undef,
66     <vscale x 2 x half> %0,
67     iXLen %1)
69   ret <vscale x 2 x i32> %a
72 declare <vscale x 2 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv2i32.nxv2f16(
73   <vscale x 2 x i32>,
74   <vscale x 2 x half>,
75   <vscale x 2 x i1>,
76   iXLen,
77   iXLen);
79 define <vscale x 2 x i32> @intrinsic_vfwcvt_mask_rtz.x.f.v_nxv2i32_nxv2f16(<vscale x 2 x i32> %0, <vscale x 2 x half> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
80 ; CHECK-LABEL: intrinsic_vfwcvt_mask_rtz.x.f.v_nxv2i32_nxv2f16:
81 ; CHECK:       # %bb.0: # %entry
82 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
83 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v9, v0.t
84 ; CHECK-NEXT:    ret
85 entry:
86   %a = call <vscale x 2 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv2i32.nxv2f16(
87     <vscale x 2 x i32> %0,
88     <vscale x 2 x half> %1,
89     <vscale x 2 x i1> %2,
90     iXLen %3, iXLen 1)
92   ret <vscale x 2 x i32> %a
95 declare <vscale x 4 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv4i32.nxv4f16(
96   <vscale x 4 x i32>,
97   <vscale x 4 x half>,
98   iXLen);
100 define <vscale x 4 x i32> @intrinsic_vfwcvt_rtz.x.f.v_nxv4i32_nxv4f16(<vscale x 4 x half> %0, iXLen %1) nounwind {
101 ; CHECK-LABEL: intrinsic_vfwcvt_rtz.x.f.v_nxv4i32_nxv4f16:
102 ; CHECK:       # %bb.0: # %entry
103 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
104 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v10, v8
105 ; CHECK-NEXT:    vmv2r.v v8, v10
106 ; CHECK-NEXT:    ret
107 entry:
108   %a = call <vscale x 4 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv4i32.nxv4f16(
109     <vscale x 4 x i32> undef,
110     <vscale x 4 x half> %0,
111     iXLen %1)
113   ret <vscale x 4 x i32> %a
116 declare <vscale x 4 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv4i32.nxv4f16(
117   <vscale x 4 x i32>,
118   <vscale x 4 x half>,
119   <vscale x 4 x i1>,
120   iXLen,
121   iXLen);
123 define <vscale x 4 x i32> @intrinsic_vfwcvt_mask_rtz.x.f.v_nxv4i32_nxv4f16(<vscale x 4 x i32> %0, <vscale x 4 x half> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
124 ; CHECK-LABEL: intrinsic_vfwcvt_mask_rtz.x.f.v_nxv4i32_nxv4f16:
125 ; CHECK:       # %bb.0: # %entry
126 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
127 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v10, v0.t
128 ; CHECK-NEXT:    ret
129 entry:
130   %a = call <vscale x 4 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv4i32.nxv4f16(
131     <vscale x 4 x i32> %0,
132     <vscale x 4 x half> %1,
133     <vscale x 4 x i1> %2,
134     iXLen %3, iXLen 1)
136   ret <vscale x 4 x i32> %a
139 declare <vscale x 8 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv8i32.nxv8f16(
140   <vscale x 8 x i32>,
141   <vscale x 8 x half>,
142   iXLen);
144 define <vscale x 8 x i32> @intrinsic_vfwcvt_rtz.x.f.v_nxv8i32_nxv8f16(<vscale x 8 x half> %0, iXLen %1) nounwind {
145 ; CHECK-LABEL: intrinsic_vfwcvt_rtz.x.f.v_nxv8i32_nxv8f16:
146 ; CHECK:       # %bb.0: # %entry
147 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
148 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v12, v8
149 ; CHECK-NEXT:    vmv4r.v v8, v12
150 ; CHECK-NEXT:    ret
151 entry:
152   %a = call <vscale x 8 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv8i32.nxv8f16(
153     <vscale x 8 x i32> undef,
154     <vscale x 8 x half> %0,
155     iXLen %1)
157   ret <vscale x 8 x i32> %a
160 declare <vscale x 8 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv8i32.nxv8f16(
161   <vscale x 8 x i32>,
162   <vscale x 8 x half>,
163   <vscale x 8 x i1>,
164   iXLen,
165   iXLen);
167 define <vscale x 8 x i32> @intrinsic_vfwcvt_mask_rtz.x.f.v_nxv8i32_nxv8f16(<vscale x 8 x i32> %0, <vscale x 8 x half> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
168 ; CHECK-LABEL: intrinsic_vfwcvt_mask_rtz.x.f.v_nxv8i32_nxv8f16:
169 ; CHECK:       # %bb.0: # %entry
170 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
171 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v12, v0.t
172 ; CHECK-NEXT:    ret
173 entry:
174   %a = call <vscale x 8 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv8i32.nxv8f16(
175     <vscale x 8 x i32> %0,
176     <vscale x 8 x half> %1,
177     <vscale x 8 x i1> %2,
178     iXLen %3, iXLen 1)
180   ret <vscale x 8 x i32> %a
183 declare <vscale x 16 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv16i32.nxv16f16(
184   <vscale x 16 x i32>,
185   <vscale x 16 x half>,
186   iXLen);
188 define <vscale x 16 x i32> @intrinsic_vfwcvt_rtz.x.f.v_nxv16i32_nxv16f16(<vscale x 16 x half> %0, iXLen %1) nounwind {
189 ; CHECK-LABEL: intrinsic_vfwcvt_rtz.x.f.v_nxv16i32_nxv16f16:
190 ; CHECK:       # %bb.0: # %entry
191 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
192 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v16, v8
193 ; CHECK-NEXT:    vmv8r.v v8, v16
194 ; CHECK-NEXT:    ret
195 entry:
196   %a = call <vscale x 16 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv16i32.nxv16f16(
197     <vscale x 16 x i32> undef,
198     <vscale x 16 x half> %0,
199     iXLen %1)
201   ret <vscale x 16 x i32> %a
204 declare <vscale x 16 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv16i32.nxv16f16(
205   <vscale x 16 x i32>,
206   <vscale x 16 x half>,
207   <vscale x 16 x i1>,
208   iXLen,
209   iXLen);
211 define <vscale x 16 x i32> @intrinsic_vfwcvt_mask_rtz.x.f.v_nxv16i32_nxv16f16(<vscale x 16 x i32> %0, <vscale x 16 x half> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind {
212 ; CHECK-LABEL: intrinsic_vfwcvt_mask_rtz.x.f.v_nxv16i32_nxv16f16:
213 ; CHECK:       # %bb.0: # %entry
214 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
215 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v16, v0.t
216 ; CHECK-NEXT:    ret
217 entry:
218   %a = call <vscale x 16 x i32> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv16i32.nxv16f16(
219     <vscale x 16 x i32> %0,
220     <vscale x 16 x half> %1,
221     <vscale x 16 x i1> %2,
222     iXLen %3, iXLen 1)
224   ret <vscale x 16 x i32> %a
227 declare <vscale x 1 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv1i64.nxv1f32(
228   <vscale x 1 x i64>,
229   <vscale x 1 x float>,
230   iXLen);
232 define <vscale x 1 x i64> @intrinsic_vfwcvt_rtz.x.f.v_nxv1i64_nxv1f32(<vscale x 1 x float> %0, iXLen %1) nounwind {
233 ; CHECK-LABEL: intrinsic_vfwcvt_rtz.x.f.v_nxv1i64_nxv1f32:
234 ; CHECK:       # %bb.0: # %entry
235 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
236 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v9, v8
237 ; CHECK-NEXT:    vmv1r.v v8, v9
238 ; CHECK-NEXT:    ret
239 entry:
240   %a = call <vscale x 1 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv1i64.nxv1f32(
241     <vscale x 1 x i64> undef,
242     <vscale x 1 x float> %0,
243     iXLen %1)
245   ret <vscale x 1 x i64> %a
248 declare <vscale x 1 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv1i64.nxv1f32(
249   <vscale x 1 x i64>,
250   <vscale x 1 x float>,
251   <vscale x 1 x i1>,
252   iXLen,
253   iXLen);
255 define <vscale x 1 x i64> @intrinsic_vfwcvt_mask_rtz.x.f.v_nxv1i64_nxv1f32(<vscale x 1 x i64> %0, <vscale x 1 x float> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
256 ; CHECK-LABEL: intrinsic_vfwcvt_mask_rtz.x.f.v_nxv1i64_nxv1f32:
257 ; CHECK:       # %bb.0: # %entry
258 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
259 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v9, v0.t
260 ; CHECK-NEXT:    ret
261 entry:
262   %a = call <vscale x 1 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv1i64.nxv1f32(
263     <vscale x 1 x i64> %0,
264     <vscale x 1 x float> %1,
265     <vscale x 1 x i1> %2,
266     iXLen %3, iXLen 1)
268   ret <vscale x 1 x i64> %a
271 declare <vscale x 2 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv2i64.nxv2f32(
272   <vscale x 2 x i64>,
273   <vscale x 2 x float>,
274   iXLen);
276 define <vscale x 2 x i64> @intrinsic_vfwcvt_rtz.x.f.v_nxv2i64_nxv2f32(<vscale x 2 x float> %0, iXLen %1) nounwind {
277 ; CHECK-LABEL: intrinsic_vfwcvt_rtz.x.f.v_nxv2i64_nxv2f32:
278 ; CHECK:       # %bb.0: # %entry
279 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
280 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v10, v8
281 ; CHECK-NEXT:    vmv2r.v v8, v10
282 ; CHECK-NEXT:    ret
283 entry:
284   %a = call <vscale x 2 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv2i64.nxv2f32(
285     <vscale x 2 x i64> undef,
286     <vscale x 2 x float> %0,
287     iXLen %1)
289   ret <vscale x 2 x i64> %a
292 declare <vscale x 2 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv2i64.nxv2f32(
293   <vscale x 2 x i64>,
294   <vscale x 2 x float>,
295   <vscale x 2 x i1>,
296   iXLen,
297   iXLen);
299 define <vscale x 2 x i64> @intrinsic_vfwcvt_mask_rtz.x.f.v_nxv2i64_nxv2f32(<vscale x 2 x i64> %0, <vscale x 2 x float> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
300 ; CHECK-LABEL: intrinsic_vfwcvt_mask_rtz.x.f.v_nxv2i64_nxv2f32:
301 ; CHECK:       # %bb.0: # %entry
302 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
303 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v10, v0.t
304 ; CHECK-NEXT:    ret
305 entry:
306   %a = call <vscale x 2 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv2i64.nxv2f32(
307     <vscale x 2 x i64> %0,
308     <vscale x 2 x float> %1,
309     <vscale x 2 x i1> %2,
310     iXLen %3, iXLen 1)
312   ret <vscale x 2 x i64> %a
315 declare <vscale x 4 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv4i64.nxv4f32(
316   <vscale x 4 x i64>,
317   <vscale x 4 x float>,
318   iXLen);
320 define <vscale x 4 x i64> @intrinsic_vfwcvt_rtz.x.f.v_nxv4i64_nxv4f32(<vscale x 4 x float> %0, iXLen %1) nounwind {
321 ; CHECK-LABEL: intrinsic_vfwcvt_rtz.x.f.v_nxv4i64_nxv4f32:
322 ; CHECK:       # %bb.0: # %entry
323 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
324 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v12, v8
325 ; CHECK-NEXT:    vmv4r.v v8, v12
326 ; CHECK-NEXT:    ret
327 entry:
328   %a = call <vscale x 4 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv4i64.nxv4f32(
329     <vscale x 4 x i64> undef,
330     <vscale x 4 x float> %0,
331     iXLen %1)
333   ret <vscale x 4 x i64> %a
336 declare <vscale x 4 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv4i64.nxv4f32(
337   <vscale x 4 x i64>,
338   <vscale x 4 x float>,
339   <vscale x 4 x i1>,
340   iXLen,
341   iXLen);
343 define <vscale x 4 x i64> @intrinsic_vfwcvt_mask_rtz.x.f.v_nxv4i64_nxv4f32(<vscale x 4 x i64> %0, <vscale x 4 x float> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
344 ; CHECK-LABEL: intrinsic_vfwcvt_mask_rtz.x.f.v_nxv4i64_nxv4f32:
345 ; CHECK:       # %bb.0: # %entry
346 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
347 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v12, v0.t
348 ; CHECK-NEXT:    ret
349 entry:
350   %a = call <vscale x 4 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv4i64.nxv4f32(
351     <vscale x 4 x i64> %0,
352     <vscale x 4 x float> %1,
353     <vscale x 4 x i1> %2,
354     iXLen %3, iXLen 1)
356   ret <vscale x 4 x i64> %a
359 declare <vscale x 8 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv8i64.nxv8f32(
360   <vscale x 8 x i64>,
361   <vscale x 8 x float>,
362   iXLen);
364 define <vscale x 8 x i64> @intrinsic_vfwcvt_rtz.x.f.v_nxv8i64_nxv8f32(<vscale x 8 x float> %0, iXLen %1) nounwind {
365 ; CHECK-LABEL: intrinsic_vfwcvt_rtz.x.f.v_nxv8i64_nxv8f32:
366 ; CHECK:       # %bb.0: # %entry
367 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
368 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v16, v8
369 ; CHECK-NEXT:    vmv8r.v v8, v16
370 ; CHECK-NEXT:    ret
371 entry:
372   %a = call <vscale x 8 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.nxv8i64.nxv8f32(
373     <vscale x 8 x i64> undef,
374     <vscale x 8 x float> %0,
375     iXLen %1)
377   ret <vscale x 8 x i64> %a
380 declare <vscale x 8 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv8i64.nxv8f32(
381   <vscale x 8 x i64>,
382   <vscale x 8 x float>,
383   <vscale x 8 x i1>,
384   iXLen,
385   iXLen);
387 define <vscale x 8 x i64> @intrinsic_vfwcvt_mask_rtz.x.f.v_nxv8i64_nxv8f32(<vscale x 8 x i64> %0, <vscale x 8 x float> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
388 ; CHECK-LABEL: intrinsic_vfwcvt_mask_rtz.x.f.v_nxv8i64_nxv8f32:
389 ; CHECK:       # %bb.0: # %entry
390 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
391 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v16, v0.t
392 ; CHECK-NEXT:    ret
393 entry:
394   %a = call <vscale x 8 x i64> @llvm.riscv.vfwcvt.rtz.x.f.v.mask.nxv8i64.nxv8f32(
395     <vscale x 8 x i64> %0,
396     <vscale x 8 x float> %1,
397     <vscale x 8 x i1> %2,
398     iXLen %3, iXLen 1)
400   ret <vscale x 8 x i64> %a