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> @vuitofp_nxv2bf16_nxv2i7(<vscale x 2 x i7> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
8 ; CHECK-LABEL: vuitofp_nxv2bf16_nxv2i7:
10 ; CHECK-NEXT: li a1, 127
11 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
12 ; CHECK-NEXT: vand.vx v8, v8, a1
13 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
14 ; CHECK-NEXT: vzext.vf2 v9, v8, v0.t
15 ; CHECK-NEXT: vfwcvt.f.xu.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.uitofp.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 define <vscale x 2 x bfloat> @vuitofp_nxv2bf16_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
24 ; CHECK-LABEL: vuitofp_nxv2bf16_nxv2i8:
26 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
27 ; CHECK-NEXT: vzext.vf2 v9, v8, v0.t
28 ; CHECK-NEXT: vfwcvt.f.xu.v v10, v9, v0.t
29 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
30 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
32 %v = call <vscale x 2 x bfloat> @llvm.vp.uitofp.nxv2bf16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
33 ret <vscale x 2 x bfloat> %v
36 define <vscale x 2 x bfloat> @vuitofp_nxv2bf16_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
37 ; CHECK-LABEL: vuitofp_nxv2bf16_nxv2i8_unmasked:
39 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
40 ; CHECK-NEXT: vzext.vf2 v9, v8
41 ; CHECK-NEXT: vfwcvt.f.xu.v v10, v9
42 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
43 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
45 %v = call <vscale x 2 x bfloat> @llvm.vp.uitofp.nxv2bf16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
46 ret <vscale x 2 x bfloat> %v
49 define <vscale x 2 x bfloat> @vuitofp_nxv2bf16_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
50 ; CHECK-LABEL: vuitofp_nxv2bf16_nxv2i16:
52 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
53 ; CHECK-NEXT: vfwcvt.f.xu.v v9, v8, v0.t
54 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
55 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
57 %v = call <vscale x 2 x bfloat> @llvm.vp.uitofp.nxv2bf16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
58 ret <vscale x 2 x bfloat> %v
61 define <vscale x 2 x bfloat> @vuitofp_nxv2bf16_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
62 ; CHECK-LABEL: vuitofp_nxv2bf16_nxv2i16_unmasked:
64 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
65 ; CHECK-NEXT: vfwcvt.f.xu.v v9, v8
66 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
67 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
69 %v = call <vscale x 2 x bfloat> @llvm.vp.uitofp.nxv2bf16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
70 ret <vscale x 2 x bfloat> %v
73 define <vscale x 2 x bfloat> @vuitofp_nxv2bf16_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
74 ; CHECK-LABEL: vuitofp_nxv2bf16_nxv2i32:
76 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
77 ; CHECK-NEXT: vfcvt.f.xu.v v9, v8, v0.t
78 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
79 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
81 %v = call <vscale x 2 x bfloat> @llvm.vp.uitofp.nxv2bf16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
82 ret <vscale x 2 x bfloat> %v
85 define <vscale x 2 x bfloat> @vuitofp_nxv2bf16_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
86 ; CHECK-LABEL: vuitofp_nxv2bf16_nxv2i32_unmasked:
88 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
89 ; CHECK-NEXT: vfcvt.f.xu.v v9, v8
90 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
91 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9
93 %v = call <vscale x 2 x bfloat> @llvm.vp.uitofp.nxv2bf16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
94 ret <vscale x 2 x bfloat> %v
97 define <vscale x 2 x bfloat> @vuitofp_nxv2bf16_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
98 ; CHECK-LABEL: vuitofp_nxv2bf16_nxv2i64:
100 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
101 ; CHECK-NEXT: vfncvt.f.xu.w v10, v8, v0.t
102 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
103 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
105 %v = call <vscale x 2 x bfloat> @llvm.vp.uitofp.nxv2bf16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
106 ret <vscale x 2 x bfloat> %v
109 define <vscale x 2 x bfloat> @vuitofp_nxv2bf16_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
110 ; CHECK-LABEL: vuitofp_nxv2bf16_nxv2i64_unmasked:
112 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
113 ; CHECK-NEXT: vfncvt.f.xu.w v10, v8
114 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
115 ; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10
117 %v = call <vscale x 2 x bfloat> @llvm.vp.uitofp.nxv2bf16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
118 ret <vscale x 2 x bfloat> %v
121 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i7(<vscale x 2 x i7>, <vscale x 2 x i1>, i32)
123 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i7(<vscale x 2 x i7> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
124 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i7:
126 ; ZVFH-NEXT: li a1, 127
127 ; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
128 ; ZVFH-NEXT: vand.vx v9, v8, a1
129 ; ZVFH-NEXT: vfwcvt.f.xu.v v8, v9, v0.t
132 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i7:
134 ; ZVFHMIN-NEXT: li a1, 127
135 ; ZVFHMIN-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
136 ; ZVFHMIN-NEXT: vand.vx v8, v8, a1
137 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
138 ; ZVFHMIN-NEXT: vzext.vf2 v9, v8, v0.t
139 ; ZVFHMIN-NEXT: vfwcvt.f.xu.v v10, v9, v0.t
140 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
141 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
143 %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i7(<vscale x 2 x i7> %va, <vscale x 2 x i1> %m, i32 %evl)
144 ret <vscale x 2 x half> %v
147 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
149 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
150 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i8:
152 ; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
153 ; ZVFH-NEXT: vfwcvt.f.xu.v v9, v8, v0.t
154 ; ZVFH-NEXT: vmv1r.v v8, v9
157 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i8:
159 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
160 ; ZVFHMIN-NEXT: vzext.vf2 v9, v8, v0.t
161 ; ZVFHMIN-NEXT: vfwcvt.f.xu.v v10, v9, v0.t
162 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
163 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
165 %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
166 ret <vscale x 2 x half> %v
169 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
170 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i8_unmasked:
172 ; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
173 ; ZVFH-NEXT: vfwcvt.f.xu.v v9, v8
174 ; ZVFH-NEXT: vmv1r.v v8, v9
177 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i8_unmasked:
179 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
180 ; ZVFHMIN-NEXT: vzext.vf2 v9, v8
181 ; ZVFHMIN-NEXT: vfwcvt.f.xu.v v10, v9
182 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
183 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
185 %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
186 ret <vscale x 2 x half> %v
189 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
191 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
192 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i16:
194 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
195 ; ZVFH-NEXT: vfcvt.f.xu.v v8, v8, v0.t
198 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i16:
200 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
201 ; ZVFHMIN-NEXT: vfwcvt.f.xu.v v9, v8, v0.t
202 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
203 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
205 %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
206 ret <vscale x 2 x half> %v
209 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
210 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i16_unmasked:
212 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
213 ; ZVFH-NEXT: vfcvt.f.xu.v v8, v8
216 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i16_unmasked:
218 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
219 ; ZVFHMIN-NEXT: vfwcvt.f.xu.v v9, v8
220 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
221 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
223 %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
224 ret <vscale x 2 x half> %v
227 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
229 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
230 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i32:
232 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
233 ; ZVFH-NEXT: vfncvt.f.xu.w v9, v8, v0.t
234 ; ZVFH-NEXT: vmv1r.v v8, v9
237 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i32:
239 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
240 ; ZVFHMIN-NEXT: vfcvt.f.xu.v v9, v8, v0.t
241 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
242 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
244 %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
245 ret <vscale x 2 x half> %v
248 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
249 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i32_unmasked:
251 ; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
252 ; ZVFH-NEXT: vfncvt.f.xu.w v9, v8
253 ; ZVFH-NEXT: vmv1r.v v8, v9
256 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i32_unmasked:
258 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
259 ; ZVFHMIN-NEXT: vfcvt.f.xu.v v9, v8
260 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
261 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
263 %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
264 ret <vscale x 2 x half> %v
267 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
269 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
270 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i64:
272 ; ZVFH-NEXT: vsetvli zero, a0, e32, m1, ta, ma
273 ; ZVFH-NEXT: vfncvt.f.xu.w v10, v8, v0.t
274 ; ZVFH-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
275 ; ZVFH-NEXT: vfncvt.f.f.w v8, v10, v0.t
278 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i64:
280 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
281 ; ZVFHMIN-NEXT: vfncvt.f.xu.w v10, v8, v0.t
282 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
283 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
285 %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
286 ret <vscale x 2 x half> %v
289 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
290 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i64_unmasked:
292 ; ZVFH-NEXT: vsetvli zero, a0, e32, m1, ta, ma
293 ; ZVFH-NEXT: vfncvt.f.xu.w v10, v8
294 ; ZVFH-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
295 ; ZVFH-NEXT: vfncvt.f.f.w v8, v10
298 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i64_unmasked:
300 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m1, ta, ma
301 ; ZVFHMIN-NEXT: vfncvt.f.xu.w v10, v8
302 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
303 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
305 %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
306 ret <vscale x 2 x half> %v
309 declare <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
311 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
312 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i8:
314 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
315 ; CHECK-NEXT: vzext.vf2 v9, v8, v0.t
316 ; CHECK-NEXT: vfwcvt.f.xu.v v8, v9, v0.t
318 %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
319 ret <vscale x 2 x float> %v
322 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
323 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i8_unmasked:
325 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
326 ; CHECK-NEXT: vzext.vf2 v9, v8
327 ; CHECK-NEXT: vfwcvt.f.xu.v v8, v9
329 %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
330 ret <vscale x 2 x float> %v
333 declare <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
335 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
336 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i16:
338 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
339 ; CHECK-NEXT: vfwcvt.f.xu.v v9, v8, v0.t
340 ; CHECK-NEXT: vmv1r.v v8, v9
342 %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
343 ret <vscale x 2 x float> %v
346 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
347 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i16_unmasked:
349 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
350 ; CHECK-NEXT: vfwcvt.f.xu.v v9, v8
351 ; CHECK-NEXT: vmv1r.v v8, v9
353 %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
354 ret <vscale x 2 x float> %v
357 declare <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
359 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
360 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i32:
362 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
363 ; CHECK-NEXT: vfcvt.f.xu.v v8, v8, v0.t
365 %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
366 ret <vscale x 2 x float> %v
369 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
370 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i32_unmasked:
372 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
373 ; CHECK-NEXT: vfcvt.f.xu.v v8, v8
375 %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
376 ret <vscale x 2 x float> %v
379 declare <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
381 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
382 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i64:
384 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
385 ; CHECK-NEXT: vfncvt.f.xu.w v10, v8, v0.t
386 ; CHECK-NEXT: vmv.v.v v8, v10
388 %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
389 ret <vscale x 2 x float> %v
392 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
393 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i64_unmasked:
395 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
396 ; CHECK-NEXT: vfncvt.f.xu.w v10, v8
397 ; CHECK-NEXT: vmv.v.v v8, v10
399 %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
400 ret <vscale x 2 x float> %v
403 declare <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
405 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
406 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i8:
408 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
409 ; CHECK-NEXT: vzext.vf4 v10, v8, v0.t
410 ; CHECK-NEXT: vfwcvt.f.xu.v v8, v10, v0.t
412 %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
413 ret <vscale x 2 x double> %v
416 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
417 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i8_unmasked:
419 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
420 ; CHECK-NEXT: vzext.vf4 v10, v8
421 ; CHECK-NEXT: vfwcvt.f.xu.v v8, v10
423 %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
424 ret <vscale x 2 x double> %v
427 declare <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
429 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
430 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i16:
432 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
433 ; CHECK-NEXT: vzext.vf2 v10, v8, v0.t
434 ; CHECK-NEXT: vfwcvt.f.xu.v v8, v10, v0.t
436 %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
437 ret <vscale x 2 x double> %v
440 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
441 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i16_unmasked:
443 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
444 ; CHECK-NEXT: vzext.vf2 v10, v8
445 ; CHECK-NEXT: vfwcvt.f.xu.v v8, v10
447 %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
448 ret <vscale x 2 x double> %v
451 declare <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
453 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
454 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i32:
456 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
457 ; CHECK-NEXT: vfwcvt.f.xu.v v10, v8, v0.t
458 ; CHECK-NEXT: vmv2r.v v8, v10
460 %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
461 ret <vscale x 2 x double> %v
464 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
465 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i32_unmasked:
467 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
468 ; CHECK-NEXT: vfwcvt.f.xu.v v10, v8
469 ; CHECK-NEXT: vmv2r.v v8, v10
471 %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
472 ret <vscale x 2 x double> %v
475 declare <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
477 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
478 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i64:
480 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
481 ; CHECK-NEXT: vfcvt.f.xu.v v8, v8, v0.t
483 %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
484 ret <vscale x 2 x double> %v
487 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
488 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i64_unmasked:
490 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
491 ; CHECK-NEXT: vfcvt.f.xu.v v8, v8
493 %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
494 ret <vscale x 2 x double> %v
497 declare <vscale x 32 x half> @llvm.vp.uitofp.nxv32f16.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i1>, i32)
499 define <vscale x 32 x half> @vuitofp_nxv32f16_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
500 ; ZVFH-LABEL: vuitofp_nxv32f16_nxv32i32:
502 ; ZVFH-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
503 ; ZVFH-NEXT: vmv1r.v v24, v0
504 ; ZVFH-NEXT: csrr a1, vlenb
505 ; ZVFH-NEXT: srli a2, a1, 2
506 ; ZVFH-NEXT: slli a1, a1, 1
507 ; ZVFH-NEXT: vslidedown.vx v0, v0, a2
508 ; ZVFH-NEXT: sub a2, a0, a1
509 ; ZVFH-NEXT: sltu a3, a0, a2
510 ; ZVFH-NEXT: addi a3, a3, -1
511 ; ZVFH-NEXT: and a2, a3, a2
512 ; ZVFH-NEXT: vsetvli zero, a2, e16, m4, ta, ma
513 ; ZVFH-NEXT: vfncvt.f.xu.w v28, v16, v0.t
514 ; ZVFH-NEXT: bltu a0, a1, .LBB34_2
515 ; ZVFH-NEXT: # %bb.1:
516 ; ZVFH-NEXT: mv a0, a1
517 ; ZVFH-NEXT: .LBB34_2:
518 ; ZVFH-NEXT: vmv1r.v v0, v24
519 ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma
520 ; ZVFH-NEXT: vfncvt.f.xu.w v24, v8, v0.t
521 ; ZVFH-NEXT: vmv8r.v v8, v24
524 ; ZVFHMIN-LABEL: vuitofp_nxv32f16_nxv32i32:
526 ; ZVFHMIN-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
527 ; ZVFHMIN-NEXT: vmv1r.v v7, v0
528 ; ZVFHMIN-NEXT: csrr a1, vlenb
529 ; ZVFHMIN-NEXT: srli a2, a1, 2
530 ; ZVFHMIN-NEXT: slli a1, a1, 1
531 ; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a2
532 ; ZVFHMIN-NEXT: sub a2, a0, a1
533 ; ZVFHMIN-NEXT: sltu a3, a0, a2
534 ; ZVFHMIN-NEXT: addi a3, a3, -1
535 ; ZVFHMIN-NEXT: and a2, a3, a2
536 ; ZVFHMIN-NEXT: vsetvli zero, a2, e32, m8, ta, ma
537 ; ZVFHMIN-NEXT: vfcvt.f.xu.v v24, v16, v0.t
538 ; ZVFHMIN-NEXT: vsetvli a2, zero, e16, m4, ta, ma
539 ; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v24
540 ; ZVFHMIN-NEXT: bltu a0, a1, .LBB34_2
541 ; ZVFHMIN-NEXT: # %bb.1:
542 ; ZVFHMIN-NEXT: mv a0, a1
543 ; ZVFHMIN-NEXT: .LBB34_2:
544 ; ZVFHMIN-NEXT: vmv1r.v v0, v7
545 ; ZVFHMIN-NEXT: vsetvli zero, a0, e32, m8, ta, ma
546 ; ZVFHMIN-NEXT: vfcvt.f.xu.v v8, v8, v0.t
547 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma
548 ; ZVFHMIN-NEXT: vfncvt.f.f.w v16, v8
549 ; ZVFHMIN-NEXT: vmv8r.v v8, v16
551 %v = call <vscale x 32 x half> @llvm.vp.uitofp.nxv32f16.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 %evl)
552 ret <vscale x 32 x half> %v
555 declare <vscale x 32 x float> @llvm.vp.uitofp.nxv32f32.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i1>, i32)
557 define <vscale x 32 x float> @vuitofp_nxv32f32_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
558 ; CHECK-LABEL: vuitofp_nxv32f32_nxv32i32:
560 ; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
561 ; CHECK-NEXT: vmv1r.v v24, v0
562 ; CHECK-NEXT: csrr a1, vlenb
563 ; CHECK-NEXT: srli a2, a1, 2
564 ; CHECK-NEXT: slli a1, a1, 1
565 ; CHECK-NEXT: vslidedown.vx v0, v0, a2
566 ; CHECK-NEXT: sub a2, a0, a1
567 ; CHECK-NEXT: sltu a3, a0, a2
568 ; CHECK-NEXT: addi a3, a3, -1
569 ; CHECK-NEXT: and a2, a3, a2
570 ; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma
571 ; CHECK-NEXT: vfcvt.f.xu.v v16, v16, v0.t
572 ; CHECK-NEXT: bltu a0, a1, .LBB35_2
573 ; CHECK-NEXT: # %bb.1:
574 ; CHECK-NEXT: mv a0, a1
575 ; CHECK-NEXT: .LBB35_2:
576 ; CHECK-NEXT: vmv1r.v v0, v24
577 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
578 ; CHECK-NEXT: vfcvt.f.xu.v v8, v8, v0.t
580 %v = call <vscale x 32 x float> @llvm.vp.uitofp.nxv32f32.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 %evl)
581 ret <vscale x 32 x float> %v
584 define <vscale x 32 x float> @vuitofp_nxv32f32_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {
585 ; CHECK-LABEL: vuitofp_nxv32f32_nxv32i32_unmasked:
587 ; CHECK-NEXT: csrr a1, vlenb
588 ; CHECK-NEXT: slli a1, a1, 1
589 ; CHECK-NEXT: sub a2, a0, a1
590 ; CHECK-NEXT: sltu a3, a0, a2
591 ; CHECK-NEXT: addi a3, a3, -1
592 ; CHECK-NEXT: and a2, a3, a2
593 ; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma
594 ; CHECK-NEXT: vfcvt.f.xu.v v16, v16
595 ; CHECK-NEXT: bltu a0, a1, .LBB36_2
596 ; CHECK-NEXT: # %bb.1:
597 ; CHECK-NEXT: mv a0, a1
598 ; CHECK-NEXT: .LBB36_2:
599 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
600 ; CHECK-NEXT: vfcvt.f.xu.v v8, v8
602 %v = call <vscale x 32 x float> @llvm.vp.uitofp.nxv32f32.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
603 ret <vscale x 32 x float> %v