1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+zvfh,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
3 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zvfh,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+zvfhmin,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
5 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zvfhmin,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
7 define <vscale x 2 x bfloat> @vsitofp_nxv2bf16_nxv2i7(<vscale x 2 x i7> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
8 ; CHECK-LABEL: vsitofp_nxv2bf16_nxv2i7:
10 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
11 ; CHECK-NEXT: vadd.vv v8, v8, v8
12 ; CHECK-NEXT: vsra.vi v8, v8, 1
13 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
14 ; CHECK-NEXT: vsext.vf2 v9, v8, v0.t
15 ; CHECK-NEXT: vfwcvt.f.x.v v10, v9, v0.t
16 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
17 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
19 %v = call <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i7(<vscale x 2 x i7> %va, <vscale x 2 x i1> %m, i32 %evl)
20 ret <vscale x 2 x bfloat> %v
23 declare <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
25 define <vscale x 2 x bfloat> @vsitofp_nxv2bf16_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
26 ; CHECK-LABEL: vsitofp_nxv2bf16_nxv2i8:
28 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
29 ; CHECK-NEXT: vsext.vf2 v9, v8, v0.t
30 ; CHECK-NEXT: vfwcvt.f.x.v v10, v9, v0.t
31 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
32 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
34 %v = call <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
35 ret <vscale x 2 x bfloat> %v
38 define <vscale x 2 x bfloat> @vsitofp_nxv2bf16_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
39 ; CHECK-LABEL: vsitofp_nxv2bf16_nxv2i8_unmasked:
41 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
42 ; CHECK-NEXT: vsext.vf2 v9, v8
43 ; CHECK-NEXT: vfwcvt.f.x.v v10, v9
44 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
45 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
47 %v = call <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
48 ret <vscale x 2 x bfloat> %v
51 declare <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
53 define <vscale x 2 x bfloat> @vsitofp_nxv2bf16_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
54 ; CHECK-LABEL: vsitofp_nxv2bf16_nxv2i16:
56 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
57 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8, v0.t
58 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
59 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
61 %v = call <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
62 ret <vscale x 2 x bfloat> %v
65 define <vscale x 2 x bfloat> @vsitofp_nxv2bf16_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
66 ; CHECK-LABEL: vsitofp_nxv2bf16_nxv2i16_unmasked:
68 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
69 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8
70 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
71 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
73 %v = call <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
74 ret <vscale x 2 x bfloat> %v
77 declare <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
79 define <vscale x 2 x bfloat> @vsitofp_nxv2bf16_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
80 ; CHECK-LABEL: vsitofp_nxv2bf16_nxv2i32:
82 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
83 ; CHECK-NEXT: vfcvt.f.x.v v9, v8, v0.t
84 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
85 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
87 %v = call <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
88 ret <vscale x 2 x bfloat> %v
91 define <vscale x 2 x bfloat> @vsitofp_nxv2bf16_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
92 ; CHECK-LABEL: vsitofp_nxv2bf16_nxv2i32_unmasked:
94 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
95 ; CHECK-NEXT: vfcvt.f.x.v v9, v8
96 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
97 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
99 %v = call <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
100 ret <vscale x 2 x bfloat> %v
103 declare <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
105 define <vscale x 2 x bfloat> @vsitofp_nxv2bf16_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
106 ; CHECK-LABEL: vsitofp_nxv2bf16_nxv2i64:
108 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
109 ; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t
110 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
111 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
113 %v = call <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
114 ret <vscale x 2 x bfloat> %v
117 define <vscale x 2 x bfloat> @vsitofp_nxv2bf16_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
118 ; CHECK-LABEL: vsitofp_nxv2bf16_nxv2i64_unmasked:
120 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
121 ; CHECK-NEXT: vfncvt.f.x.w v10, v8
122 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
123 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
125 %v = call <vscale x 2 x bfloat> @llvm.vp.sitofp.nxv2bf16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
126 ret <vscale x 2 x bfloat> %v
129 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i7(<vscale x 2 x i7>, <vscale x 2 x i1>, i32)
131 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i7(<vscale x 2 x i7> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
132 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i7:
134 ; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
135 ; ZVFH-NEXT: vadd.vv v8, v8, v8
136 ; ZVFH-NEXT: vsra.vi v9, v8, 1
137 ; ZVFH-NEXT: vfwcvt.f.x.v v8, v9, v0.t
140 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i7:
142 ; ZVFHMIN-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
143 ; ZVFHMIN-NEXT: vadd.vv v8, v8, v8
144 ; ZVFHMIN-NEXT: vsra.vi v8, v8, 1
145 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
146 ; ZVFHMIN-NEXT: vsext.vf2 v9, v8, v0.t
147 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v9, v0.t
148 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
149 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
151 %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)
152 ret <vscale x 2 x half> %v
155 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
157 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
158 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i8:
160 ; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
161 ; ZVFH-NEXT: vfwcvt.f.x.v v9, v8, v0.t
162 ; ZVFH-NEXT: vmv1r.v v8, v9
165 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i8:
167 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
168 ; ZVFHMIN-NEXT: vsext.vf2 v9, v8, v0.t
169 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v9, v0.t
170 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
171 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
173 %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)
174 ret <vscale x 2 x half> %v
177 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
178 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i8_unmasked:
180 ; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
181 ; ZVFH-NEXT: vfwcvt.f.x.v v9, v8
182 ; ZVFH-NEXT: vmv1r.v v8, v9
185 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i8_unmasked:
187 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
188 ; ZVFHMIN-NEXT: vsext.vf2 v9, v8
189 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v9
190 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
191 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
193 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
194 ret <vscale x 2 x half> %v
197 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
199 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
200 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i16:
202 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
203 ; ZVFH-NEXT: vfcvt.f.x.v v8, v8, v0.t
206 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i16:
208 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
209 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v9, v8, v0.t
210 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
211 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
213 %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)
214 ret <vscale x 2 x half> %v
217 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
218 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i16_unmasked:
220 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
221 ; ZVFH-NEXT: vfcvt.f.x.v v8, v8
224 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i16_unmasked:
226 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
227 ; ZVFHMIN-NEXT: vfwcvt.f.x.v v9, v8
228 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
229 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
231 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
232 ret <vscale x 2 x half> %v
235 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
237 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
238 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i32:
240 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
241 ; ZVFH-NEXT: vfncvt.f.x.w v9, v8, v0.t
242 ; ZVFH-NEXT: vmv1r.v v8, v9
245 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i32:
247 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
248 ; ZVFHMIN-NEXT: vfcvt.f.x.v v9, v8, v0.t
249 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
250 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
252 %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)
253 ret <vscale x 2 x half> %v
256 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
257 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i32_unmasked:
259 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
260 ; ZVFH-NEXT: vfncvt.f.x.w v9, v8
261 ; ZVFH-NEXT: vmv1r.v v8, v9
264 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i32_unmasked:
266 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
267 ; ZVFHMIN-NEXT: vfcvt.f.x.v v9, v8
268 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
269 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
271 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
272 ret <vscale x 2 x half> %v
275 declare <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
277 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
278 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i64:
280 ; ZVFH-NEXT: vsetvli zero, a0, e32, m1, ta, ma
281 ; ZVFH-NEXT: vfncvt.f.x.w v10, v8, v0.t
282 ; ZVFH-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
283 ; ZVFH-NEXT: vfncvt.f.f.w v8, v10, v0.t
286 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i64:
288 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
289 ; ZVFHMIN-NEXT: vfncvt.f.x.w v10, v8, v0.t
290 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
291 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
293 %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)
294 ret <vscale x 2 x half> %v
297 define <vscale x 2 x half> @vsitofp_nxv2f16_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
298 ; ZVFH-LABEL: vsitofp_nxv2f16_nxv2i64_unmasked:
300 ; ZVFH-NEXT: vsetvli zero, a0, e32, m1, ta, ma
301 ; ZVFH-NEXT: vfncvt.f.x.w v10, v8
302 ; ZVFH-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
303 ; ZVFH-NEXT: vfncvt.f.f.w v8, v10
306 ; ZVFHMIN-LABEL: vsitofp_nxv2f16_nxv2i64_unmasked:
308 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
309 ; ZVFHMIN-NEXT: vfncvt.f.x.w v10, v8
310 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
311 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
313 %v = call <vscale x 2 x half> @llvm.vp.sitofp.nxv2f16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
314 ret <vscale x 2 x half> %v
317 declare <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
319 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
320 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i8:
322 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
323 ; CHECK-NEXT: vsext.vf2 v9, v8, v0.t
324 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t
326 %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)
327 ret <vscale x 2 x float> %v
330 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
331 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i8_unmasked:
333 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
334 ; CHECK-NEXT: vsext.vf2 v9, v8
335 ; CHECK-NEXT: vfwcvt.f.x.v v8, v9
337 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
338 ret <vscale x 2 x float> %v
341 declare <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
343 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
344 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i16:
346 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
347 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8, v0.t
348 ; CHECK-NEXT: vmv1r.v v8, v9
350 %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)
351 ret <vscale x 2 x float> %v
354 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
355 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i16_unmasked:
357 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
358 ; CHECK-NEXT: vfwcvt.f.x.v v9, v8
359 ; CHECK-NEXT: vmv1r.v v8, v9
361 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
362 ret <vscale x 2 x float> %v
365 declare <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
367 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
368 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i32:
370 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
371 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
373 %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)
374 ret <vscale x 2 x float> %v
377 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
378 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i32_unmasked:
380 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
381 ; CHECK-NEXT: vfcvt.f.x.v v8, v8
383 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
384 ret <vscale x 2 x float> %v
387 declare <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
389 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
390 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i64:
392 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
393 ; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t
394 ; CHECK-NEXT: vmv.v.v v8, v10
396 %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)
397 ret <vscale x 2 x float> %v
400 define <vscale x 2 x float> @vsitofp_nxv2f32_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
401 ; CHECK-LABEL: vsitofp_nxv2f32_nxv2i64_unmasked:
403 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
404 ; CHECK-NEXT: vfncvt.f.x.w v10, v8
405 ; CHECK-NEXT: vmv.v.v v8, v10
407 %v = call <vscale x 2 x float> @llvm.vp.sitofp.nxv2f32.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
408 ret <vscale x 2 x float> %v
411 declare <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
413 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
414 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i8:
416 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
417 ; CHECK-NEXT: vsext.vf4 v10, v8, v0.t
418 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t
420 %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)
421 ret <vscale x 2 x double> %v
424 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
425 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i8_unmasked:
427 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
428 ; CHECK-NEXT: vsext.vf4 v10, v8
429 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10
431 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
432 ret <vscale x 2 x double> %v
435 declare <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
437 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
438 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i16:
440 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
441 ; CHECK-NEXT: vsext.vf2 v10, v8, v0.t
442 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t
444 %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)
445 ret <vscale x 2 x double> %v
448 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
449 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i16_unmasked:
451 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
452 ; CHECK-NEXT: vsext.vf2 v10, v8
453 ; CHECK-NEXT: vfwcvt.f.x.v v8, v10
455 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
456 ret <vscale x 2 x double> %v
459 declare <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
461 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
462 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i32:
464 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
465 ; CHECK-NEXT: vfwcvt.f.x.v v10, v8, v0.t
466 ; CHECK-NEXT: vmv2r.v v8, v10
468 %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)
469 ret <vscale x 2 x double> %v
472 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
473 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i32_unmasked:
475 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
476 ; CHECK-NEXT: vfwcvt.f.x.v v10, v8
477 ; CHECK-NEXT: vmv2r.v v8, v10
479 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
480 ret <vscale x 2 x double> %v
483 declare <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
485 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
486 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i64:
488 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
489 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
491 %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)
492 ret <vscale x 2 x double> %v
495 define <vscale x 2 x double> @vsitofp_nxv2f64_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
496 ; CHECK-LABEL: vsitofp_nxv2f64_nxv2i64_unmasked:
498 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
499 ; CHECK-NEXT: vfcvt.f.x.v v8, v8
501 %v = call <vscale x 2 x double> @llvm.vp.sitofp.nxv2f64.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
502 ret <vscale x 2 x double> %v
505 declare <vscale x 32 x half> @llvm.vp.sitofp.nxv32f16.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i1>, i32)
507 define <vscale x 32 x half> @vsitofp_nxv32f16_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
508 ; ZVFH-LABEL: vsitofp_nxv32f16_nxv32i32:
510 ; ZVFH-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
511 ; ZVFH-NEXT: vmv1r.v v24, v0
512 ; ZVFH-NEXT: csrr a1, vlenb
513 ; ZVFH-NEXT: srli a2, a1, 2
514 ; ZVFH-NEXT: slli a1, a1, 1
515 ; ZVFH-NEXT: vslidedown.vx v0, v0, a2
516 ; ZVFH-NEXT: sub a2, a0, a1
517 ; ZVFH-NEXT: sltu a3, a0, a2
518 ; ZVFH-NEXT: addi a3, a3, -1
519 ; ZVFH-NEXT: and a2, a3, a2
520 ; ZVFH-NEXT: vsetvli zero, a2, e16, m4, ta, ma
521 ; ZVFH-NEXT: vfncvt.f.x.w v28, v16, v0.t
522 ; ZVFH-NEXT: bltu a0, a1, .LBB34_2
523 ; ZVFH-NEXT: # %bb.1:
524 ; ZVFH-NEXT: mv a0, a1
525 ; ZVFH-NEXT: .LBB34_2:
526 ; ZVFH-NEXT: vmv1r.v v0, v24
527 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
528 ; ZVFH-NEXT: vfncvt.f.x.w v24, v8, v0.t
529 ; ZVFH-NEXT: vmv8r.v v8, v24
532 ; ZVFHMIN-LABEL: vsitofp_nxv32f16_nxv32i32:
534 ; ZVFHMIN-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
535 ; ZVFHMIN-NEXT: vmv1r.v v7, v0
536 ; ZVFHMIN-NEXT: csrr a1, vlenb
537 ; ZVFHMIN-NEXT: srli a2, a1, 2
538 ; ZVFHMIN-NEXT: slli a1, a1, 1
539 ; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a2
540 ; ZVFHMIN-NEXT: sub a2, a0, a1
541 ; ZVFHMIN-NEXT: sltu a3, a0, a2
542 ; ZVFHMIN-NEXT: addi a3, a3, -1
543 ; ZVFHMIN-NEXT: and a2, a3, a2
544 ; ZVFHMIN-NEXT: vsetvli zero, a2, e32, m8, ta, ma
545 ; ZVFHMIN-NEXT: vfcvt.f.x.v v24, v16, v0.t
546 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
547 ; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v24
548 ; ZVFHMIN-NEXT: bltu a0, a1, .LBB34_2
549 ; ZVFHMIN-NEXT: # %bb.1:
550 ; ZVFHMIN-NEXT: mv a0, a1
551 ; ZVFHMIN-NEXT: .LBB34_2:
552 ; ZVFHMIN-NEXT: vmv1r.v v0, v7
553 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
554 ; ZVFHMIN-NEXT: vfcvt.f.x.v v8, v8, v0.t
555 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
556 ; ZVFHMIN-NEXT: vfncvt.f.f.w v16, v8
557 ; ZVFHMIN-NEXT: vmv8r.v v8, v16
559 %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)
560 ret <vscale x 32 x half> %v
563 declare <vscale x 32 x float> @llvm.vp.sitofp.nxv32f32.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i1>, i32)
565 define <vscale x 32 x float> @vsitofp_nxv32f32_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
566 ; CHECK-LABEL: vsitofp_nxv32f32_nxv32i32:
568 ; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
569 ; CHECK-NEXT: vmv1r.v v24, v0
570 ; CHECK-NEXT: csrr a1, vlenb
571 ; CHECK-NEXT: srli a2, a1, 2
572 ; CHECK-NEXT: slli a1, a1, 1
573 ; CHECK-NEXT: vslidedown.vx v0, v0, a2
574 ; CHECK-NEXT: sub a2, a0, a1
575 ; CHECK-NEXT: sltu a3, a0, a2
576 ; CHECK-NEXT: addi a3, a3, -1
577 ; CHECK-NEXT: and a2, a3, a2
578 ; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma
579 ; CHECK-NEXT: vfcvt.f.x.v v16, v16, v0.t
580 ; CHECK-NEXT: bltu a0, a1, .LBB35_2
581 ; CHECK-NEXT: # %bb.1:
582 ; CHECK-NEXT: mv a0, a1
583 ; CHECK-NEXT: .LBB35_2:
584 ; CHECK-NEXT: vmv1r.v v0, v24
585 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
586 ; CHECK-NEXT: vfcvt.f.x.v v8, v8, v0.t
588 %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)
589 ret <vscale x 32 x float> %v
592 define <vscale x 32 x float> @vsitofp_nxv32f32_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {
593 ; CHECK-LABEL: vsitofp_nxv32f32_nxv32i32_unmasked:
595 ; CHECK-NEXT: csrr a1, vlenb
596 ; CHECK-NEXT: slli a1, a1, 1
597 ; CHECK-NEXT: sub a2, a0, a1
598 ; CHECK-NEXT: sltu a3, a0, a2
599 ; CHECK-NEXT: addi a3, a3, -1
600 ; CHECK-NEXT: and a2, a3, a2
601 ; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma
602 ; CHECK-NEXT: vfcvt.f.x.v v16, v16
603 ; CHECK-NEXT: bltu a0, a1, .LBB36_2
604 ; CHECK-NEXT: # %bb.1:
605 ; CHECK-NEXT: mv a0, a1
606 ; CHECK-NEXT: .LBB36_2:
607 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
608 ; CHECK-NEXT: vfcvt.f.x.v v8, v8
610 %v = call <vscale x 32 x float> @llvm.vp.sitofp.nxv32f32.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
611 ret <vscale x 32 x float> %v