[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfptosi-vp.ll
blobed0023e21497e74b5bb3088eedc996f36a7c3c56
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 i7> @vfptosi_v4i7_v4bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
8 ; CHECK-LABEL: vfptosi_v4i7_v4bf16:
9 ; CHECK:       # %bb.0:
10 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
11 ; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
12 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v8, v9, v0.t
13 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
14 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
15 ; CHECK-NEXT:    ret
16   %v = call <vscale x 2 x i7> @llvm.vp.fptosi.v4i7.v4bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl)
17   ret <vscale x 2 x i7> %v
20 define <vscale x 2 x i8> @vfptosi_nxv2i8_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
21 ; CHECK-LABEL: vfptosi_nxv2i8_nxv2bf16:
22 ; CHECK:       # %bb.0:
23 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
24 ; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
25 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v8, v9, v0.t
26 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
27 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
28 ; CHECK-NEXT:    ret
29   %v = call <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl)
30   ret <vscale x 2 x i8> %v
33 define <vscale x 2 x i8> @vfptosi_nxv2i8_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, i32 zeroext %evl) {
34 ; CHECK-LABEL: vfptosi_nxv2i8_nxv2bf16_unmasked:
35 ; CHECK:       # %bb.0:
36 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
37 ; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
38 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v8, v9
39 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
40 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
41 ; CHECK-NEXT:    ret
42   %v = call <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
43   ret <vscale x 2 x i8> %v
46 define <vscale x 2 x i16> @vfptosi_nxv2i16_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
47 ; CHECK-LABEL: vfptosi_nxv2i16_nxv2bf16:
48 ; CHECK:       # %bb.0:
49 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
50 ; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
51 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v8, v9, v0.t
52 ; CHECK-NEXT:    ret
53   %v = call <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl)
54   ret <vscale x 2 x i16> %v
57 define <vscale x 2 x i16> @vfptosi_nxv2i16_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, i32 zeroext %evl) {
58 ; CHECK-LABEL: vfptosi_nxv2i16_nxv2bf16_unmasked:
59 ; CHECK:       # %bb.0:
60 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
61 ; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
62 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v8, v9
63 ; CHECK-NEXT:    ret
64   %v = call <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
65   ret <vscale x 2 x i16> %v
68 define <vscale x 2 x i32> @vfptosi_nxv2i32_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
69 ; CHECK-LABEL: vfptosi_nxv2i32_nxv2bf16:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
72 ; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
73 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
74 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v9, v0.t
75 ; CHECK-NEXT:    ret
76   %v = call <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl)
77   ret <vscale x 2 x i32> %v
80 define <vscale x 2 x i32> @vfptosi_nxv2i32_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, i32 zeroext %evl) {
81 ; CHECK-LABEL: vfptosi_nxv2i32_nxv2bf16_unmasked:
82 ; CHECK:       # %bb.0:
83 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
84 ; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8
85 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
86 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v9
87 ; CHECK-NEXT:    ret
88   %v = call <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
89   ret <vscale x 2 x i32> %v
92 define <vscale x 2 x i64> @vfptosi_nxv2i64_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
93 ; CHECK-LABEL: vfptosi_nxv2i64_nxv2bf16:
94 ; CHECK:       # %bb.0:
95 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
96 ; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
97 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
98 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v10, v0.t
99 ; CHECK-NEXT:    ret
100   %v = call <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl)
101   ret <vscale x 2 x i64> %v
104 define <vscale x 2 x i64> @vfptosi_nxv2i64_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, i32 zeroext %evl) {
105 ; CHECK-LABEL: vfptosi_nxv2i64_nxv2bf16_unmasked:
106 ; CHECK:       # %bb.0:
107 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
108 ; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8
109 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
110 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v10
111 ; CHECK-NEXT:    ret
112   %v = call <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
113   ret <vscale x 2 x i64> %v
116 declare <vscale x 2 x i7> @llvm.vp.fptosi.v4i7.v4f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
118 define <vscale x 2 x i7> @vfptosi_v4i7_v4f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
119 ; ZVFH-LABEL: vfptosi_v4i7_v4f16:
120 ; ZVFH:       # %bb.0:
121 ; ZVFH-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
122 ; ZVFH-NEXT:    vfncvt.rtz.x.f.w v9, v8, v0.t
123 ; ZVFH-NEXT:    vmv1r.v v8, v9
124 ; ZVFH-NEXT:    ret
126 ; ZVFHMIN-LABEL: vfptosi_v4i7_v4f16:
127 ; ZVFHMIN:       # %bb.0:
128 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
129 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
130 ; ZVFHMIN-NEXT:    vfncvt.rtz.x.f.w v8, v9, v0.t
131 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
132 ; ZVFHMIN-NEXT:    vnsrl.wi v8, v8, 0, v0.t
133 ; ZVFHMIN-NEXT:    ret
134   %v = call <vscale x 2 x i7> @llvm.vp.fptosi.v4i7.v4f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
135   ret <vscale x 2 x i7> %v
138 declare <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
140 define <vscale x 2 x i8> @vfptosi_nxv2i8_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
141 ; ZVFH-LABEL: vfptosi_nxv2i8_nxv2f16:
142 ; ZVFH:       # %bb.0:
143 ; ZVFH-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
144 ; ZVFH-NEXT:    vfncvt.rtz.x.f.w v9, v8, v0.t
145 ; ZVFH-NEXT:    vmv1r.v v8, v9
146 ; ZVFH-NEXT:    ret
148 ; ZVFHMIN-LABEL: vfptosi_nxv2i8_nxv2f16:
149 ; ZVFHMIN:       # %bb.0:
150 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
151 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
152 ; ZVFHMIN-NEXT:    vfncvt.rtz.x.f.w v8, v9, v0.t
153 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
154 ; ZVFHMIN-NEXT:    vnsrl.wi v8, v8, 0, v0.t
155 ; ZVFHMIN-NEXT:    ret
156   %v = call <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
157   ret <vscale x 2 x i8> %v
160 define <vscale x 2 x i8> @vfptosi_nxv2i8_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) {
161 ; ZVFH-LABEL: vfptosi_nxv2i8_nxv2f16_unmasked:
162 ; ZVFH:       # %bb.0:
163 ; ZVFH-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
164 ; ZVFH-NEXT:    vfncvt.rtz.x.f.w v9, v8
165 ; ZVFH-NEXT:    vmv1r.v v8, v9
166 ; ZVFH-NEXT:    ret
168 ; ZVFHMIN-LABEL: vfptosi_nxv2i8_nxv2f16_unmasked:
169 ; ZVFHMIN:       # %bb.0:
170 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
171 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
172 ; ZVFHMIN-NEXT:    vfncvt.rtz.x.f.w v8, v9
173 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
174 ; ZVFHMIN-NEXT:    vnsrl.wi v8, v8, 0
175 ; ZVFHMIN-NEXT:    ret
176   %v = call <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
177   ret <vscale x 2 x i8> %v
180 declare <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
182 define <vscale x 2 x i16> @vfptosi_nxv2i16_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
183 ; ZVFH-LABEL: vfptosi_nxv2i16_nxv2f16:
184 ; ZVFH:       # %bb.0:
185 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
186 ; ZVFH-NEXT:    vfcvt.rtz.x.f.v v8, v8, v0.t
187 ; ZVFH-NEXT:    ret
189 ; ZVFHMIN-LABEL: vfptosi_nxv2i16_nxv2f16:
190 ; ZVFHMIN:       # %bb.0:
191 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
192 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
193 ; ZVFHMIN-NEXT:    vfncvt.rtz.x.f.w v8, v9, v0.t
194 ; ZVFHMIN-NEXT:    ret
195   %v = call <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
196   ret <vscale x 2 x i16> %v
199 define <vscale x 2 x i16> @vfptosi_nxv2i16_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) {
200 ; ZVFH-LABEL: vfptosi_nxv2i16_nxv2f16_unmasked:
201 ; ZVFH:       # %bb.0:
202 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
203 ; ZVFH-NEXT:    vfcvt.rtz.x.f.v v8, v8
204 ; ZVFH-NEXT:    ret
206 ; ZVFHMIN-LABEL: vfptosi_nxv2i16_nxv2f16_unmasked:
207 ; ZVFHMIN:       # %bb.0:
208 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
209 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
210 ; ZVFHMIN-NEXT:    vfncvt.rtz.x.f.w v8, v9
211 ; ZVFHMIN-NEXT:    ret
212   %v = call <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
213   ret <vscale x 2 x i16> %v
216 declare <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
218 define <vscale x 2 x i32> @vfptosi_nxv2i32_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
219 ; ZVFH-LABEL: vfptosi_nxv2i32_nxv2f16:
220 ; ZVFH:       # %bb.0:
221 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
222 ; ZVFH-NEXT:    vfwcvt.rtz.x.f.v v9, v8, v0.t
223 ; ZVFH-NEXT:    vmv1r.v v8, v9
224 ; ZVFH-NEXT:    ret
226 ; ZVFHMIN-LABEL: vfptosi_nxv2i32_nxv2f16:
227 ; ZVFHMIN:       # %bb.0:
228 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
229 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
230 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
231 ; ZVFHMIN-NEXT:    vfcvt.rtz.x.f.v v8, v9, v0.t
232 ; ZVFHMIN-NEXT:    ret
233   %v = call <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
234   ret <vscale x 2 x i32> %v
237 define <vscale x 2 x i32> @vfptosi_nxv2i32_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) {
238 ; ZVFH-LABEL: vfptosi_nxv2i32_nxv2f16_unmasked:
239 ; ZVFH:       # %bb.0:
240 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
241 ; ZVFH-NEXT:    vfwcvt.rtz.x.f.v v9, v8
242 ; ZVFH-NEXT:    vmv1r.v v8, v9
243 ; ZVFH-NEXT:    ret
245 ; ZVFHMIN-LABEL: vfptosi_nxv2i32_nxv2f16_unmasked:
246 ; ZVFHMIN:       # %bb.0:
247 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
248 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
249 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
250 ; ZVFHMIN-NEXT:    vfcvt.rtz.x.f.v v8, v9
251 ; ZVFHMIN-NEXT:    ret
252   %v = call <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
253   ret <vscale x 2 x i32> %v
256 declare <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32)
258 define <vscale x 2 x i64> @vfptosi_nxv2i64_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
259 ; ZVFH-LABEL: vfptosi_nxv2i64_nxv2f16:
260 ; ZVFH:       # %bb.0:
261 ; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
262 ; ZVFH-NEXT:    vfwcvt.f.f.v v10, v8, v0.t
263 ; ZVFH-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
264 ; ZVFH-NEXT:    vfwcvt.rtz.x.f.v v8, v10, v0.t
265 ; ZVFH-NEXT:    ret
267 ; ZVFHMIN-LABEL: vfptosi_nxv2i64_nxv2f16:
268 ; ZVFHMIN:       # %bb.0:
269 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
270 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
271 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
272 ; ZVFHMIN-NEXT:    vfwcvt.rtz.x.f.v v8, v10, v0.t
273 ; ZVFHMIN-NEXT:    ret
274   %v = call <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
275   ret <vscale x 2 x i64> %v
278 define <vscale x 2 x i64> @vfptosi_nxv2i64_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) {
279 ; CHECK-LABEL: vfptosi_nxv2i64_nxv2f16_unmasked:
280 ; CHECK:       # %bb.0:
281 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
282 ; CHECK-NEXT:    vfwcvt.f.f.v v10, v8
283 ; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
284 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v8, v10
285 ; CHECK-NEXT:    ret
286   %v = call <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
287   ret <vscale x 2 x i64> %v
290 declare <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
292 define <vscale x 2 x i8> @vfptosi_nxv2i8_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
293 ; CHECK-LABEL: vfptosi_nxv2i8_nxv2f32:
294 ; CHECK:       # %bb.0:
295 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
296 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8, v0.t
297 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
298 ; CHECK-NEXT:    vnsrl.wi v8, v9, 0, v0.t
299 ; CHECK-NEXT:    ret
300   %v = call <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
301   ret <vscale x 2 x i8> %v
304 define <vscale x 2 x i8> @vfptosi_nxv2i8_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) {
305 ; CHECK-LABEL: vfptosi_nxv2i8_nxv2f32_unmasked:
306 ; CHECK:       # %bb.0:
307 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
308 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
309 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
310 ; CHECK-NEXT:    vnsrl.wi v8, v9, 0
311 ; CHECK-NEXT:    ret
312   %v = call <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
313   ret <vscale x 2 x i8> %v
316 declare <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
318 define <vscale x 2 x i16> @vfptosi_nxv2i16_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
319 ; CHECK-LABEL: vfptosi_nxv2i16_nxv2f32:
320 ; CHECK:       # %bb.0:
321 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
322 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8, v0.t
323 ; CHECK-NEXT:    vmv1r.v v8, v9
324 ; CHECK-NEXT:    ret
325   %v = call <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
326   ret <vscale x 2 x i16> %v
329 define <vscale x 2 x i16> @vfptosi_nxv2i16_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) {
330 ; CHECK-LABEL: vfptosi_nxv2i16_nxv2f32_unmasked:
331 ; CHECK:       # %bb.0:
332 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
333 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v9, v8
334 ; CHECK-NEXT:    vmv1r.v v8, v9
335 ; CHECK-NEXT:    ret
336   %v = call <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
337   ret <vscale x 2 x i16> %v
340 declare <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
342 define <vscale x 2 x i32> @vfptosi_nxv2i32_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
343 ; CHECK-LABEL: vfptosi_nxv2i32_nxv2f32:
344 ; CHECK:       # %bb.0:
345 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
346 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8, v0.t
347 ; CHECK-NEXT:    ret
348   %v = call <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
349   ret <vscale x 2 x i32> %v
352 define <vscale x 2 x i32> @vfptosi_nxv2i32_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) {
353 ; CHECK-LABEL: vfptosi_nxv2i32_nxv2f32_unmasked:
354 ; CHECK:       # %bb.0:
355 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
356 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
357 ; CHECK-NEXT:    ret
358   %v = call <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
359   ret <vscale x 2 x i32> %v
362 declare <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32)
364 define <vscale x 2 x i64> @vfptosi_nxv2i64_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
365 ; CHECK-LABEL: vfptosi_nxv2i64_nxv2f32:
366 ; CHECK:       # %bb.0:
367 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
368 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v10, v8, v0.t
369 ; CHECK-NEXT:    vmv2r.v v8, v10
370 ; CHECK-NEXT:    ret
371   %v = call <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
372   ret <vscale x 2 x i64> %v
375 define <vscale x 2 x i64> @vfptosi_nxv2i64_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) {
376 ; CHECK-LABEL: vfptosi_nxv2i64_nxv2f32_unmasked:
377 ; CHECK:       # %bb.0:
378 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
379 ; CHECK-NEXT:    vfwcvt.rtz.x.f.v v10, v8
380 ; CHECK-NEXT:    vmv2r.v v8, v10
381 ; CHECK-NEXT:    ret
382   %v = call <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
383   ret <vscale x 2 x i64> %v
386 declare <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
388 define <vscale x 2 x i8> @vfptosi_nxv2i8_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
389 ; CHECK-LABEL: vfptosi_nxv2i8_nxv2f64:
390 ; CHECK:       # %bb.0:
391 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
392 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8, v0.t
393 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
394 ; CHECK-NEXT:    vnsrl.wi v8, v10, 0, v0.t
395 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
396 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0, v0.t
397 ; CHECK-NEXT:    ret
398   %v = call <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
399   ret <vscale x 2 x i8> %v
402 define <vscale x 2 x i8> @vfptosi_nxv2i8_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) {
403 ; CHECK-LABEL: vfptosi_nxv2i8_nxv2f64_unmasked:
404 ; CHECK:       # %bb.0:
405 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
406 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
407 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
408 ; CHECK-NEXT:    vnsrl.wi v8, v10, 0
409 ; CHECK-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
410 ; CHECK-NEXT:    vnsrl.wi v8, v8, 0
411 ; CHECK-NEXT:    ret
412   %v = call <vscale x 2 x i8> @llvm.vp.fptosi.nxv2i8.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
413   ret <vscale x 2 x i8> %v
416 declare <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
418 define <vscale x 2 x i16> @vfptosi_nxv2i16_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
419 ; CHECK-LABEL: vfptosi_nxv2i16_nxv2f64:
420 ; CHECK:       # %bb.0:
421 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
422 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8, v0.t
423 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
424 ; CHECK-NEXT:    vnsrl.wi v8, v10, 0, v0.t
425 ; CHECK-NEXT:    ret
426   %v = call <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
427   ret <vscale x 2 x i16> %v
430 define <vscale x 2 x i16> @vfptosi_nxv2i16_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) {
431 ; CHECK-LABEL: vfptosi_nxv2i16_nxv2f64_unmasked:
432 ; CHECK:       # %bb.0:
433 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
434 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
435 ; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
436 ; CHECK-NEXT:    vnsrl.wi v8, v10, 0
437 ; CHECK-NEXT:    ret
438   %v = call <vscale x 2 x i16> @llvm.vp.fptosi.nxv2i16.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
439   ret <vscale x 2 x i16> %v
442 declare <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
444 define <vscale x 2 x i32> @vfptosi_nxv2i32_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
445 ; CHECK-LABEL: vfptosi_nxv2i32_nxv2f64:
446 ; CHECK:       # %bb.0:
447 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
448 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8, v0.t
449 ; CHECK-NEXT:    vmv.v.v v8, v10
450 ; CHECK-NEXT:    ret
451   %v = call <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
452   ret <vscale x 2 x i32> %v
455 define <vscale x 2 x i32> @vfptosi_nxv2i32_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) {
456 ; CHECK-LABEL: vfptosi_nxv2i32_nxv2f64_unmasked:
457 ; CHECK:       # %bb.0:
458 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
459 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v10, v8
460 ; CHECK-NEXT:    vmv.v.v v8, v10
461 ; CHECK-NEXT:    ret
462   %v = call <vscale x 2 x i32> @llvm.vp.fptosi.nxv2i32.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
463   ret <vscale x 2 x i32> %v
466 declare <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32)
468 define <vscale x 2 x i64> @vfptosi_nxv2i64_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
469 ; CHECK-LABEL: vfptosi_nxv2i64_nxv2f64:
470 ; CHECK:       # %bb.0:
471 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
472 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8, v0.t
473 ; CHECK-NEXT:    ret
474   %v = call <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
475   ret <vscale x 2 x i64> %v
478 define <vscale x 2 x i64> @vfptosi_nxv2i64_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) {
479 ; CHECK-LABEL: vfptosi_nxv2i64_nxv2f64_unmasked:
480 ; CHECK:       # %bb.0:
481 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
482 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
483 ; CHECK-NEXT:    ret
484   %v = call <vscale x 2 x i64> @llvm.vp.fptosi.nxv2i64.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
485   ret <vscale x 2 x i64> %v
488 declare <vscale x 32 x i16> @llvm.vp.fptosi.nxv32i16.nxv32f32(<vscale x 32 x float>, <vscale x 32 x i1>, i32)
490 define <vscale x 32 x i16> @vfptosi_nxv32i16_nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
491 ; CHECK-LABEL: vfptosi_nxv32i16_nxv32f32:
492 ; CHECK:       # %bb.0:
493 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
494 ; CHECK-NEXT:    vmv1r.v v24, v0
495 ; CHECK-NEXT:    csrr a1, vlenb
496 ; CHECK-NEXT:    srli a2, a1, 2
497 ; CHECK-NEXT:    slli a1, a1, 1
498 ; CHECK-NEXT:    vslidedown.vx v0, v0, a2
499 ; CHECK-NEXT:    sub a2, a0, a1
500 ; CHECK-NEXT:    sltu a3, a0, a2
501 ; CHECK-NEXT:    addi a3, a3, -1
502 ; CHECK-NEXT:    and a2, a3, a2
503 ; CHECK-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
504 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v28, v16, v0.t
505 ; CHECK-NEXT:    bltu a0, a1, .LBB34_2
506 ; CHECK-NEXT:  # %bb.1:
507 ; CHECK-NEXT:    mv a0, a1
508 ; CHECK-NEXT:  .LBB34_2:
509 ; CHECK-NEXT:    vmv1r.v v0, v24
510 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
511 ; CHECK-NEXT:    vfncvt.rtz.x.f.w v24, v8, v0.t
512 ; CHECK-NEXT:    vmv8r.v v8, v24
513 ; CHECK-NEXT:    ret
514   %v = call <vscale x 32 x i16> @llvm.vp.fptosi.nxv32i16.nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> %m, i32 %evl)
515   ret <vscale x 32 x i16> %v
518 declare <vscale x 32 x i32> @llvm.vp.fptosi.nxv32i32.nxv32f32(<vscale x 32 x float>, <vscale x 32 x i1>, i32)
520 define <vscale x 32 x i32> @vfptosi_nxv32i32_nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
521 ; CHECK-LABEL: vfptosi_nxv32i32_nxv32f32:
522 ; CHECK:       # %bb.0:
523 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
524 ; CHECK-NEXT:    vmv1r.v v24, v0
525 ; CHECK-NEXT:    csrr a1, vlenb
526 ; CHECK-NEXT:    srli a2, a1, 2
527 ; CHECK-NEXT:    slli a1, a1, 1
528 ; CHECK-NEXT:    vslidedown.vx v0, v0, a2
529 ; CHECK-NEXT:    sub a2, a0, a1
530 ; CHECK-NEXT:    sltu a3, a0, a2
531 ; CHECK-NEXT:    addi a3, a3, -1
532 ; CHECK-NEXT:    and a2, a3, a2
533 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
534 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v16, v16, v0.t
535 ; CHECK-NEXT:    bltu a0, a1, .LBB35_2
536 ; CHECK-NEXT:  # %bb.1:
537 ; CHECK-NEXT:    mv a0, a1
538 ; CHECK-NEXT:  .LBB35_2:
539 ; CHECK-NEXT:    vmv1r.v v0, v24
540 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
541 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8, v0.t
542 ; CHECK-NEXT:    ret
543   %v = call <vscale x 32 x i32> @llvm.vp.fptosi.nxv32i32.nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> %m, i32 %evl)
544   ret <vscale x 32 x i32> %v
547 define <vscale x 32 x i32> @vfptosi_nxv32i32_nxv32f32_unmasked(<vscale x 32 x float> %va, i32 zeroext %evl) {
548 ; CHECK-LABEL: vfptosi_nxv32i32_nxv32f32_unmasked:
549 ; CHECK:       # %bb.0:
550 ; CHECK-NEXT:    csrr a1, vlenb
551 ; CHECK-NEXT:    slli a1, a1, 1
552 ; CHECK-NEXT:    sub a2, a0, a1
553 ; CHECK-NEXT:    sltu a3, a0, a2
554 ; CHECK-NEXT:    addi a3, a3, -1
555 ; CHECK-NEXT:    and a2, a3, a2
556 ; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
557 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v16, v16
558 ; CHECK-NEXT:    bltu a0, a1, .LBB36_2
559 ; CHECK-NEXT:  # %bb.1:
560 ; CHECK-NEXT:    mv a0, a1
561 ; CHECK-NEXT:  .LBB36_2:
562 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
563 ; CHECK-NEXT:    vfcvt.rtz.x.f.v v8, v8
564 ; CHECK-NEXT:    ret
565   %v = call <vscale x 32 x i32> @llvm.vp.fptosi.nxv32i32.nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
566   ret <vscale x 32 x i32> %v