[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vuitofp-vp.ll
blob3d27a1eaf22e1144d3643328e28d68021cf0a6b6
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:
9 ; CHECK:       # %bb.0:
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
18 ; CHECK-NEXT:    ret
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:
25 ; CHECK:       # %bb.0:
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
31 ; CHECK-NEXT:    ret
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:
38 ; CHECK:       # %bb.0:
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
44 ; CHECK-NEXT:    ret
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:
51 ; CHECK:       # %bb.0:
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
56 ; CHECK-NEXT:    ret
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:
63 ; CHECK:       # %bb.0:
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
68 ; CHECK-NEXT:    ret
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:
75 ; CHECK:       # %bb.0:
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
80 ; CHECK-NEXT:    ret
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:
87 ; CHECK:       # %bb.0:
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
92 ; CHECK-NEXT:    ret
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:
99 ; CHECK:       # %bb.0:
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
104 ; CHECK-NEXT:    ret
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:
111 ; CHECK:       # %bb.0:
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
116 ; CHECK-NEXT:    ret
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:
125 ; ZVFH:       # %bb.0:
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
130 ; ZVFH-NEXT:    ret
132 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i7:
133 ; ZVFHMIN:       # %bb.0:
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
142 ; ZVFHMIN-NEXT:    ret
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:
151 ; ZVFH:       # %bb.0:
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
155 ; ZVFH-NEXT:    ret
157 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i8:
158 ; ZVFHMIN:       # %bb.0:
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
164 ; ZVFHMIN-NEXT:    ret
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:
171 ; ZVFH:       # %bb.0:
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
175 ; ZVFH-NEXT:    ret
177 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i8_unmasked:
178 ; ZVFHMIN:       # %bb.0:
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
184 ; ZVFHMIN-NEXT:    ret
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:
193 ; ZVFH:       # %bb.0:
194 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
195 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8, v0.t
196 ; ZVFH-NEXT:    ret
198 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i16:
199 ; ZVFHMIN:       # %bb.0:
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
204 ; ZVFHMIN-NEXT:    ret
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:
211 ; ZVFH:       # %bb.0:
212 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
213 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
214 ; ZVFH-NEXT:    ret
216 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i16_unmasked:
217 ; ZVFHMIN:       # %bb.0:
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
222 ; ZVFHMIN-NEXT:    ret
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:
231 ; ZVFH:       # %bb.0:
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
235 ; ZVFH-NEXT:    ret
237 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i32:
238 ; ZVFHMIN:       # %bb.0:
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
243 ; ZVFHMIN-NEXT:    ret
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:
250 ; ZVFH:       # %bb.0:
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
254 ; ZVFH-NEXT:    ret
256 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i32_unmasked:
257 ; ZVFHMIN:       # %bb.0:
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
262 ; ZVFHMIN-NEXT:    ret
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:
271 ; ZVFH:       # %bb.0:
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
276 ; ZVFH-NEXT:    ret
278 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i64:
279 ; ZVFHMIN:       # %bb.0:
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
284 ; ZVFHMIN-NEXT:    ret
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:
291 ; ZVFH:       # %bb.0:
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
296 ; ZVFH-NEXT:    ret
298 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i64_unmasked:
299 ; ZVFHMIN:       # %bb.0:
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
304 ; ZVFHMIN-NEXT:    ret
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:
313 ; CHECK:       # %bb.0:
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
317 ; CHECK-NEXT:    ret
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:
324 ; CHECK:       # %bb.0:
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
328 ; CHECK-NEXT:    ret
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:
337 ; CHECK:       # %bb.0:
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
341 ; CHECK-NEXT:    ret
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:
348 ; CHECK:       # %bb.0:
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
352 ; CHECK-NEXT:    ret
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:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
363 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8, v0.t
364 ; CHECK-NEXT:    ret
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:
371 ; CHECK:       # %bb.0:
372 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
373 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
374 ; CHECK-NEXT:    ret
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:
383 ; CHECK:       # %bb.0:
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
387 ; CHECK-NEXT:    ret
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:
394 ; CHECK:       # %bb.0:
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
398 ; CHECK-NEXT:    ret
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:
407 ; CHECK:       # %bb.0:
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
411 ; CHECK-NEXT:    ret
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:
418 ; CHECK:       # %bb.0:
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
422 ; CHECK-NEXT:    ret
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:
431 ; CHECK:       # %bb.0:
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
435 ; CHECK-NEXT:    ret
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:
442 ; CHECK:       # %bb.0:
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
446 ; CHECK-NEXT:    ret
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:
455 ; CHECK:       # %bb.0:
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
459 ; CHECK-NEXT:    ret
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:
466 ; CHECK:       # %bb.0:
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
470 ; CHECK-NEXT:    ret
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:
479 ; CHECK:       # %bb.0:
480 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
481 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8, v0.t
482 ; CHECK-NEXT:    ret
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:
489 ; CHECK:       # %bb.0:
490 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
491 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
492 ; CHECK-NEXT:    ret
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:
501 ; ZVFH:       # %bb.0:
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
522 ; ZVFH-NEXT:    ret
524 ; ZVFHMIN-LABEL: vuitofp_nxv32f16_nxv32i32:
525 ; ZVFHMIN:       # %bb.0:
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
550 ; ZVFHMIN-NEXT:    ret
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:
559 ; CHECK:       # %bb.0:
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
579 ; CHECK-NEXT:    ret
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:
586 ; CHECK:       # %bb.0:
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
601 ; CHECK-NEXT:    ret
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