Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vuitofp-vp.ll
blob8ca27484d69fcb299da3fdf230d65374fcd83fda
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 --check-prefixes=CHECK,ZVFH
3 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zfh,+zvfh < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+zfh,+zvfhmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
5 ; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zfh,+zvfhmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
7 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i7(<vscale x 2 x i7>, <vscale x 2 x i1>, i32)
9 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i7(<vscale x 2 x i7> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
10 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i7:
11 ; ZVFH:       # %bb.0:
12 ; ZVFH-NEXT:    li a1, 127
13 ; ZVFH-NEXT:    vsetvli a2, zero, e8, mf4, ta, ma
14 ; ZVFH-NEXT:    vand.vx v9, v8, a1
15 ; ZVFH-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
16 ; ZVFH-NEXT:    vfwcvt.f.xu.v v8, v9, v0.t
17 ; ZVFH-NEXT:    ret
19 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i7:
20 ; ZVFHMIN:       # %bb.0:
21 ; ZVFHMIN-NEXT:    li a1, 127
22 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e8, mf4, ta, ma
23 ; ZVFHMIN-NEXT:    vand.vx v8, v8, a1
24 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
25 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8, v0.t
26 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9, v0.t
27 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
28 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
29 ; ZVFHMIN-NEXT:    ret
30   %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)
31   ret <vscale x 2 x half> %v
34 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
36 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
37 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i8:
38 ; ZVFH:       # %bb.0:
39 ; ZVFH-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
40 ; ZVFH-NEXT:    vfwcvt.f.xu.v v9, v8, v0.t
41 ; ZVFH-NEXT:    vmv1r.v v8, v9
42 ; ZVFH-NEXT:    ret
44 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i8:
45 ; ZVFHMIN:       # %bb.0:
46 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
47 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8, v0.t
48 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9, v0.t
49 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
50 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
51 ; ZVFHMIN-NEXT:    ret
52   %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)
53   ret <vscale x 2 x half> %v
56 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
57 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i8_unmasked:
58 ; ZVFH:       # %bb.0:
59 ; ZVFH-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
60 ; ZVFH-NEXT:    vfwcvt.f.xu.v v9, v8
61 ; ZVFH-NEXT:    vmv1r.v v8, v9
62 ; ZVFH-NEXT:    ret
64 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i8_unmasked:
65 ; ZVFHMIN:       # %bb.0:
66 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
67 ; ZVFHMIN-NEXT:    vzext.vf2 v9, v8
68 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v10, v9
69 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
70 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
71 ; ZVFHMIN-NEXT:    ret
72   %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
73   ret <vscale x 2 x half> %v
76 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
78 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
79 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i16:
80 ; ZVFH:       # %bb.0:
81 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
82 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8, v0.t
83 ; ZVFH-NEXT:    ret
85 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i16:
86 ; ZVFHMIN:       # %bb.0:
87 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
88 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8, v0.t
89 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
90 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
91 ; ZVFHMIN-NEXT:    ret
92   %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)
93   ret <vscale x 2 x half> %v
96 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
97 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i16_unmasked:
98 ; ZVFH:       # %bb.0:
99 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
100 ; ZVFH-NEXT:    vfcvt.f.xu.v v8, v8
101 ; ZVFH-NEXT:    ret
103 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i16_unmasked:
104 ; ZVFHMIN:       # %bb.0:
105 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
106 ; ZVFHMIN-NEXT:    vfwcvt.f.xu.v v9, v8
107 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
108 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
109 ; ZVFHMIN-NEXT:    ret
110   %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
111   ret <vscale x 2 x half> %v
114 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
116 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
117 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i32:
118 ; ZVFH:       # %bb.0:
119 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
120 ; ZVFH-NEXT:    vfncvt.f.xu.w v9, v8, v0.t
121 ; ZVFH-NEXT:    vmv1r.v v8, v9
122 ; ZVFH-NEXT:    ret
124 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i32:
125 ; ZVFHMIN:       # %bb.0:
126 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
127 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v9, v8, v0.t
128 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
129 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
130 ; ZVFHMIN-NEXT:    ret
131   %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)
132   ret <vscale x 2 x half> %v
135 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
136 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i32_unmasked:
137 ; ZVFH:       # %bb.0:
138 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
139 ; ZVFH-NEXT:    vfncvt.f.xu.w v9, v8
140 ; ZVFH-NEXT:    vmv1r.v v8, v9
141 ; ZVFH-NEXT:    ret
143 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i32_unmasked:
144 ; ZVFHMIN:       # %bb.0:
145 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
146 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v9, v8
147 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
148 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
149 ; ZVFHMIN-NEXT:    ret
150   %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
151   ret <vscale x 2 x half> %v
154 declare <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
156 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
157 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i64:
158 ; ZVFH:       # %bb.0:
159 ; ZVFH-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
160 ; ZVFH-NEXT:    vfncvt.f.xu.w v10, v8, v0.t
161 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
162 ; ZVFH-NEXT:    vfncvt.f.f.w v8, v10, v0.t
163 ; ZVFH-NEXT:    ret
165 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i64:
166 ; ZVFHMIN:       # %bb.0:
167 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
168 ; ZVFHMIN-NEXT:    vfncvt.f.xu.w v10, v8, v0.t
169 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
170 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
171 ; ZVFHMIN-NEXT:    ret
172   %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)
173   ret <vscale x 2 x half> %v
176 define <vscale x 2 x half> @vuitofp_nxv2f16_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
177 ; ZVFH-LABEL: vuitofp_nxv2f16_nxv2i64_unmasked:
178 ; ZVFH:       # %bb.0:
179 ; ZVFH-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
180 ; ZVFH-NEXT:    vfncvt.f.xu.w v10, v8
181 ; ZVFH-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
182 ; ZVFH-NEXT:    vfncvt.f.f.w v8, v10
183 ; ZVFH-NEXT:    ret
185 ; ZVFHMIN-LABEL: vuitofp_nxv2f16_nxv2i64_unmasked:
186 ; ZVFHMIN:       # %bb.0:
187 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
188 ; ZVFHMIN-NEXT:    vfncvt.f.xu.w v10, v8
189 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
190 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
191 ; ZVFHMIN-NEXT:    ret
192   %v = call <vscale x 2 x half> @llvm.vp.uitofp.nxv2f16.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
193   ret <vscale x 2 x half> %v
196 declare <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
198 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
199 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i8:
200 ; CHECK:       # %bb.0:
201 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
202 ; CHECK-NEXT:    vzext.vf2 v9, v8, v0.t
203 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9, v0.t
204 ; CHECK-NEXT:    ret
205   %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)
206   ret <vscale x 2 x float> %v
209 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
210 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i8_unmasked:
211 ; CHECK:       # %bb.0:
212 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
213 ; CHECK-NEXT:    vzext.vf2 v9, v8
214 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9
215 ; CHECK-NEXT:    ret
216   %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
217   ret <vscale x 2 x float> %v
220 declare <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
222 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
223 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i16:
224 ; CHECK:       # %bb.0:
225 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
226 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8, v0.t
227 ; CHECK-NEXT:    vmv1r.v v8, v9
228 ; CHECK-NEXT:    ret
229   %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)
230   ret <vscale x 2 x float> %v
233 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
234 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i16_unmasked:
235 ; CHECK:       # %bb.0:
236 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
237 ; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8
238 ; CHECK-NEXT:    vmv1r.v v8, v9
239 ; CHECK-NEXT:    ret
240   %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
241   ret <vscale x 2 x float> %v
244 declare <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
246 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
247 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i32:
248 ; CHECK:       # %bb.0:
249 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
250 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8, v0.t
251 ; CHECK-NEXT:    ret
252   %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)
253   ret <vscale x 2 x float> %v
256 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
257 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i32_unmasked:
258 ; CHECK:       # %bb.0:
259 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
260 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
261 ; CHECK-NEXT:    ret
262   %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
263   ret <vscale x 2 x float> %v
266 declare <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
268 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
269 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i64:
270 ; CHECK:       # %bb.0:
271 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
272 ; CHECK-NEXT:    vfncvt.f.xu.w v10, v8, v0.t
273 ; CHECK-NEXT:    vmv.v.v v8, v10
274 ; CHECK-NEXT:    ret
275   %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)
276   ret <vscale x 2 x float> %v
279 define <vscale x 2 x float> @vuitofp_nxv2f32_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
280 ; CHECK-LABEL: vuitofp_nxv2f32_nxv2i64_unmasked:
281 ; CHECK:       # %bb.0:
282 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
283 ; CHECK-NEXT:    vfncvt.f.xu.w v10, v8
284 ; CHECK-NEXT:    vmv.v.v v8, v10
285 ; CHECK-NEXT:    ret
286   %v = call <vscale x 2 x float> @llvm.vp.uitofp.nxv2f32.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
287   ret <vscale x 2 x float> %v
290 declare <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i1>, i32)
292 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
293 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i8:
294 ; CHECK:       # %bb.0:
295 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
296 ; CHECK-NEXT:    vzext.vf4 v10, v8, v0.t
297 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10, v0.t
298 ; CHECK-NEXT:    ret
299   %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)
300   ret <vscale x 2 x double> %v
303 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
304 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i8_unmasked:
305 ; CHECK:       # %bb.0:
306 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
307 ; CHECK-NEXT:    vzext.vf4 v10, v8
308 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
309 ; CHECK-NEXT:    ret
310   %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
311   ret <vscale x 2 x double> %v
314 declare <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
316 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
317 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i16:
318 ; CHECK:       # %bb.0:
319 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
320 ; CHECK-NEXT:    vzext.vf2 v10, v8, v0.t
321 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10, v0.t
322 ; CHECK-NEXT:    ret
323   %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)
324   ret <vscale x 2 x double> %v
327 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
328 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i16_unmasked:
329 ; CHECK:       # %bb.0:
330 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
331 ; CHECK-NEXT:    vzext.vf2 v10, v8
332 ; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10
333 ; CHECK-NEXT:    ret
334   %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
335   ret <vscale x 2 x double> %v
338 declare <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
340 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
341 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i32:
342 ; CHECK:       # %bb.0:
343 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
344 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8, v0.t
345 ; CHECK-NEXT:    vmv2r.v v8, v10
346 ; CHECK-NEXT:    ret
347   %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)
348   ret <vscale x 2 x double> %v
351 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
352 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i32_unmasked:
353 ; CHECK:       # %bb.0:
354 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
355 ; CHECK-NEXT:    vfwcvt.f.xu.v v10, v8
356 ; CHECK-NEXT:    vmv2r.v v8, v10
357 ; CHECK-NEXT:    ret
358   %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
359   ret <vscale x 2 x double> %v
362 declare <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
364 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
365 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i64:
366 ; CHECK:       # %bb.0:
367 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
368 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8, v0.t
369 ; CHECK-NEXT:    ret
370   %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)
371   ret <vscale x 2 x double> %v
374 define <vscale x 2 x double> @vuitofp_nxv2f64_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
375 ; CHECK-LABEL: vuitofp_nxv2f64_nxv2i64_unmasked:
376 ; CHECK:       # %bb.0:
377 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
378 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
379 ; CHECK-NEXT:    ret
380   %v = call <vscale x 2 x double> @llvm.vp.uitofp.nxv2f64.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> undef, i1 true, i32 0), <vscale x 2 x i1> undef, <vscale x 2 x i32> zeroinitializer), i32 %evl)
381   ret <vscale x 2 x double> %v
384 declare <vscale x 32 x half> @llvm.vp.uitofp.nxv32f16.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i1>, i32)
386 define <vscale x 32 x half> @vuitofp_nxv32f16_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
387 ; ZVFH-LABEL: vuitofp_nxv32f16_nxv32i32:
388 ; ZVFH:       # %bb.0:
389 ; ZVFH-NEXT:    vmv1r.v v24, v0
390 ; ZVFH-NEXT:    csrr a1, vlenb
391 ; ZVFH-NEXT:    srli a2, a1, 2
392 ; ZVFH-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
393 ; ZVFH-NEXT:    vslidedown.vx v0, v0, a2
394 ; ZVFH-NEXT:    slli a1, a1, 1
395 ; ZVFH-NEXT:    sub a2, a0, a1
396 ; ZVFH-NEXT:    sltu a3, a0, a2
397 ; ZVFH-NEXT:    addi a3, a3, -1
398 ; ZVFH-NEXT:    and a2, a3, a2
399 ; ZVFH-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
400 ; ZVFH-NEXT:    vfncvt.f.xu.w v28, v16, v0.t
401 ; ZVFH-NEXT:    bltu a0, a1, .LBB25_2
402 ; ZVFH-NEXT:  # %bb.1:
403 ; ZVFH-NEXT:    mv a0, a1
404 ; ZVFH-NEXT:  .LBB25_2:
405 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
406 ; ZVFH-NEXT:    vmv1r.v v0, v24
407 ; ZVFH-NEXT:    vfncvt.f.xu.w v24, v8, v0.t
408 ; ZVFH-NEXT:    vmv8r.v v8, v24
409 ; ZVFH-NEXT:    ret
411 ; ZVFHMIN-LABEL: vuitofp_nxv32f16_nxv32i32:
412 ; ZVFHMIN:       # %bb.0:
413 ; ZVFHMIN-NEXT:    vmv1r.v v1, v0
414 ; ZVFHMIN-NEXT:    csrr a1, vlenb
415 ; ZVFHMIN-NEXT:    srli a2, a1, 2
416 ; ZVFHMIN-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
417 ; ZVFHMIN-NEXT:    vslidedown.vx v0, v0, a2
418 ; ZVFHMIN-NEXT:    slli a1, a1, 1
419 ; ZVFHMIN-NEXT:    sub a2, a0, a1
420 ; ZVFHMIN-NEXT:    sltu a3, a0, a2
421 ; ZVFHMIN-NEXT:    addi a3, a3, -1
422 ; ZVFHMIN-NEXT:    and a2, a3, a2
423 ; ZVFHMIN-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
424 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v24, v16, v0.t
425 ; ZVFHMIN-NEXT:    vsetvli a2, zero, e16, m4, ta, ma
426 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v20, v24
427 ; ZVFHMIN-NEXT:    bltu a0, a1, .LBB25_2
428 ; ZVFHMIN-NEXT:  # %bb.1:
429 ; ZVFHMIN-NEXT:    mv a0, a1
430 ; ZVFHMIN-NEXT:  .LBB25_2:
431 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
432 ; ZVFHMIN-NEXT:    vmv1r.v v0, v1
433 ; ZVFHMIN-NEXT:    vfcvt.f.xu.v v8, v8, v0.t
434 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
435 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v16, v8
436 ; ZVFHMIN-NEXT:    vmv8r.v v8, v16
437 ; ZVFHMIN-NEXT:    ret
438   %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)
439   ret <vscale x 32 x half> %v
442 declare <vscale x 32 x float> @llvm.vp.uitofp.nxv32f32.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i1>, i32)
444 define <vscale x 32 x float> @vuitofp_nxv32f32_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
445 ; CHECK-LABEL: vuitofp_nxv32f32_nxv32i32:
446 ; CHECK:       # %bb.0:
447 ; CHECK-NEXT:    vmv1r.v v24, v0
448 ; CHECK-NEXT:    csrr a1, vlenb
449 ; CHECK-NEXT:    srli a2, a1, 2
450 ; CHECK-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
451 ; CHECK-NEXT:    vslidedown.vx v0, v0, a2
452 ; CHECK-NEXT:    slli a1, a1, 1
453 ; CHECK-NEXT:    sub a2, a0, a1
454 ; CHECK-NEXT:    sltu a3, a0, a2
455 ; CHECK-NEXT:    addi a3, a3, -1
456 ; CHECK-NEXT:    and a2, a3, a2
457 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
458 ; CHECK-NEXT:    vfcvt.f.xu.v v16, v16, v0.t
459 ; CHECK-NEXT:    bltu a0, a1, .LBB26_2
460 ; CHECK-NEXT:  # %bb.1:
461 ; CHECK-NEXT:    mv a0, a1
462 ; CHECK-NEXT:  .LBB26_2:
463 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
464 ; CHECK-NEXT:    vmv1r.v v0, v24
465 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8, v0.t
466 ; CHECK-NEXT:    ret
467   %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)
468   ret <vscale x 32 x float> %v
471 define <vscale x 32 x float> @vuitofp_nxv32f32_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {
472 ; CHECK-LABEL: vuitofp_nxv32f32_nxv32i32_unmasked:
473 ; CHECK:       # %bb.0:
474 ; CHECK-NEXT:    csrr a1, vlenb
475 ; CHECK-NEXT:    slli a1, a1, 1
476 ; CHECK-NEXT:    sub a2, a0, a1
477 ; CHECK-NEXT:    sltu a3, a0, a2
478 ; CHECK-NEXT:    addi a3, a3, -1
479 ; CHECK-NEXT:    and a2, a3, a2
480 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
481 ; CHECK-NEXT:    vfcvt.f.xu.v v16, v16
482 ; CHECK-NEXT:    bltu a0, a1, .LBB27_2
483 ; CHECK-NEXT:  # %bb.1:
484 ; CHECK-NEXT:    mv a0, a1
485 ; CHECK-NEXT:  .LBB27_2:
486 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
487 ; CHECK-NEXT:    vfcvt.f.xu.v v8, v8
488 ; CHECK-NEXT:    ret
489   %v = call <vscale x 32 x float> @llvm.vp.uitofp.nxv32f32.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> shufflevector (<vscale x 32 x i1> insertelement (<vscale x 32 x i1> undef, i1 true, i32 0), <vscale x 32 x i1> undef, <vscale x 32 x i32> zeroinitializer), i32 %evl)
490   ret <vscale x 32 x float> %v