1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+zfh,+zvfh \
3 ; RUN: -verify-machineinstrs -target-abi=ilp32d | FileCheck %s
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zfh,+zvfh \
5 ; RUN: -verify-machineinstrs -target-abi=lp64d | FileCheck %s
7 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv1f16(
13 define <vscale x 2 x float> @intrinsic_vfwredusum_vs_nxv2f32_nxv1f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 1 x half> %1, <vscale x 2 x float> %2, iXLen %3) nounwind {
14 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv2f32_nxv1f16_nxv2f32:
15 ; CHECK: # %bb.0: # %entry
16 ; CHECK-NEXT: fsrmi a1, 0
17 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
18 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10
22 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv1f16(
23 <vscale x 2 x float> %0,
24 <vscale x 1 x half> %1,
25 <vscale x 2 x float> %2,
28 ret <vscale x 2 x float> %a
31 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv1f16.nxv2f32(
38 define <vscale x 2 x float> @intrinsic_vfwredusum_mask_vs_nxv2f32_nxv1f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 1 x half> %1, <vscale x 2 x float> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
39 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv2f32_nxv1f16_nxv2f32:
40 ; CHECK: # %bb.0: # %entry
41 ; CHECK-NEXT: fsrmi a1, 0
42 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
43 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10, v0.t
47 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv1f16.nxv2f32(
48 <vscale x 2 x float> %0,
49 <vscale x 1 x half> %1,
50 <vscale x 2 x float> %2,
54 ret <vscale x 2 x float> %a
57 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv2f16(
63 define <vscale x 2 x float> @intrinsic_vfwredusum_vs_nxv2f32_nxv2f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 2 x half> %1, <vscale x 2 x float> %2, iXLen %3) nounwind {
64 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv2f32_nxv2f16_nxv2f32:
65 ; CHECK: # %bb.0: # %entry
66 ; CHECK-NEXT: fsrmi a1, 0
67 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
68 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10
72 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv2f16(
73 <vscale x 2 x float> %0,
74 <vscale x 2 x half> %1,
75 <vscale x 2 x float> %2,
78 ret <vscale x 2 x float> %a
81 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv2f16.nxv2f32(
88 define <vscale x 2 x float> @intrinsic_vfwredusum_mask_vs_nxv2f32_nxv2f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 2 x half> %1, <vscale x 2 x float> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
89 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv2f32_nxv2f16_nxv2f32:
90 ; CHECK: # %bb.0: # %entry
91 ; CHECK-NEXT: fsrmi a1, 0
92 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
93 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10, v0.t
97 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv2f16.nxv2f32(
98 <vscale x 2 x float> %0,
99 <vscale x 2 x half> %1,
100 <vscale x 2 x float> %2,
101 <vscale x 2 x i1> %3,
104 ret <vscale x 2 x float> %a
107 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv4f16(
108 <vscale x 2 x float>,
110 <vscale x 2 x float>,
113 define <vscale x 2 x float> @intrinsic_vfwredusum_vs_nxv2f32_nxv4f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 4 x half> %1, <vscale x 2 x float> %2, iXLen %3) nounwind {
114 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv2f32_nxv4f16_nxv2f32:
115 ; CHECK: # %bb.0: # %entry
116 ; CHECK-NEXT: fsrmi a1, 0
117 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
118 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10
119 ; CHECK-NEXT: fsrm a1
122 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv4f16(
123 <vscale x 2 x float> %0,
124 <vscale x 4 x half> %1,
125 <vscale x 2 x float> %2,
128 ret <vscale x 2 x float> %a
131 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv4f16.nxv2f32(
132 <vscale x 2 x float>,
134 <vscale x 2 x float>,
138 define <vscale x 2 x float> @intrinsic_vfwredusum_mask_vs_nxv2f32_nxv4f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 4 x half> %1, <vscale x 2 x float> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
139 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv2f32_nxv4f16_nxv2f32:
140 ; CHECK: # %bb.0: # %entry
141 ; CHECK-NEXT: fsrmi a1, 0
142 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
143 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10, v0.t
144 ; CHECK-NEXT: fsrm a1
147 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv4f16.nxv2f32(
148 <vscale x 2 x float> %0,
149 <vscale x 4 x half> %1,
150 <vscale x 2 x float> %2,
151 <vscale x 4 x i1> %3,
154 ret <vscale x 2 x float> %a
157 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv8f16(
158 <vscale x 2 x float>,
160 <vscale x 2 x float>,
163 define <vscale x 2 x float> @intrinsic_vfwredusum_vs_nxv2f32_nxv8f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 8 x half> %1, <vscale x 2 x float> %2, iXLen %3) nounwind {
164 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv2f32_nxv8f16_nxv2f32:
165 ; CHECK: # %bb.0: # %entry
166 ; CHECK-NEXT: fsrmi a1, 0
167 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
168 ; CHECK-NEXT: vfwredusum.vs v8, v10, v9
169 ; CHECK-NEXT: fsrm a1
172 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv8f16(
173 <vscale x 2 x float> %0,
174 <vscale x 8 x half> %1,
175 <vscale x 2 x float> %2,
178 ret <vscale x 2 x float> %a
181 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv8f16.nxv2f32(
182 <vscale x 2 x float>,
184 <vscale x 2 x float>,
188 define <vscale x 2 x float> @intrinsic_vfwredusum_mask_vs_nxv2f32_nxv8f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 8 x half> %1, <vscale x 2 x float> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
189 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv2f32_nxv8f16_nxv2f32:
190 ; CHECK: # %bb.0: # %entry
191 ; CHECK-NEXT: fsrmi a1, 0
192 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
193 ; CHECK-NEXT: vfwredusum.vs v8, v10, v9, v0.t
194 ; CHECK-NEXT: fsrm a1
197 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv8f16.nxv2f32(
198 <vscale x 2 x float> %0,
199 <vscale x 8 x half> %1,
200 <vscale x 2 x float> %2,
201 <vscale x 8 x i1> %3,
204 ret <vscale x 2 x float> %a
207 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv16f16(
208 <vscale x 2 x float>,
209 <vscale x 16 x half>,
210 <vscale x 2 x float>,
213 define <vscale x 2 x float> @intrinsic_vfwredusum_vs_nxv2f32_nxv16f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 16 x half> %1, <vscale x 2 x float> %2, iXLen %3) nounwind {
214 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv2f32_nxv16f16_nxv2f32:
215 ; CHECK: # %bb.0: # %entry
216 ; CHECK-NEXT: fsrmi a1, 0
217 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
218 ; CHECK-NEXT: vfwredusum.vs v8, v12, v9
219 ; CHECK-NEXT: fsrm a1
222 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv16f16(
223 <vscale x 2 x float> %0,
224 <vscale x 16 x half> %1,
225 <vscale x 2 x float> %2,
228 ret <vscale x 2 x float> %a
231 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv16f16.nxv2f32(
232 <vscale x 2 x float>,
233 <vscale x 16 x half>,
234 <vscale x 2 x float>,
238 define <vscale x 2 x float> @intrinsic_vfwredusum_mask_vs_nxv2f32_nxv16f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 16 x half> %1, <vscale x 2 x float> %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
239 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv2f32_nxv16f16_nxv2f32:
240 ; CHECK: # %bb.0: # %entry
241 ; CHECK-NEXT: fsrmi a1, 0
242 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
243 ; CHECK-NEXT: vfwredusum.vs v8, v12, v9, v0.t
244 ; CHECK-NEXT: fsrm a1
247 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv16f16.nxv2f32(
248 <vscale x 2 x float> %0,
249 <vscale x 16 x half> %1,
250 <vscale x 2 x float> %2,
251 <vscale x 16 x i1> %3,
254 ret <vscale x 2 x float> %a
257 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv32f16(
258 <vscale x 2 x float>,
259 <vscale x 32 x half>,
260 <vscale x 2 x float>,
263 define <vscale x 2 x float> @intrinsic_vfwredusum_vs_nxv2f32_nxv32f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 32 x half> %1, <vscale x 2 x float> %2, iXLen %3) nounwind {
264 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv2f32_nxv32f16_nxv2f32:
265 ; CHECK: # %bb.0: # %entry
266 ; CHECK-NEXT: fsrmi a1, 0
267 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
268 ; CHECK-NEXT: vfwredusum.vs v8, v16, v9
269 ; CHECK-NEXT: fsrm a1
272 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.nxv2f32.nxv32f16(
273 <vscale x 2 x float> %0,
274 <vscale x 32 x half> %1,
275 <vscale x 2 x float> %2,
278 ret <vscale x 2 x float> %a
281 declare <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv32f16(
282 <vscale x 2 x float>,
283 <vscale x 32 x half>,
284 <vscale x 2 x float>,
288 define <vscale x 2 x float> @intrinsic_vfwredusum_mask_vs_nxv2f32_nxv32f16_nxv2f32(<vscale x 2 x float> %0, <vscale x 32 x half> %1, <vscale x 2 x float> %2, <vscale x 32 x i1> %3, iXLen %4) nounwind {
289 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv2f32_nxv32f16_nxv2f32:
290 ; CHECK: # %bb.0: # %entry
291 ; CHECK-NEXT: fsrmi a1, 0
292 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
293 ; CHECK-NEXT: vfwredusum.vs v8, v16, v9, v0.t
294 ; CHECK-NEXT: fsrm a1
297 %a = call <vscale x 2 x float> @llvm.riscv.vfwredusum.mask.nxv2f32.nxv32f16(
298 <vscale x 2 x float> %0,
299 <vscale x 32 x half> %1,
300 <vscale x 2 x float> %2,
301 <vscale x 32 x i1> %3,
304 ret <vscale x 2 x float> %a
307 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv1f32(
308 <vscale x 1 x double>,
309 <vscale x 1 x float>,
310 <vscale x 1 x double>,
313 define <vscale x 1 x double> @intrinsic_vfwredusum_vs_nxv1f64_nxv1f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 1 x float> %1, <vscale x 1 x double> %2, iXLen %3) nounwind {
314 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv1f64_nxv1f32_nxv1f64:
315 ; CHECK: # %bb.0: # %entry
316 ; CHECK-NEXT: fsrmi a1, 0
317 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
318 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10
319 ; CHECK-NEXT: fsrm a1
322 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv1f32(
323 <vscale x 1 x double> %0,
324 <vscale x 1 x float> %1,
325 <vscale x 1 x double> %2,
328 ret <vscale x 1 x double> %a
331 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv1f32.nxv1f64(
332 <vscale x 1 x double>,
333 <vscale x 1 x float>,
334 <vscale x 1 x double>,
338 define <vscale x 1 x double> @intrinsic_vfwredusum_mask_vs_nxv1f64_nxv1f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 1 x float> %1, <vscale x 1 x double> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
339 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv1f64_nxv1f32_nxv1f64:
340 ; CHECK: # %bb.0: # %entry
341 ; CHECK-NEXT: fsrmi a1, 0
342 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
343 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10, v0.t
344 ; CHECK-NEXT: fsrm a1
347 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv1f32.nxv1f64(
348 <vscale x 1 x double> %0,
349 <vscale x 1 x float> %1,
350 <vscale x 1 x double> %2,
351 <vscale x 1 x i1> %3,
354 ret <vscale x 1 x double> %a
357 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv2f32(
358 <vscale x 1 x double>,
359 <vscale x 2 x float>,
360 <vscale x 1 x double>,
363 define <vscale x 1 x double> @intrinsic_vfwredusum_vs_nxv1f64_nxv2f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 2 x float> %1, <vscale x 1 x double> %2, iXLen %3) nounwind {
364 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv1f64_nxv2f32_nxv1f64:
365 ; CHECK: # %bb.0: # %entry
366 ; CHECK-NEXT: fsrmi a1, 0
367 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
368 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10
369 ; CHECK-NEXT: fsrm a1
372 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv2f32(
373 <vscale x 1 x double> %0,
374 <vscale x 2 x float> %1,
375 <vscale x 1 x double> %2,
378 ret <vscale x 1 x double> %a
381 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv2f32.nxv1f64(
382 <vscale x 1 x double>,
383 <vscale x 2 x float>,
384 <vscale x 1 x double>,
388 define <vscale x 1 x double> @intrinsic_vfwredusum_mask_vs_nxv1f64_nxv2f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 2 x float> %1, <vscale x 1 x double> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
389 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv1f64_nxv2f32_nxv1f64:
390 ; CHECK: # %bb.0: # %entry
391 ; CHECK-NEXT: fsrmi a1, 0
392 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
393 ; CHECK-NEXT: vfwredusum.vs v8, v9, v10, v0.t
394 ; CHECK-NEXT: fsrm a1
397 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv2f32.nxv1f64(
398 <vscale x 1 x double> %0,
399 <vscale x 2 x float> %1,
400 <vscale x 1 x double> %2,
401 <vscale x 2 x i1> %3,
404 ret <vscale x 1 x double> %a
407 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv4f32(
408 <vscale x 1 x double>,
409 <vscale x 4 x float>,
410 <vscale x 1 x double>,
413 define <vscale x 1 x double> @intrinsic_vfwredusum_vs_nxv1f64_nxv4f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 4 x float> %1, <vscale x 1 x double> %2, iXLen %3) nounwind {
414 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv1f64_nxv4f32_nxv1f64:
415 ; CHECK: # %bb.0: # %entry
416 ; CHECK-NEXT: fsrmi a1, 0
417 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
418 ; CHECK-NEXT: vfwredusum.vs v8, v10, v9
419 ; CHECK-NEXT: fsrm a1
422 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv4f32(
423 <vscale x 1 x double> %0,
424 <vscale x 4 x float> %1,
425 <vscale x 1 x double> %2,
428 ret <vscale x 1 x double> %a
431 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv4f32.nxv1f64(
432 <vscale x 1 x double>,
433 <vscale x 4 x float>,
434 <vscale x 1 x double>,
438 define <vscale x 1 x double> @intrinsic_vfwredusum_mask_vs_nxv1f64_nxv4f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 4 x float> %1, <vscale x 1 x double> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
439 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv1f64_nxv4f32_nxv1f64:
440 ; CHECK: # %bb.0: # %entry
441 ; CHECK-NEXT: fsrmi a1, 0
442 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
443 ; CHECK-NEXT: vfwredusum.vs v8, v10, v9, v0.t
444 ; CHECK-NEXT: fsrm a1
447 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv4f32.nxv1f64(
448 <vscale x 1 x double> %0,
449 <vscale x 4 x float> %1,
450 <vscale x 1 x double> %2,
451 <vscale x 4 x i1> %3,
454 ret <vscale x 1 x double> %a
457 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv8f32(
458 <vscale x 1 x double>,
459 <vscale x 8 x float>,
460 <vscale x 1 x double>,
463 define <vscale x 1 x double> @intrinsic_vfwredusum_vs_nxv1f64_nxv8f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 8 x float> %1, <vscale x 1 x double> %2, iXLen %3) nounwind {
464 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv1f64_nxv8f32_nxv1f64:
465 ; CHECK: # %bb.0: # %entry
466 ; CHECK-NEXT: fsrmi a1, 0
467 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
468 ; CHECK-NEXT: vfwredusum.vs v8, v12, v9
469 ; CHECK-NEXT: fsrm a1
472 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv8f32(
473 <vscale x 1 x double> %0,
474 <vscale x 8 x float> %1,
475 <vscale x 1 x double> %2,
478 ret <vscale x 1 x double> %a
481 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv8f32.nxv1f64(
482 <vscale x 1 x double>,
483 <vscale x 8 x float>,
484 <vscale x 1 x double>,
488 define <vscale x 1 x double> @intrinsic_vfwredusum_mask_vs_nxv1f64_nxv8f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 8 x float> %1, <vscale x 1 x double> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
489 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv1f64_nxv8f32_nxv1f64:
490 ; CHECK: # %bb.0: # %entry
491 ; CHECK-NEXT: fsrmi a1, 0
492 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
493 ; CHECK-NEXT: vfwredusum.vs v8, v12, v9, v0.t
494 ; CHECK-NEXT: fsrm a1
497 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv8f32.nxv1f64(
498 <vscale x 1 x double> %0,
499 <vscale x 8 x float> %1,
500 <vscale x 1 x double> %2,
501 <vscale x 8 x i1> %3,
504 ret <vscale x 1 x double> %a
507 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv16f32(
508 <vscale x 1 x double>,
509 <vscale x 16 x float>,
510 <vscale x 1 x double>,
513 define <vscale x 1 x double> @intrinsic_vfwredusum_vs_nxv1f64_nxv16f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 16 x float> %1, <vscale x 1 x double> %2, iXLen %3) nounwind {
514 ; CHECK-LABEL: intrinsic_vfwredusum_vs_nxv1f64_nxv16f32_nxv1f64:
515 ; CHECK: # %bb.0: # %entry
516 ; CHECK-NEXT: fsrmi a1, 0
517 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
518 ; CHECK-NEXT: vfwredusum.vs v8, v16, v9
519 ; CHECK-NEXT: fsrm a1
522 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.nxv1f64.nxv16f32(
523 <vscale x 1 x double> %0,
524 <vscale x 16 x float> %1,
525 <vscale x 1 x double> %2,
528 ret <vscale x 1 x double> %a
531 declare <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv16f32.nxv1f64(
532 <vscale x 1 x double>,
533 <vscale x 16 x float>,
534 <vscale x 1 x double>,
538 define <vscale x 1 x double> @intrinsic_vfwredusum_mask_vs_nxv1f64_nxv16f32_nxv1f64(<vscale x 1 x double> %0, <vscale x 16 x float> %1, <vscale x 1 x double> %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
539 ; CHECK-LABEL: intrinsic_vfwredusum_mask_vs_nxv1f64_nxv16f32_nxv1f64:
540 ; CHECK: # %bb.0: # %entry
541 ; CHECK-NEXT: fsrmi a1, 0
542 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
543 ; CHECK-NEXT: vfwredusum.vs v8, v16, v9, v0.t
544 ; CHECK-NEXT: fsrm a1
547 %a = call <vscale x 1 x double> @llvm.riscv.vfwredusum.mask.nxv1f64.nxv16f32.nxv1f64(
548 <vscale x 1 x double> %0,
549 <vscale x 16 x float> %1,
550 <vscale x 1 x double> %2,
551 <vscale x 16 x i1> %3,
554 ret <vscale x 1 x double> %a