Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-sitofp-vp.ll
blobbf0eab77d0ac833b726f4910fc136edde649645f
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 \
3 ; RUN:     --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zfh,+zvfh < %s | FileCheck %s \
5 ; RUN:     --check-prefixes=CHECK,ZVFH
6 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+zfh,+zvfhmin < %s | FileCheck %s \
7 ; RUN:     --check-prefixes=CHECK,ZVFHMIN
8 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zfh,+zvfhmin < %s | FileCheck %s \
9 ; RUN:     --check-prefixes=CHECK,ZVFHMIN
11 declare <4 x half> @llvm.vp.sitofp.v4f16.v4i7(<4 x i7>, <4 x i1>, i32)
13 define <4 x half> @vsitofp_v4f16_v4i7(<4 x i7> %va, <4 x i1> %m, i32 zeroext %evl) {
14 ; ZVFH-LABEL: vsitofp_v4f16_v4i7:
15 ; ZVFH:       # %bb.0:
16 ; ZVFH-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
17 ; ZVFH-NEXT:    vadd.vv v8, v8, v8
18 ; ZVFH-NEXT:    vsra.vi v9, v8, 1
19 ; ZVFH-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
20 ; ZVFH-NEXT:    vfwcvt.f.x.v v8, v9, v0.t
21 ; ZVFH-NEXT:    ret
23 ; ZVFHMIN-LABEL: vsitofp_v4f16_v4i7:
24 ; ZVFHMIN:       # %bb.0:
25 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
26 ; ZVFHMIN-NEXT:    vadd.vv v8, v8, v8
27 ; ZVFHMIN-NEXT:    vsra.vi v8, v8, 1
28 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
29 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8, v0.t
30 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9, v0.t
31 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
32 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
33 ; ZVFHMIN-NEXT:    ret
34   %v = call <4 x half> @llvm.vp.sitofp.v4f16.v4i7(<4 x i7> %va, <4 x i1> %m, i32 %evl)
35   ret <4 x half> %v
38 declare <4 x half> @llvm.vp.sitofp.v4f16.v4i8(<4 x i8>, <4 x i1>, i32)
40 define <4 x half> @vsitofp_v4f16_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
41 ; ZVFH-LABEL: vsitofp_v4f16_v4i8:
42 ; ZVFH:       # %bb.0:
43 ; ZVFH-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
44 ; ZVFH-NEXT:    vfwcvt.f.x.v v9, v8, v0.t
45 ; ZVFH-NEXT:    vmv1r.v v8, v9
46 ; ZVFH-NEXT:    ret
48 ; ZVFHMIN-LABEL: vsitofp_v4f16_v4i8:
49 ; ZVFHMIN:       # %bb.0:
50 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
51 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8, v0.t
52 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9, v0.t
53 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
54 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
55 ; ZVFHMIN-NEXT:    ret
56   %v = call <4 x half> @llvm.vp.sitofp.v4f16.v4i8(<4 x i8> %va, <4 x i1> %m, i32 %evl)
57   ret <4 x half> %v
60 define <4 x half> @vsitofp_v4f16_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
61 ; ZVFH-LABEL: vsitofp_v4f16_v4i8_unmasked:
62 ; ZVFH:       # %bb.0:
63 ; ZVFH-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
64 ; ZVFH-NEXT:    vfwcvt.f.x.v v9, v8
65 ; ZVFH-NEXT:    vmv1r.v v8, v9
66 ; ZVFH-NEXT:    ret
68 ; ZVFHMIN-LABEL: vsitofp_v4f16_v4i8_unmasked:
69 ; ZVFHMIN:       # %bb.0:
70 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
71 ; ZVFHMIN-NEXT:    vsext.vf2 v9, v8
72 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v10, v9
73 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
74 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
75 ; ZVFHMIN-NEXT:    ret
76   %v = call <4 x half> @llvm.vp.sitofp.v4f16.v4i8(<4 x i8> %va, <4 x i1> splat (i1 true), i32 %evl)
77   ret <4 x half> %v
80 declare <4 x half> @llvm.vp.sitofp.v4f16.v4i16(<4 x i16>, <4 x i1>, i32)
82 define <4 x half> @vsitofp_v4f16_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
83 ; ZVFH-LABEL: vsitofp_v4f16_v4i16:
84 ; ZVFH:       # %bb.0:
85 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
86 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8, v0.t
87 ; ZVFH-NEXT:    ret
89 ; ZVFHMIN-LABEL: vsitofp_v4f16_v4i16:
90 ; ZVFHMIN:       # %bb.0:
91 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
92 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8, v0.t
93 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
94 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
95 ; ZVFHMIN-NEXT:    ret
96   %v = call <4 x half> @llvm.vp.sitofp.v4f16.v4i16(<4 x i16> %va, <4 x i1> %m, i32 %evl)
97   ret <4 x half> %v
100 define <4 x half> @vsitofp_v4f16_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
101 ; ZVFH-LABEL: vsitofp_v4f16_v4i16_unmasked:
102 ; ZVFH:       # %bb.0:
103 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
104 ; ZVFH-NEXT:    vfcvt.f.x.v v8, v8
105 ; ZVFH-NEXT:    ret
107 ; ZVFHMIN-LABEL: vsitofp_v4f16_v4i16_unmasked:
108 ; ZVFHMIN:       # %bb.0:
109 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
110 ; ZVFHMIN-NEXT:    vfwcvt.f.x.v v9, v8
111 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
112 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
113 ; ZVFHMIN-NEXT:    ret
114   %v = call <4 x half> @llvm.vp.sitofp.v4f16.v4i16(<4 x i16> %va, <4 x i1> splat (i1 true), i32 %evl)
115   ret <4 x half> %v
118 declare <4 x half> @llvm.vp.sitofp.v4f16.v4i32(<4 x i32>, <4 x i1>, i32)
120 define <4 x half> @vsitofp_v4f16_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
121 ; ZVFH-LABEL: vsitofp_v4f16_v4i32:
122 ; ZVFH:       # %bb.0:
123 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
124 ; ZVFH-NEXT:    vfncvt.f.x.w v9, v8, v0.t
125 ; ZVFH-NEXT:    vmv1r.v v8, v9
126 ; ZVFH-NEXT:    ret
128 ; ZVFHMIN-LABEL: vsitofp_v4f16_v4i32:
129 ; ZVFHMIN:       # %bb.0:
130 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
131 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v9, v8, v0.t
132 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
133 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
134 ; ZVFHMIN-NEXT:    ret
135   %v = call <4 x half> @llvm.vp.sitofp.v4f16.v4i32(<4 x i32> %va, <4 x i1> %m, i32 %evl)
136   ret <4 x half> %v
139 define <4 x half> @vsitofp_v4f16_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
140 ; ZVFH-LABEL: vsitofp_v4f16_v4i32_unmasked:
141 ; ZVFH:       # %bb.0:
142 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
143 ; ZVFH-NEXT:    vfncvt.f.x.w v9, v8
144 ; ZVFH-NEXT:    vmv1r.v v8, v9
145 ; ZVFH-NEXT:    ret
147 ; ZVFHMIN-LABEL: vsitofp_v4f16_v4i32_unmasked:
148 ; ZVFHMIN:       # %bb.0:
149 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
150 ; ZVFHMIN-NEXT:    vfcvt.f.x.v v9, v8
151 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
152 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
153 ; ZVFHMIN-NEXT:    ret
154   %v = call <4 x half> @llvm.vp.sitofp.v4f16.v4i32(<4 x i32> %va, <4 x i1> splat (i1 true), i32 %evl)
155   ret <4 x half> %v
158 declare <4 x half> @llvm.vp.sitofp.v4f16.v4i64(<4 x i64>, <4 x i1>, i32)
160 define <4 x half> @vsitofp_v4f16_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
161 ; ZVFH-LABEL: vsitofp_v4f16_v4i64:
162 ; ZVFH:       # %bb.0:
163 ; ZVFH-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
164 ; ZVFH-NEXT:    vfncvt.f.x.w v10, v8, v0.t
165 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
166 ; ZVFH-NEXT:    vfncvt.f.f.w v8, v10, v0.t
167 ; ZVFH-NEXT:    ret
169 ; ZVFHMIN-LABEL: vsitofp_v4f16_v4i64:
170 ; ZVFHMIN:       # %bb.0:
171 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
172 ; ZVFHMIN-NEXT:    vfncvt.f.x.w v10, v8, v0.t
173 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
174 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
175 ; ZVFHMIN-NEXT:    ret
176   %v = call <4 x half> @llvm.vp.sitofp.v4f16.v4i64(<4 x i64> %va, <4 x i1> %m, i32 %evl)
177   ret <4 x half> %v
180 define <4 x half> @vsitofp_v4f16_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
181 ; ZVFH-LABEL: vsitofp_v4f16_v4i64_unmasked:
182 ; ZVFH:       # %bb.0:
183 ; ZVFH-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
184 ; ZVFH-NEXT:    vfncvt.f.x.w v10, v8
185 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
186 ; ZVFH-NEXT:    vfncvt.f.f.w v8, v10
187 ; ZVFH-NEXT:    ret
189 ; ZVFHMIN-LABEL: vsitofp_v4f16_v4i64_unmasked:
190 ; ZVFHMIN:       # %bb.0:
191 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
192 ; ZVFHMIN-NEXT:    vfncvt.f.x.w v10, v8
193 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
194 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
195 ; ZVFHMIN-NEXT:    ret
196   %v = call <4 x half> @llvm.vp.sitofp.v4f16.v4i64(<4 x i64> %va, <4 x i1> splat (i1 true), i32 %evl)
197   ret <4 x half> %v
200 declare <4 x float> @llvm.vp.sitofp.v4f32.v4i8(<4 x i8>, <4 x i1>, i32)
202 define <4 x float> @vsitofp_v4f32_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
203 ; CHECK-LABEL: vsitofp_v4f32_v4i8:
204 ; CHECK:       # %bb.0:
205 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
206 ; CHECK-NEXT:    vsext.vf2 v9, v8, v0.t
207 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9, v0.t
208 ; CHECK-NEXT:    ret
209   %v = call <4 x float> @llvm.vp.sitofp.v4f32.v4i8(<4 x i8> %va, <4 x i1> %m, i32 %evl)
210   ret <4 x float> %v
213 define <4 x float> @vsitofp_v4f32_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
214 ; CHECK-LABEL: vsitofp_v4f32_v4i8_unmasked:
215 ; CHECK:       # %bb.0:
216 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
217 ; CHECK-NEXT:    vsext.vf2 v9, v8
218 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v9
219 ; CHECK-NEXT:    ret
220   %v = call <4 x float> @llvm.vp.sitofp.v4f32.v4i8(<4 x i8> %va, <4 x i1> splat (i1 true), i32 %evl)
221   ret <4 x float> %v
224 declare <4 x float> @llvm.vp.sitofp.v4f32.v4i16(<4 x i16>, <4 x i1>, i32)
226 define <4 x float> @vsitofp_v4f32_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
227 ; CHECK-LABEL: vsitofp_v4f32_v4i16:
228 ; CHECK:       # %bb.0:
229 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
230 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8, v0.t
231 ; CHECK-NEXT:    vmv1r.v v8, v9
232 ; CHECK-NEXT:    ret
233   %v = call <4 x float> @llvm.vp.sitofp.v4f32.v4i16(<4 x i16> %va, <4 x i1> %m, i32 %evl)
234   ret <4 x float> %v
237 define <4 x float> @vsitofp_v4f32_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
238 ; CHECK-LABEL: vsitofp_v4f32_v4i16_unmasked:
239 ; CHECK:       # %bb.0:
240 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
241 ; CHECK-NEXT:    vfwcvt.f.x.v v9, v8
242 ; CHECK-NEXT:    vmv1r.v v8, v9
243 ; CHECK-NEXT:    ret
244   %v = call <4 x float> @llvm.vp.sitofp.v4f32.v4i16(<4 x i16> %va, <4 x i1> splat (i1 true), i32 %evl)
245   ret <4 x float> %v
248 declare <4 x float> @llvm.vp.sitofp.v4f32.v4i32(<4 x i32>, <4 x i1>, i32)
250 define <4 x float> @vsitofp_v4f32_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
251 ; CHECK-LABEL: vsitofp_v4f32_v4i32:
252 ; CHECK:       # %bb.0:
253 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
254 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8, v0.t
255 ; CHECK-NEXT:    ret
256   %v = call <4 x float> @llvm.vp.sitofp.v4f32.v4i32(<4 x i32> %va, <4 x i1> %m, i32 %evl)
257   ret <4 x float> %v
260 define <4 x float> @vsitofp_v4f32_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
261 ; CHECK-LABEL: vsitofp_v4f32_v4i32_unmasked:
262 ; CHECK:       # %bb.0:
263 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
264 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
265 ; CHECK-NEXT:    ret
266   %v = call <4 x float> @llvm.vp.sitofp.v4f32.v4i32(<4 x i32> %va, <4 x i1> splat (i1 true), i32 %evl)
267   ret <4 x float> %v
270 declare <4 x float> @llvm.vp.sitofp.v4f32.v4i64(<4 x i64>, <4 x i1>, i32)
272 define <4 x float> @vsitofp_v4f32_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
273 ; CHECK-LABEL: vsitofp_v4f32_v4i64:
274 ; CHECK:       # %bb.0:
275 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
276 ; CHECK-NEXT:    vfncvt.f.x.w v10, v8, v0.t
277 ; CHECK-NEXT:    vmv.v.v v8, v10
278 ; CHECK-NEXT:    ret
279   %v = call <4 x float> @llvm.vp.sitofp.v4f32.v4i64(<4 x i64> %va, <4 x i1> %m, i32 %evl)
280   ret <4 x float> %v
283 define <4 x float> @vsitofp_v4f32_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
284 ; CHECK-LABEL: vsitofp_v4f32_v4i64_unmasked:
285 ; CHECK:       # %bb.0:
286 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
287 ; CHECK-NEXT:    vfncvt.f.x.w v10, v8
288 ; CHECK-NEXT:    vmv.v.v v8, v10
289 ; CHECK-NEXT:    ret
290   %v = call <4 x float> @llvm.vp.sitofp.v4f32.v4i64(<4 x i64> %va, <4 x i1> splat (i1 true), i32 %evl)
291   ret <4 x float> %v
294 declare <4 x double> @llvm.vp.sitofp.v4f64.v4i8(<4 x i8>, <4 x i1>, i32)
296 define <4 x double> @vsitofp_v4f64_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
297 ; CHECK-LABEL: vsitofp_v4f64_v4i8:
298 ; CHECK:       # %bb.0:
299 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
300 ; CHECK-NEXT:    vsext.vf4 v10, v8, v0.t
301 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10, v0.t
302 ; CHECK-NEXT:    ret
303   %v = call <4 x double> @llvm.vp.sitofp.v4f64.v4i8(<4 x i8> %va, <4 x i1> %m, i32 %evl)
304   ret <4 x double> %v
307 define <4 x double> @vsitofp_v4f64_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
308 ; CHECK-LABEL: vsitofp_v4f64_v4i8_unmasked:
309 ; CHECK:       # %bb.0:
310 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
311 ; CHECK-NEXT:    vsext.vf4 v10, v8
312 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
313 ; CHECK-NEXT:    ret
314   %v = call <4 x double> @llvm.vp.sitofp.v4f64.v4i8(<4 x i8> %va, <4 x i1> splat (i1 true), i32 %evl)
315   ret <4 x double> %v
318 declare <4 x double> @llvm.vp.sitofp.v4f64.v4i16(<4 x i16>, <4 x i1>, i32)
320 define <4 x double> @vsitofp_v4f64_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
321 ; CHECK-LABEL: vsitofp_v4f64_v4i16:
322 ; CHECK:       # %bb.0:
323 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
324 ; CHECK-NEXT:    vsext.vf2 v10, v8, v0.t
325 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10, v0.t
326 ; CHECK-NEXT:    ret
327   %v = call <4 x double> @llvm.vp.sitofp.v4f64.v4i16(<4 x i16> %va, <4 x i1> %m, i32 %evl)
328   ret <4 x double> %v
331 define <4 x double> @vsitofp_v4f64_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
332 ; CHECK-LABEL: vsitofp_v4f64_v4i16_unmasked:
333 ; CHECK:       # %bb.0:
334 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
335 ; CHECK-NEXT:    vsext.vf2 v10, v8
336 ; CHECK-NEXT:    vfwcvt.f.x.v v8, v10
337 ; CHECK-NEXT:    ret
338   %v = call <4 x double> @llvm.vp.sitofp.v4f64.v4i16(<4 x i16> %va, <4 x i1> splat (i1 true), i32 %evl)
339   ret <4 x double> %v
342 declare <4 x double> @llvm.vp.sitofp.v4f64.v4i32(<4 x i32>, <4 x i1>, i32)
344 define <4 x double> @vsitofp_v4f64_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
345 ; CHECK-LABEL: vsitofp_v4f64_v4i32:
346 ; CHECK:       # %bb.0:
347 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
348 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v8, v0.t
349 ; CHECK-NEXT:    vmv2r.v v8, v10
350 ; CHECK-NEXT:    ret
351   %v = call <4 x double> @llvm.vp.sitofp.v4f64.v4i32(<4 x i32> %va, <4 x i1> %m, i32 %evl)
352   ret <4 x double> %v
355 define <4 x double> @vsitofp_v4f64_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
356 ; CHECK-LABEL: vsitofp_v4f64_v4i32_unmasked:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
359 ; CHECK-NEXT:    vfwcvt.f.x.v v10, v8
360 ; CHECK-NEXT:    vmv2r.v v8, v10
361 ; CHECK-NEXT:    ret
362   %v = call <4 x double> @llvm.vp.sitofp.v4f64.v4i32(<4 x i32> %va, <4 x i1> splat (i1 true), i32 %evl)
363   ret <4 x double> %v
366 declare <4 x double> @llvm.vp.sitofp.v4f64.v4i64(<4 x i64>, <4 x i1>, i32)
368 define <4 x double> @vsitofp_v4f64_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
369 ; CHECK-LABEL: vsitofp_v4f64_v4i64:
370 ; CHECK:       # %bb.0:
371 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
372 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8, v0.t
373 ; CHECK-NEXT:    ret
374   %v = call <4 x double> @llvm.vp.sitofp.v4f64.v4i64(<4 x i64> %va, <4 x i1> %m, i32 %evl)
375   ret <4 x double> %v
378 define <4 x double> @vsitofp_v4f64_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
379 ; CHECK-LABEL: vsitofp_v4f64_v4i64_unmasked:
380 ; CHECK:       # %bb.0:
381 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
382 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
383 ; CHECK-NEXT:    ret
384   %v = call <4 x double> @llvm.vp.sitofp.v4f64.v4i64(<4 x i64> %va, <4 x i1> splat (i1 true), i32 %evl)
385   ret <4 x double> %v
388 declare <32 x double> @llvm.vp.sitofp.v32f64.v32i64(<32 x i64>, <32 x i1>, i32)
390 define <32 x double> @vsitofp_v32f64_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) {
391 ; CHECK-LABEL: vsitofp_v32f64_v32i64:
392 ; CHECK:       # %bb.0:
393 ; CHECK-NEXT:    li a2, 16
394 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
395 ; CHECK-NEXT:    vslidedown.vi v24, v0, 2
396 ; CHECK-NEXT:    mv a1, a0
397 ; CHECK-NEXT:    bltu a0, a2, .LBB25_2
398 ; CHECK-NEXT:  # %bb.1:
399 ; CHECK-NEXT:    li a1, 16
400 ; CHECK-NEXT:  .LBB25_2:
401 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
402 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8, v0.t
403 ; CHECK-NEXT:    addi a1, a0, -16
404 ; CHECK-NEXT:    sltu a0, a0, a1
405 ; CHECK-NEXT:    addi a0, a0, -1
406 ; CHECK-NEXT:    and a0, a0, a1
407 ; CHECK-NEXT:    vmv1r.v v0, v24
408 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
409 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t
410 ; CHECK-NEXT:    ret
411   %v = call <32 x double> @llvm.vp.sitofp.v32f64.v32i64(<32 x i64> %va, <32 x i1> %m, i32 %evl)
412   ret <32 x double> %v
415 define <32 x double> @vsitofp_v32f64_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
416 ; CHECK-LABEL: vsitofp_v32f64_v32i64_unmasked:
417 ; CHECK:       # %bb.0:
418 ; CHECK-NEXT:    li a2, 16
419 ; CHECK-NEXT:    mv a1, a0
420 ; CHECK-NEXT:    bltu a0, a2, .LBB26_2
421 ; CHECK-NEXT:  # %bb.1:
422 ; CHECK-NEXT:    li a1, 16
423 ; CHECK-NEXT:  .LBB26_2:
424 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
425 ; CHECK-NEXT:    vfcvt.f.x.v v8, v8
426 ; CHECK-NEXT:    addi a1, a0, -16
427 ; CHECK-NEXT:    sltu a0, a0, a1
428 ; CHECK-NEXT:    addi a0, a0, -1
429 ; CHECK-NEXT:    and a0, a0, a1
430 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
431 ; CHECK-NEXT:    vfcvt.f.x.v v16, v16
432 ; CHECK-NEXT:    ret
433   %v = call <32 x double> @llvm.vp.sitofp.v32f64.v32i64(<32 x i64> %va, <32 x i1> splat (i1 true), i32 %evl)
434   ret <32 x double> %v