Revert "[InstCombine] Support gep nuw in icmp folds" (#118698)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfwadd.w.ll
blob8eb2a2c0391b553a01ed1233eb257adff81dc1ba
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,+zvfh \
3 ; RUN:   -verify-machineinstrs -target-abi=ilp32d | FileCheck %s
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zvfh \
5 ; RUN:   -verify-machineinstrs -target-abi=lp64d | FileCheck %s
7 declare <vscale x 1 x float> @llvm.riscv.vfwadd.w.nxv1f32.nxv1f16(
8   <vscale x 1 x float>,
9   <vscale x 1 x float>,
10   <vscale x 1 x half>,
11   iXLen, iXLen);
13 define <vscale x 1 x float> @intrinsic_vfwadd.w_wv_nxv1f32_nxv1f32_nxv1f16(<vscale x 1 x float> %0, <vscale x 1 x half> %1, iXLen %2) nounwind {
14 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_nxv1f32_nxv1f32_nxv1f16:
15 ; CHECK:       # %bb.0: # %entry
16 ; CHECK-NEXT:    fsrmi a1, 0
17 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
18 ; CHECK-NEXT:    vfwadd.wv v8, v8, v9
19 ; CHECK-NEXT:    fsrm a1
20 ; CHECK-NEXT:    ret
21 entry:
22   %a = call <vscale x 1 x float> @llvm.riscv.vfwadd.w.nxv1f32.nxv1f16(
23     <vscale x 1 x float> undef,
24     <vscale x 1 x float> %0,
25     <vscale x 1 x half> %1,
26     iXLen 0, iXLen %2)
28   ret <vscale x 1 x float> %a
31 declare <vscale x 1 x float> @llvm.riscv.vfwadd.w.mask.nxv1f32.nxv1f16(
32   <vscale x 1 x float>,
33   <vscale x 1 x float>,
34   <vscale x 1 x half>,
35   <vscale x 1 x i1>,
36   iXLen, iXLen, iXLen);
38 define <vscale x 1 x float> @intrinsic_vfwadd.w_mask_wv_nxv1f32_nxv1f32_nxv1f16(<vscale x 1 x float> %0, <vscale x 1 x float> %1, <vscale x 1 x half> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
39 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_nxv1f32_nxv1f32_nxv1f16:
40 ; CHECK:       # %bb.0: # %entry
41 ; CHECK-NEXT:    fsrmi a1, 0
42 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
43 ; CHECK-NEXT:    vfwadd.wv v8, v9, v10, v0.t
44 ; CHECK-NEXT:    fsrm a1
45 ; CHECK-NEXT:    ret
46 entry:
47   %a = call <vscale x 1 x float> @llvm.riscv.vfwadd.w.mask.nxv1f32.nxv1f16(
48     <vscale x 1 x float> %0,
49     <vscale x 1 x float> %1,
50     <vscale x 1 x half> %2,
51     <vscale x 1 x i1> %3,
52     iXLen 0, iXLen %4, iXLen 1)
54   ret <vscale x 1 x float> %a
57 declare <vscale x 2 x float> @llvm.riscv.vfwadd.w.nxv2f32.nxv2f16(
58   <vscale x 2 x float>,
59   <vscale x 2 x float>,
60   <vscale x 2 x half>,
61   iXLen, iXLen);
63 define <vscale x 2 x float> @intrinsic_vfwadd.w_wv_nxv2f32_nxv2f32_nxv2f16(<vscale x 2 x float> %0, <vscale x 2 x half> %1, iXLen %2) nounwind {
64 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_nxv2f32_nxv2f32_nxv2f16:
65 ; CHECK:       # %bb.0: # %entry
66 ; CHECK-NEXT:    fsrmi a1, 0
67 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
68 ; CHECK-NEXT:    vfwadd.wv v8, v8, v9
69 ; CHECK-NEXT:    fsrm a1
70 ; CHECK-NEXT:    ret
71 entry:
72   %a = call <vscale x 2 x float> @llvm.riscv.vfwadd.w.nxv2f32.nxv2f16(
73     <vscale x 2 x float> undef,
74     <vscale x 2 x float> %0,
75     <vscale x 2 x half> %1,
76     iXLen 0, iXLen %2)
78   ret <vscale x 2 x float> %a
81 declare <vscale x 2 x float> @llvm.riscv.vfwadd.w.mask.nxv2f32.nxv2f16(
82   <vscale x 2 x float>,
83   <vscale x 2 x float>,
84   <vscale x 2 x half>,
85   <vscale x 2 x i1>,
86   iXLen, iXLen, iXLen);
88 define <vscale x 2 x float> @intrinsic_vfwadd.w_mask_wv_nxv2f32_nxv2f32_nxv2f16(<vscale x 2 x float> %0, <vscale x 2 x float> %1, <vscale x 2 x half> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
89 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_nxv2f32_nxv2f32_nxv2f16:
90 ; CHECK:       # %bb.0: # %entry
91 ; CHECK-NEXT:    fsrmi a1, 0
92 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
93 ; CHECK-NEXT:    vfwadd.wv v8, v9, v10, v0.t
94 ; CHECK-NEXT:    fsrm a1
95 ; CHECK-NEXT:    ret
96 entry:
97   %a = call <vscale x 2 x float> @llvm.riscv.vfwadd.w.mask.nxv2f32.nxv2f16(
98     <vscale x 2 x float> %0,
99     <vscale x 2 x float> %1,
100     <vscale x 2 x half> %2,
101     <vscale x 2 x i1> %3,
102     iXLen 0, iXLen %4, iXLen 1)
104   ret <vscale x 2 x float> %a
107 declare <vscale x 4 x float> @llvm.riscv.vfwadd.w.nxv4f32.nxv4f16(
108   <vscale x 4 x float>,
109   <vscale x 4 x float>,
110   <vscale x 4 x half>,
111   iXLen, iXLen);
113 define <vscale x 4 x float> @intrinsic_vfwadd.w_wv_nxv4f32_nxv4f32_nxv4f16(<vscale x 4 x float> %0, <vscale x 4 x half> %1, iXLen %2) nounwind {
114 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_nxv4f32_nxv4f32_nxv4f16:
115 ; CHECK:       # %bb.0: # %entry
116 ; CHECK-NEXT:    fsrmi a1, 0
117 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
118 ; CHECK-NEXT:    vfwadd.wv v8, v8, v10
119 ; CHECK-NEXT:    fsrm a1
120 ; CHECK-NEXT:    ret
121 entry:
122   %a = call <vscale x 4 x float> @llvm.riscv.vfwadd.w.nxv4f32.nxv4f16(
123     <vscale x 4 x float> undef,
124     <vscale x 4 x float> %0,
125     <vscale x 4 x half> %1,
126     iXLen 0, iXLen %2)
128   ret <vscale x 4 x float> %a
131 declare <vscale x 4 x float> @llvm.riscv.vfwadd.w.mask.nxv4f32.nxv4f16(
132   <vscale x 4 x float>,
133   <vscale x 4 x float>,
134   <vscale x 4 x half>,
135   <vscale x 4 x i1>,
136   iXLen, iXLen, iXLen);
138 define <vscale x 4 x float> @intrinsic_vfwadd.w_mask_wv_nxv4f32_nxv4f32_nxv4f16(<vscale x 4 x float> %0, <vscale x 4 x float> %1, <vscale x 4 x half> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
139 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_nxv4f32_nxv4f32_nxv4f16:
140 ; CHECK:       # %bb.0: # %entry
141 ; CHECK-NEXT:    fsrmi a1, 0
142 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
143 ; CHECK-NEXT:    vfwadd.wv v8, v10, v12, v0.t
144 ; CHECK-NEXT:    fsrm a1
145 ; CHECK-NEXT:    ret
146 entry:
147   %a = call <vscale x 4 x float> @llvm.riscv.vfwadd.w.mask.nxv4f32.nxv4f16(
148     <vscale x 4 x float> %0,
149     <vscale x 4 x float> %1,
150     <vscale x 4 x half> %2,
151     <vscale x 4 x i1> %3,
152     iXLen 0, iXLen %4, iXLen 1)
154   ret <vscale x 4 x float> %a
157 declare <vscale x 8 x float> @llvm.riscv.vfwadd.w.nxv8f32.nxv8f16(
158   <vscale x 8 x float>,
159   <vscale x 8 x float>,
160   <vscale x 8 x half>,
161   iXLen, iXLen);
163 define <vscale x 8 x float> @intrinsic_vfwadd.w_wv_nxv8f32_nxv8f32_nxv8f16(<vscale x 8 x float> %0, <vscale x 8 x half> %1, iXLen %2) nounwind {
164 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_nxv8f32_nxv8f32_nxv8f16:
165 ; CHECK:       # %bb.0: # %entry
166 ; CHECK-NEXT:    fsrmi a1, 0
167 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
168 ; CHECK-NEXT:    vfwadd.wv v8, v8, v12
169 ; CHECK-NEXT:    fsrm a1
170 ; CHECK-NEXT:    ret
171 entry:
172   %a = call <vscale x 8 x float> @llvm.riscv.vfwadd.w.nxv8f32.nxv8f16(
173     <vscale x 8 x float> undef,
174     <vscale x 8 x float> %0,
175     <vscale x 8 x half> %1,
176     iXLen 0, iXLen %2)
178   ret <vscale x 8 x float> %a
181 declare <vscale x 8 x float> @llvm.riscv.vfwadd.w.mask.nxv8f32.nxv8f16(
182   <vscale x 8 x float>,
183   <vscale x 8 x float>,
184   <vscale x 8 x half>,
185   <vscale x 8 x i1>,
186   iXLen, iXLen, iXLen);
188 define <vscale x 8 x float> @intrinsic_vfwadd.w_mask_wv_nxv8f32_nxv8f32_nxv8f16(<vscale x 8 x float> %0, <vscale x 8 x float> %1, <vscale x 8 x half> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
189 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_nxv8f32_nxv8f32_nxv8f16:
190 ; CHECK:       # %bb.0: # %entry
191 ; CHECK-NEXT:    fsrmi a1, 0
192 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
193 ; CHECK-NEXT:    vfwadd.wv v8, v12, v16, v0.t
194 ; CHECK-NEXT:    fsrm a1
195 ; CHECK-NEXT:    ret
196 entry:
197   %a = call <vscale x 8 x float> @llvm.riscv.vfwadd.w.mask.nxv8f32.nxv8f16(
198     <vscale x 8 x float> %0,
199     <vscale x 8 x float> %1,
200     <vscale x 8 x half> %2,
201     <vscale x 8 x i1> %3,
202     iXLen 0, iXLen %4, iXLen 1)
204   ret <vscale x 8 x float> %a
207 declare <vscale x 16 x float> @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16(
208   <vscale x 16 x float>,
209   <vscale x 16 x float>,
210   <vscale x 16 x half>,
211   iXLen, iXLen);
213 define <vscale x 16 x float> @intrinsic_vfwadd.w_wv_nxv16f32_nxv16f32_nxv16f16(<vscale x 16 x float> %0, <vscale x 16 x half> %1, iXLen %2) nounwind {
214 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_nxv16f32_nxv16f32_nxv16f16:
215 ; CHECK:       # %bb.0: # %entry
216 ; CHECK-NEXT:    fsrmi a1, 0
217 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
218 ; CHECK-NEXT:    vfwadd.wv v8, v8, v16
219 ; CHECK-NEXT:    fsrm a1
220 ; CHECK-NEXT:    ret
221 entry:
222   %a = call <vscale x 16 x float> @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16(
223     <vscale x 16 x float> undef,
224     <vscale x 16 x float> %0,
225     <vscale x 16 x half> %1,
226     iXLen 0, iXLen %2)
228   ret <vscale x 16 x float> %a
231 declare <vscale x 16 x float> @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16(
232   <vscale x 16 x float>,
233   <vscale x 16 x float>,
234   <vscale x 16 x half>,
235   <vscale x 16 x i1>,
236   iXLen, iXLen, iXLen);
238 define <vscale x 16 x float> @intrinsic_vfwadd.w_mask_wv_nxv16f32_nxv16f32_nxv16f16(<vscale x 16 x float> %0, <vscale x 16 x float> %1, <vscale x 16 x half> %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
239 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_nxv16f32_nxv16f32_nxv16f16:
240 ; CHECK:       # %bb.0: # %entry
241 ; CHECK-NEXT:    vl4re16.v v24, (a0)
242 ; CHECK-NEXT:    fsrmi a0, 0
243 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, mu
244 ; CHECK-NEXT:    vfwadd.wv v8, v16, v24, v0.t
245 ; CHECK-NEXT:    fsrm a0
246 ; CHECK-NEXT:    ret
247 entry:
248   %a = call <vscale x 16 x float> @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16(
249     <vscale x 16 x float> %0,
250     <vscale x 16 x float> %1,
251     <vscale x 16 x half> %2,
252     <vscale x 16 x i1> %3,
253     iXLen 0, iXLen %4, iXLen 1)
255   ret <vscale x 16 x float> %a
258 declare <vscale x 1 x double> @llvm.riscv.vfwadd.w.nxv1f64.nxv1f32(
259   <vscale x 1 x double>,
260   <vscale x 1 x double>,
261   <vscale x 1 x float>,
262   iXLen, iXLen);
264 define <vscale x 1 x double> @intrinsic_vfwadd.w_wv_nxv1f64_nxv1f64_nxv1f32(<vscale x 1 x double> %0, <vscale x 1 x float> %1, iXLen %2) nounwind {
265 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_nxv1f64_nxv1f64_nxv1f32:
266 ; CHECK:       # %bb.0: # %entry
267 ; CHECK-NEXT:    fsrmi a1, 0
268 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
269 ; CHECK-NEXT:    vfwadd.wv v8, v8, v9
270 ; CHECK-NEXT:    fsrm a1
271 ; CHECK-NEXT:    ret
272 entry:
273   %a = call <vscale x 1 x double> @llvm.riscv.vfwadd.w.nxv1f64.nxv1f32(
274     <vscale x 1 x double> undef,
275     <vscale x 1 x double> %0,
276     <vscale x 1 x float> %1,
277     iXLen 0, iXLen %2)
279   ret <vscale x 1 x double> %a
282 declare <vscale x 1 x double> @llvm.riscv.vfwadd.w.mask.nxv1f64.nxv1f32(
283   <vscale x 1 x double>,
284   <vscale x 1 x double>,
285   <vscale x 1 x float>,
286   <vscale x 1 x i1>,
287   iXLen, iXLen, iXLen);
289 define <vscale x 1 x double> @intrinsic_vfwadd.w_mask_wv_nxv1f64_nxv1f64_nxv1f32(<vscale x 1 x double> %0, <vscale x 1 x double> %1, <vscale x 1 x float> %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
290 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_nxv1f64_nxv1f64_nxv1f32:
291 ; CHECK:       # %bb.0: # %entry
292 ; CHECK-NEXT:    fsrmi a1, 0
293 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
294 ; CHECK-NEXT:    vfwadd.wv v8, v9, v10, v0.t
295 ; CHECK-NEXT:    fsrm a1
296 ; CHECK-NEXT:    ret
297 entry:
298   %a = call <vscale x 1 x double> @llvm.riscv.vfwadd.w.mask.nxv1f64.nxv1f32(
299     <vscale x 1 x double> %0,
300     <vscale x 1 x double> %1,
301     <vscale x 1 x float> %2,
302     <vscale x 1 x i1> %3,
303     iXLen 0, iXLen %4, iXLen 1)
305   ret <vscale x 1 x double> %a
308 declare <vscale x 2 x double> @llvm.riscv.vfwadd.w.nxv2f64.nxv2f32(
309   <vscale x 2 x double>,
310   <vscale x 2 x double>,
311   <vscale x 2 x float>,
312   iXLen, iXLen);
314 define <vscale x 2 x double> @intrinsic_vfwadd.w_wv_nxv2f64_nxv2f64_nxv2f32(<vscale x 2 x double> %0, <vscale x 2 x float> %1, iXLen %2) nounwind {
315 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_nxv2f64_nxv2f64_nxv2f32:
316 ; CHECK:       # %bb.0: # %entry
317 ; CHECK-NEXT:    fsrmi a1, 0
318 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
319 ; CHECK-NEXT:    vfwadd.wv v8, v8, v10
320 ; CHECK-NEXT:    fsrm a1
321 ; CHECK-NEXT:    ret
322 entry:
323   %a = call <vscale x 2 x double> @llvm.riscv.vfwadd.w.nxv2f64.nxv2f32(
324     <vscale x 2 x double> undef,
325     <vscale x 2 x double> %0,
326     <vscale x 2 x float> %1,
327     iXLen 0, iXLen %2)
329   ret <vscale x 2 x double> %a
332 declare <vscale x 2 x double> @llvm.riscv.vfwadd.w.mask.nxv2f64.nxv2f32(
333   <vscale x 2 x double>,
334   <vscale x 2 x double>,
335   <vscale x 2 x float>,
336   <vscale x 2 x i1>,
337   iXLen, iXLen, iXLen);
339 define <vscale x 2 x double> @intrinsic_vfwadd.w_mask_wv_nxv2f64_nxv2f64_nxv2f32(<vscale x 2 x double> %0, <vscale x 2 x double> %1, <vscale x 2 x float> %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
340 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_nxv2f64_nxv2f64_nxv2f32:
341 ; CHECK:       # %bb.0: # %entry
342 ; CHECK-NEXT:    fsrmi a1, 0
343 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
344 ; CHECK-NEXT:    vfwadd.wv v8, v10, v12, v0.t
345 ; CHECK-NEXT:    fsrm a1
346 ; CHECK-NEXT:    ret
347 entry:
348   %a = call <vscale x 2 x double> @llvm.riscv.vfwadd.w.mask.nxv2f64.nxv2f32(
349     <vscale x 2 x double> %0,
350     <vscale x 2 x double> %1,
351     <vscale x 2 x float> %2,
352     <vscale x 2 x i1> %3,
353     iXLen 0, iXLen %4, iXLen 1)
355   ret <vscale x 2 x double> %a
358 declare <vscale x 4 x double> @llvm.riscv.vfwadd.w.nxv4f64.nxv4f32(
359   <vscale x 4 x double>,
360   <vscale x 4 x double>,
361   <vscale x 4 x float>,
362   iXLen, iXLen);
364 define <vscale x 4 x double> @intrinsic_vfwadd.w_wv_nxv4f64_nxv4f64_nxv4f32(<vscale x 4 x double> %0, <vscale x 4 x float> %1, iXLen %2) nounwind {
365 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_nxv4f64_nxv4f64_nxv4f32:
366 ; CHECK:       # %bb.0: # %entry
367 ; CHECK-NEXT:    fsrmi a1, 0
368 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
369 ; CHECK-NEXT:    vfwadd.wv v8, v8, v12
370 ; CHECK-NEXT:    fsrm a1
371 ; CHECK-NEXT:    ret
372 entry:
373   %a = call <vscale x 4 x double> @llvm.riscv.vfwadd.w.nxv4f64.nxv4f32(
374     <vscale x 4 x double> undef,
375     <vscale x 4 x double> %0,
376     <vscale x 4 x float> %1,
377     iXLen 0, iXLen %2)
379   ret <vscale x 4 x double> %a
382 declare <vscale x 4 x double> @llvm.riscv.vfwadd.w.mask.nxv4f64.nxv4f32(
383   <vscale x 4 x double>,
384   <vscale x 4 x double>,
385   <vscale x 4 x float>,
386   <vscale x 4 x i1>,
387   iXLen, iXLen, iXLen);
389 define <vscale x 4 x double> @intrinsic_vfwadd.w_mask_wv_nxv4f64_nxv4f64_nxv4f32(<vscale x 4 x double> %0, <vscale x 4 x double> %1, <vscale x 4 x float> %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
390 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_nxv4f64_nxv4f64_nxv4f32:
391 ; CHECK:       # %bb.0: # %entry
392 ; CHECK-NEXT:    fsrmi a1, 0
393 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
394 ; CHECK-NEXT:    vfwadd.wv v8, v12, v16, v0.t
395 ; CHECK-NEXT:    fsrm a1
396 ; CHECK-NEXT:    ret
397 entry:
398   %a = call <vscale x 4 x double> @llvm.riscv.vfwadd.w.mask.nxv4f64.nxv4f32(
399     <vscale x 4 x double> %0,
400     <vscale x 4 x double> %1,
401     <vscale x 4 x float> %2,
402     <vscale x 4 x i1> %3,
403     iXLen 0, iXLen %4, iXLen 1)
405   ret <vscale x 4 x double> %a
408 declare <vscale x 8 x double> @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32(
409   <vscale x 8 x double>,
410   <vscale x 8 x double>,
411   <vscale x 8 x float>,
412   iXLen, iXLen);
414 define <vscale x 8 x double> @intrinsic_vfwadd.w_wv_nxv8f64_nxv8f64_nxv8f32(<vscale x 8 x double> %0, <vscale x 8 x float> %1, iXLen %2) nounwind {
415 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_nxv8f64_nxv8f64_nxv8f32:
416 ; CHECK:       # %bb.0: # %entry
417 ; CHECK-NEXT:    fsrmi a1, 0
418 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
419 ; CHECK-NEXT:    vfwadd.wv v8, v8, v16
420 ; CHECK-NEXT:    fsrm a1
421 ; CHECK-NEXT:    ret
422 entry:
423   %a = call <vscale x 8 x double> @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32(
424     <vscale x 8 x double> undef,
425     <vscale x 8 x double> %0,
426     <vscale x 8 x float> %1,
427     iXLen 0, iXLen %2)
429   ret <vscale x 8 x double> %a
432 declare <vscale x 8 x double> @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32(
433   <vscale x 8 x double>,
434   <vscale x 8 x double>,
435   <vscale x 8 x float>,
436   <vscale x 8 x i1>,
437   iXLen, iXLen, iXLen);
439 define <vscale x 8 x double> @intrinsic_vfwadd.w_mask_wv_nxv8f64_nxv8f64_nxv8f32(<vscale x 8 x double> %0, <vscale x 8 x double> %1, <vscale x 8 x float> %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
440 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_nxv8f64_nxv8f64_nxv8f32:
441 ; CHECK:       # %bb.0: # %entry
442 ; CHECK-NEXT:    vl4re32.v v24, (a0)
443 ; CHECK-NEXT:    fsrmi a0, 0
444 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, mu
445 ; CHECK-NEXT:    vfwadd.wv v8, v16, v24, v0.t
446 ; CHECK-NEXT:    fsrm a0
447 ; CHECK-NEXT:    ret
448 entry:
449   %a = call <vscale x 8 x double> @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32(
450     <vscale x 8 x double> %0,
451     <vscale x 8 x double> %1,
452     <vscale x 8 x float> %2,
453     <vscale x 8 x i1> %3,
454     iXLen 0, iXLen %4, iXLen 1)
456   ret <vscale x 8 x double> %a
459 declare <vscale x 1 x float> @llvm.riscv.vfwadd.w.nxv1f32.f16(
460   <vscale x 1 x float>,
461   <vscale x 1 x float>,
462   half,
463   iXLen, iXLen);
465 define <vscale x 1 x float> @intrinsic_vfwadd.w_wf_nxv1f32_nxv1f32_f16(<vscale x 1 x float> %0, half %1, iXLen %2) nounwind {
466 ; CHECK-LABEL: intrinsic_vfwadd.w_wf_nxv1f32_nxv1f32_f16:
467 ; CHECK:       # %bb.0: # %entry
468 ; CHECK-NEXT:    fsrmi a1, 0
469 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
470 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0
471 ; CHECK-NEXT:    fsrm a1
472 ; CHECK-NEXT:    ret
473 entry:
474   %a = call <vscale x 1 x float> @llvm.riscv.vfwadd.w.nxv1f32.f16(
475     <vscale x 1 x float> undef,
476     <vscale x 1 x float> %0,
477     half %1,
478     iXLen 0, iXLen %2)
480   ret <vscale x 1 x float> %a
483 declare <vscale x 1 x float> @llvm.riscv.vfwadd.w.mask.nxv1f32.f16(
484   <vscale x 1 x float>,
485   <vscale x 1 x float>,
486   half,
487   <vscale x 1 x i1>,
488   iXLen, iXLen, iXLen);
490 define <vscale x 1 x float> @intrinsic_vfwadd.w_mask_wf_nxv1f32_nxv1f32_f16(<vscale x 1 x float> %0, <vscale x 1 x float> %1, half %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
491 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_nxv1f32_nxv1f32_f16:
492 ; CHECK:       # %bb.0: # %entry
493 ; CHECK-NEXT:    fsrmi a1, 0
494 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
495 ; CHECK-NEXT:    vfwadd.wf v8, v9, fa0, v0.t
496 ; CHECK-NEXT:    fsrm a1
497 ; CHECK-NEXT:    ret
498 entry:
499   %a = call <vscale x 1 x float> @llvm.riscv.vfwadd.w.mask.nxv1f32.f16(
500     <vscale x 1 x float> %0,
501     <vscale x 1 x float> %1,
502     half %2,
503     <vscale x 1 x i1> %3,
504     iXLen 0, iXLen %4, iXLen 1)
506   ret <vscale x 1 x float> %a
509 declare <vscale x 2 x float> @llvm.riscv.vfwadd.w.nxv2f32.f16(
510   <vscale x 2 x float>,
511   <vscale x 2 x float>,
512   half,
513   iXLen, iXLen);
515 define <vscale x 2 x float> @intrinsic_vfwadd.w_wf_nxv2f32_nxv2f32_f16(<vscale x 2 x float> %0, half %1, iXLen %2) nounwind {
516 ; CHECK-LABEL: intrinsic_vfwadd.w_wf_nxv2f32_nxv2f32_f16:
517 ; CHECK:       # %bb.0: # %entry
518 ; CHECK-NEXT:    fsrmi a1, 0
519 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
520 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0
521 ; CHECK-NEXT:    fsrm a1
522 ; CHECK-NEXT:    ret
523 entry:
524   %a = call <vscale x 2 x float> @llvm.riscv.vfwadd.w.nxv2f32.f16(
525     <vscale x 2 x float> undef,
526     <vscale x 2 x float> %0,
527     half %1,
528     iXLen 0, iXLen %2)
530   ret <vscale x 2 x float> %a
533 declare <vscale x 2 x float> @llvm.riscv.vfwadd.w.mask.nxv2f32.f16(
534   <vscale x 2 x float>,
535   <vscale x 2 x float>,
536   half,
537   <vscale x 2 x i1>,
538   iXLen, iXLen, iXLen);
540 define <vscale x 2 x float> @intrinsic_vfwadd.w_mask_wf_nxv2f32_nxv2f32_f16(<vscale x 2 x float> %0, <vscale x 2 x float> %1, half %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
541 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_nxv2f32_nxv2f32_f16:
542 ; CHECK:       # %bb.0: # %entry
543 ; CHECK-NEXT:    fsrmi a1, 0
544 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
545 ; CHECK-NEXT:    vfwadd.wf v8, v9, fa0, v0.t
546 ; CHECK-NEXT:    fsrm a1
547 ; CHECK-NEXT:    ret
548 entry:
549   %a = call <vscale x 2 x float> @llvm.riscv.vfwadd.w.mask.nxv2f32.f16(
550     <vscale x 2 x float> %0,
551     <vscale x 2 x float> %1,
552     half %2,
553     <vscale x 2 x i1> %3,
554     iXLen 0, iXLen %4, iXLen 1)
556   ret <vscale x 2 x float> %a
559 declare <vscale x 4 x float> @llvm.riscv.vfwadd.w.nxv4f32.f16(
560   <vscale x 4 x float>,
561   <vscale x 4 x float>,
562   half,
563   iXLen, iXLen);
565 define <vscale x 4 x float> @intrinsic_vfwadd.w_wf_nxv4f32_nxv4f32_f16(<vscale x 4 x float> %0, half %1, iXLen %2) nounwind {
566 ; CHECK-LABEL: intrinsic_vfwadd.w_wf_nxv4f32_nxv4f32_f16:
567 ; CHECK:       # %bb.0: # %entry
568 ; CHECK-NEXT:    fsrmi a1, 0
569 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
570 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0
571 ; CHECK-NEXT:    fsrm a1
572 ; CHECK-NEXT:    ret
573 entry:
574   %a = call <vscale x 4 x float> @llvm.riscv.vfwadd.w.nxv4f32.f16(
575     <vscale x 4 x float> undef,
576     <vscale x 4 x float> %0,
577     half %1,
578     iXLen 0, iXLen %2)
580   ret <vscale x 4 x float> %a
583 declare <vscale x 4 x float> @llvm.riscv.vfwadd.w.mask.nxv4f32.f16(
584   <vscale x 4 x float>,
585   <vscale x 4 x float>,
586   half,
587   <vscale x 4 x i1>,
588   iXLen, iXLen, iXLen);
590 define <vscale x 4 x float> @intrinsic_vfwadd.w_mask_wf_nxv4f32_nxv4f32_f16(<vscale x 4 x float> %0, <vscale x 4 x float> %1, half %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
591 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_nxv4f32_nxv4f32_f16:
592 ; CHECK:       # %bb.0: # %entry
593 ; CHECK-NEXT:    fsrmi a1, 0
594 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
595 ; CHECK-NEXT:    vfwadd.wf v8, v10, fa0, v0.t
596 ; CHECK-NEXT:    fsrm a1
597 ; CHECK-NEXT:    ret
598 entry:
599   %a = call <vscale x 4 x float> @llvm.riscv.vfwadd.w.mask.nxv4f32.f16(
600     <vscale x 4 x float> %0,
601     <vscale x 4 x float> %1,
602     half %2,
603     <vscale x 4 x i1> %3,
604     iXLen 0, iXLen %4, iXLen 1)
606   ret <vscale x 4 x float> %a
609 declare <vscale x 8 x float> @llvm.riscv.vfwadd.w.nxv8f32.f16(
610   <vscale x 8 x float>,
611   <vscale x 8 x float>,
612   half,
613   iXLen, iXLen);
615 define <vscale x 8 x float> @intrinsic_vfwadd.w_wf_nxv8f32_nxv8f32_f16(<vscale x 8 x float> %0, half %1, iXLen %2) nounwind {
616 ; CHECK-LABEL: intrinsic_vfwadd.w_wf_nxv8f32_nxv8f32_f16:
617 ; CHECK:       # %bb.0: # %entry
618 ; CHECK-NEXT:    fsrmi a1, 0
619 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
620 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0
621 ; CHECK-NEXT:    fsrm a1
622 ; CHECK-NEXT:    ret
623 entry:
624   %a = call <vscale x 8 x float> @llvm.riscv.vfwadd.w.nxv8f32.f16(
625     <vscale x 8 x float> undef,
626     <vscale x 8 x float> %0,
627     half %1,
628     iXLen 0, iXLen %2)
630   ret <vscale x 8 x float> %a
633 declare <vscale x 8 x float> @llvm.riscv.vfwadd.w.mask.nxv8f32.f16(
634   <vscale x 8 x float>,
635   <vscale x 8 x float>,
636   half,
637   <vscale x 8 x i1>,
638   iXLen, iXLen, iXLen);
640 define <vscale x 8 x float> @intrinsic_vfwadd.w_mask_wf_nxv8f32_nxv8f32_f16(<vscale x 8 x float> %0, <vscale x 8 x float> %1, half %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
641 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_nxv8f32_nxv8f32_f16:
642 ; CHECK:       # %bb.0: # %entry
643 ; CHECK-NEXT:    fsrmi a1, 0
644 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
645 ; CHECK-NEXT:    vfwadd.wf v8, v12, fa0, v0.t
646 ; CHECK-NEXT:    fsrm a1
647 ; CHECK-NEXT:    ret
648 entry:
649   %a = call <vscale x 8 x float> @llvm.riscv.vfwadd.w.mask.nxv8f32.f16(
650     <vscale x 8 x float> %0,
651     <vscale x 8 x float> %1,
652     half %2,
653     <vscale x 8 x i1> %3,
654     iXLen 0, iXLen %4, iXLen 1)
656   ret <vscale x 8 x float> %a
659 declare <vscale x 16 x float> @llvm.riscv.vfwadd.w.nxv16f32.f16(
660   <vscale x 16 x float>,
661   <vscale x 16 x float>,
662   half,
663   iXLen, iXLen);
665 define <vscale x 16 x float> @intrinsic_vfwadd.w_wf_nxv16f32_nxv16f32_f16(<vscale x 16 x float> %0, half %1, iXLen %2) nounwind {
666 ; CHECK-LABEL: intrinsic_vfwadd.w_wf_nxv16f32_nxv16f32_f16:
667 ; CHECK:       # %bb.0: # %entry
668 ; CHECK-NEXT:    fsrmi a1, 0
669 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
670 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0
671 ; CHECK-NEXT:    fsrm a1
672 ; CHECK-NEXT:    ret
673 entry:
674   %a = call <vscale x 16 x float> @llvm.riscv.vfwadd.w.nxv16f32.f16(
675     <vscale x 16 x float> undef,
676     <vscale x 16 x float> %0,
677     half %1,
678     iXLen 0, iXLen %2)
680   ret <vscale x 16 x float> %a
683 declare <vscale x 16 x float> @llvm.riscv.vfwadd.w.mask.nxv16f32.f16(
684   <vscale x 16 x float>,
685   <vscale x 16 x float>,
686   half,
687   <vscale x 16 x i1>,
688   iXLen, iXLen, iXLen);
690 define <vscale x 16 x float> @intrinsic_vfwadd.w_mask_wf_nxv16f32_nxv16f32_f16(<vscale x 16 x float> %0, <vscale x 16 x float> %1, half %2, <vscale x 16 x i1> %3, iXLen %4) nounwind {
691 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_nxv16f32_nxv16f32_f16:
692 ; CHECK:       # %bb.0: # %entry
693 ; CHECK-NEXT:    fsrmi a1, 0
694 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
695 ; CHECK-NEXT:    vfwadd.wf v8, v16, fa0, v0.t
696 ; CHECK-NEXT:    fsrm a1
697 ; CHECK-NEXT:    ret
698 entry:
699   %a = call <vscale x 16 x float> @llvm.riscv.vfwadd.w.mask.nxv16f32.f16(
700     <vscale x 16 x float> %0,
701     <vscale x 16 x float> %1,
702     half %2,
703     <vscale x 16 x i1> %3,
704     iXLen 0, iXLen %4, iXLen 1)
706   ret <vscale x 16 x float> %a
709 declare <vscale x 1 x double> @llvm.riscv.vfwadd.w.nxv1f64.f32(
710   <vscale x 1 x double>,
711   <vscale x 1 x double>,
712   float,
713   iXLen, iXLen);
715 define <vscale x 1 x double> @intrinsic_vfwadd.w_wf_nxv1f64_nxv1f64_f32(<vscale x 1 x double> %0, float %1, iXLen %2) nounwind {
716 ; CHECK-LABEL: intrinsic_vfwadd.w_wf_nxv1f64_nxv1f64_f32:
717 ; CHECK:       # %bb.0: # %entry
718 ; CHECK-NEXT:    fsrmi a1, 0
719 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
720 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0
721 ; CHECK-NEXT:    fsrm a1
722 ; CHECK-NEXT:    ret
723 entry:
724   %a = call <vscale x 1 x double> @llvm.riscv.vfwadd.w.nxv1f64.f32(
725     <vscale x 1 x double> undef,
726     <vscale x 1 x double> %0,
727     float %1,
728     iXLen 0, iXLen %2)
730   ret <vscale x 1 x double> %a
733 declare <vscale x 1 x double> @llvm.riscv.vfwadd.w.mask.nxv1f64.f32(
734   <vscale x 1 x double>,
735   <vscale x 1 x double>,
736   float,
737   <vscale x 1 x i1>,
738   iXLen, iXLen, iXLen);
740 define <vscale x 1 x double> @intrinsic_vfwadd.w_mask_wf_nxv1f64_nxv1f64_f32(<vscale x 1 x double> %0, <vscale x 1 x double> %1, float %2, <vscale x 1 x i1> %3, iXLen %4) nounwind {
741 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_nxv1f64_nxv1f64_f32:
742 ; CHECK:       # %bb.0: # %entry
743 ; CHECK-NEXT:    fsrmi a1, 0
744 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
745 ; CHECK-NEXT:    vfwadd.wf v8, v9, fa0, v0.t
746 ; CHECK-NEXT:    fsrm a1
747 ; CHECK-NEXT:    ret
748 entry:
749   %a = call <vscale x 1 x double> @llvm.riscv.vfwadd.w.mask.nxv1f64.f32(
750     <vscale x 1 x double> %0,
751     <vscale x 1 x double> %1,
752     float %2,
753     <vscale x 1 x i1> %3,
754     iXLen 0, iXLen %4, iXLen 1)
756   ret <vscale x 1 x double> %a
759 declare <vscale x 2 x double> @llvm.riscv.vfwadd.w.nxv2f64.f32(
760   <vscale x 2 x double>,
761   <vscale x 2 x double>,
762   float,
763   iXLen, iXLen);
765 define <vscale x 2 x double> @intrinsic_vfwadd.w_wf_nxv2f64_nxv2f64_f32(<vscale x 2 x double> %0, float %1, iXLen %2) nounwind {
766 ; CHECK-LABEL: intrinsic_vfwadd.w_wf_nxv2f64_nxv2f64_f32:
767 ; CHECK:       # %bb.0: # %entry
768 ; CHECK-NEXT:    fsrmi a1, 0
769 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
770 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0
771 ; CHECK-NEXT:    fsrm a1
772 ; CHECK-NEXT:    ret
773 entry:
774   %a = call <vscale x 2 x double> @llvm.riscv.vfwadd.w.nxv2f64.f32(
775     <vscale x 2 x double> undef,
776     <vscale x 2 x double> %0,
777     float %1,
778     iXLen 0, iXLen %2)
780   ret <vscale x 2 x double> %a
783 declare <vscale x 2 x double> @llvm.riscv.vfwadd.w.mask.nxv2f64.f32(
784   <vscale x 2 x double>,
785   <vscale x 2 x double>,
786   float,
787   <vscale x 2 x i1>,
788   iXLen, iXLen, iXLen);
790 define <vscale x 2 x double> @intrinsic_vfwadd.w_mask_wf_nxv2f64_nxv2f64_f32(<vscale x 2 x double> %0, <vscale x 2 x double> %1, float %2, <vscale x 2 x i1> %3, iXLen %4) nounwind {
791 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_nxv2f64_nxv2f64_f32:
792 ; CHECK:       # %bb.0: # %entry
793 ; CHECK-NEXT:    fsrmi a1, 0
794 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
795 ; CHECK-NEXT:    vfwadd.wf v8, v10, fa0, v0.t
796 ; CHECK-NEXT:    fsrm a1
797 ; CHECK-NEXT:    ret
798 entry:
799   %a = call <vscale x 2 x double> @llvm.riscv.vfwadd.w.mask.nxv2f64.f32(
800     <vscale x 2 x double> %0,
801     <vscale x 2 x double> %1,
802     float %2,
803     <vscale x 2 x i1> %3,
804     iXLen 0, iXLen %4, iXLen 1)
806   ret <vscale x 2 x double> %a
809 declare <vscale x 4 x double> @llvm.riscv.vfwadd.w.nxv4f64.f32(
810   <vscale x 4 x double>,
811   <vscale x 4 x double>,
812   float,
813   iXLen, iXLen);
815 define <vscale x 4 x double> @intrinsic_vfwadd.w_wf_nxv4f64_nxv4f64_f32(<vscale x 4 x double> %0, float %1, iXLen %2) nounwind {
816 ; CHECK-LABEL: intrinsic_vfwadd.w_wf_nxv4f64_nxv4f64_f32:
817 ; CHECK:       # %bb.0: # %entry
818 ; CHECK-NEXT:    fsrmi a1, 0
819 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
820 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0
821 ; CHECK-NEXT:    fsrm a1
822 ; CHECK-NEXT:    ret
823 entry:
824   %a = call <vscale x 4 x double> @llvm.riscv.vfwadd.w.nxv4f64.f32(
825     <vscale x 4 x double> undef,
826     <vscale x 4 x double> %0,
827     float %1,
828     iXLen 0, iXLen %2)
830   ret <vscale x 4 x double> %a
833 declare <vscale x 4 x double> @llvm.riscv.vfwadd.w.mask.nxv4f64.f32(
834   <vscale x 4 x double>,
835   <vscale x 4 x double>,
836   float,
837   <vscale x 4 x i1>,
838   iXLen, iXLen, iXLen);
840 define <vscale x 4 x double> @intrinsic_vfwadd.w_mask_wf_nxv4f64_nxv4f64_f32(<vscale x 4 x double> %0, <vscale x 4 x double> %1, float %2, <vscale x 4 x i1> %3, iXLen %4) nounwind {
841 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_nxv4f64_nxv4f64_f32:
842 ; CHECK:       # %bb.0: # %entry
843 ; CHECK-NEXT:    fsrmi a1, 0
844 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
845 ; CHECK-NEXT:    vfwadd.wf v8, v12, fa0, v0.t
846 ; CHECK-NEXT:    fsrm a1
847 ; CHECK-NEXT:    ret
848 entry:
849   %a = call <vscale x 4 x double> @llvm.riscv.vfwadd.w.mask.nxv4f64.f32(
850     <vscale x 4 x double> %0,
851     <vscale x 4 x double> %1,
852     float %2,
853     <vscale x 4 x i1> %3,
854     iXLen 0, iXLen %4, iXLen 1)
856   ret <vscale x 4 x double> %a
859 declare <vscale x 8 x double> @llvm.riscv.vfwadd.w.nxv8f64.f32(
860   <vscale x 8 x double>,
861   <vscale x 8 x double>,
862   float,
863   iXLen, iXLen);
865 define <vscale x 8 x double> @intrinsic_vfwadd.w_wf_nxv8f64_nxv8f64_f32(<vscale x 8 x double> %0, float %1, iXLen %2) nounwind {
866 ; CHECK-LABEL: intrinsic_vfwadd.w_wf_nxv8f64_nxv8f64_f32:
867 ; CHECK:       # %bb.0: # %entry
868 ; CHECK-NEXT:    fsrmi a1, 0
869 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
870 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0
871 ; CHECK-NEXT:    fsrm a1
872 ; CHECK-NEXT:    ret
873 entry:
874   %a = call <vscale x 8 x double> @llvm.riscv.vfwadd.w.nxv8f64.f32(
875     <vscale x 8 x double> undef,
876     <vscale x 8 x double> %0,
877     float %1,
878     iXLen 0, iXLen %2)
880   ret <vscale x 8 x double> %a
883 declare <vscale x 8 x double> @llvm.riscv.vfwadd.w.mask.nxv8f64.f32(
884   <vscale x 8 x double>,
885   <vscale x 8 x double>,
886   float,
887   <vscale x 8 x i1>,
888   iXLen, iXLen, iXLen);
890 define <vscale x 8 x double> @intrinsic_vfwadd.w_mask_wf_nxv8f64_nxv8f64_f32(<vscale x 8 x double> %0, <vscale x 8 x double> %1, float %2, <vscale x 8 x i1> %3, iXLen %4) nounwind {
891 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_nxv8f64_nxv8f64_f32:
892 ; CHECK:       # %bb.0: # %entry
893 ; CHECK-NEXT:    fsrmi a1, 0
894 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
895 ; CHECK-NEXT:    vfwadd.wf v8, v16, fa0, v0.t
896 ; CHECK-NEXT:    fsrm a1
897 ; CHECK-NEXT:    ret
898 entry:
899   %a = call <vscale x 8 x double> @llvm.riscv.vfwadd.w.mask.nxv8f64.f32(
900     <vscale x 8 x double> %0,
901     <vscale x 8 x double> %1,
902     float %2,
903     <vscale x 8 x i1> %3,
904     iXLen 0, iXLen %4, iXLen 1)
906   ret <vscale x 8 x double> %a
909 define <vscale x 1 x float> @intrinsic_vfwadd.w_mask_wv_tie_nxv1f32_nxv1f32_nxv1f16(<vscale x 1 x float> %0, <vscale x 1 x half> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
910 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv1f32_nxv1f32_nxv1f16:
911 ; CHECK:       # %bb.0: # %entry
912 ; CHECK-NEXT:    fsrmi a1, 0
913 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
914 ; CHECK-NEXT:    vfwadd.wv v8, v8, v9, v0.t
915 ; CHECK-NEXT:    fsrm a1
916 ; CHECK-NEXT:    ret
917 entry:
918   %a = call <vscale x 1 x float> @llvm.riscv.vfwadd.w.mask.nxv1f32.nxv1f16(
919     <vscale x 1 x float> %0,
920     <vscale x 1 x float> %0,
921     <vscale x 1 x half> %1,
922     <vscale x 1 x i1> %2,
923     iXLen 0, iXLen %3, iXLen 1)
925   ret <vscale x 1 x float> %a
928 define <vscale x 2 x float> @intrinsic_vfwadd.w_mask_wv_tie_nxv2f32_nxv2f32_nxv2f16(<vscale x 2 x float> %0, <vscale x 2 x half> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
929 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv2f32_nxv2f32_nxv2f16:
930 ; CHECK:       # %bb.0: # %entry
931 ; CHECK-NEXT:    fsrmi a1, 0
932 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
933 ; CHECK-NEXT:    vfwadd.wv v8, v8, v9, v0.t
934 ; CHECK-NEXT:    fsrm a1
935 ; CHECK-NEXT:    ret
936 entry:
937   %a = call <vscale x 2 x float> @llvm.riscv.vfwadd.w.mask.nxv2f32.nxv2f16(
938     <vscale x 2 x float> %0,
939     <vscale x 2 x float> %0,
940     <vscale x 2 x half> %1,
941     <vscale x 2 x i1> %2,
942     iXLen 0, iXLen %3, iXLen 1)
944   ret <vscale x 2 x float> %a
947 define <vscale x 4 x float> @intrinsic_vfwadd.w_mask_wv_tie_nxv4f32_nxv4f32_nxv4f16(<vscale x 4 x float> %0, <vscale x 4 x half> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
948 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv4f32_nxv4f32_nxv4f16:
949 ; CHECK:       # %bb.0: # %entry
950 ; CHECK-NEXT:    fsrmi a1, 0
951 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
952 ; CHECK-NEXT:    vfwadd.wv v8, v8, v10, v0.t
953 ; CHECK-NEXT:    fsrm a1
954 ; CHECK-NEXT:    ret
955 entry:
956   %a = call <vscale x 4 x float> @llvm.riscv.vfwadd.w.mask.nxv4f32.nxv4f16(
957     <vscale x 4 x float> %0,
958     <vscale x 4 x float> %0,
959     <vscale x 4 x half> %1,
960     <vscale x 4 x i1> %2,
961     iXLen 0, iXLen %3, iXLen 1)
963   ret <vscale x 4 x float> %a
966 define <vscale x 8 x float> @intrinsic_vfwadd.w_mask_wv_tie_nxv8f32_nxv8f32_nxv8f16(<vscale x 8 x float> %0, <vscale x 8 x half> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
967 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv8f32_nxv8f32_nxv8f16:
968 ; CHECK:       # %bb.0: # %entry
969 ; CHECK-NEXT:    fsrmi a1, 0
970 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
971 ; CHECK-NEXT:    vfwadd.wv v8, v8, v12, v0.t
972 ; CHECK-NEXT:    fsrm a1
973 ; CHECK-NEXT:    ret
974 entry:
975   %a = call <vscale x 8 x float> @llvm.riscv.vfwadd.w.mask.nxv8f32.nxv8f16(
976     <vscale x 8 x float> %0,
977     <vscale x 8 x float> %0,
978     <vscale x 8 x half> %1,
979     <vscale x 8 x i1> %2,
980     iXLen 0, iXLen %3, iXLen 1)
982   ret <vscale x 8 x float> %a
985 define <vscale x 16 x float> @intrinsic_vfwadd.w_mask_wv_tie_nxv16f32_nxv16f32_nxv16f16(<vscale x 16 x float> %0, <vscale x 16 x half> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind {
986 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv16f32_nxv16f32_nxv16f16:
987 ; CHECK:       # %bb.0: # %entry
988 ; CHECK-NEXT:    fsrmi a1, 0
989 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
990 ; CHECK-NEXT:    vfwadd.wv v8, v8, v16, v0.t
991 ; CHECK-NEXT:    fsrm a1
992 ; CHECK-NEXT:    ret
993 entry:
994   %a = call <vscale x 16 x float> @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16(
995     <vscale x 16 x float> %0,
996     <vscale x 16 x float> %0,
997     <vscale x 16 x half> %1,
998     <vscale x 16 x i1> %2,
999     iXLen 0, iXLen %3, iXLen 1)
1001   ret <vscale x 16 x float> %a
1004 define <vscale x 1 x double> @intrinsic_vfwadd.w_mask_wv_tie_nxv1f64_nxv1f64_nxv1f32(<vscale x 1 x double> %0, <vscale x 1 x float> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
1005 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv1f64_nxv1f64_nxv1f32:
1006 ; CHECK:       # %bb.0: # %entry
1007 ; CHECK-NEXT:    fsrmi a1, 0
1008 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
1009 ; CHECK-NEXT:    vfwadd.wv v8, v8, v9, v0.t
1010 ; CHECK-NEXT:    fsrm a1
1011 ; CHECK-NEXT:    ret
1012 entry:
1013   %a = call <vscale x 1 x double> @llvm.riscv.vfwadd.w.mask.nxv1f64.nxv1f32(
1014     <vscale x 1 x double> %0,
1015     <vscale x 1 x double> %0,
1016     <vscale x 1 x float> %1,
1017     <vscale x 1 x i1> %2,
1018     iXLen 0, iXLen %3, iXLen 1)
1020   ret <vscale x 1 x double> %a
1023 define <vscale x 2 x double> @intrinsic_vfwadd.w_mask_wv_tie_nxv2f64_nxv2f64_nxv2f32(<vscale x 2 x double> %0, <vscale x 2 x float> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
1024 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv2f64_nxv2f64_nxv2f32:
1025 ; CHECK:       # %bb.0: # %entry
1026 ; CHECK-NEXT:    fsrmi a1, 0
1027 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
1028 ; CHECK-NEXT:    vfwadd.wv v8, v8, v10, v0.t
1029 ; CHECK-NEXT:    fsrm a1
1030 ; CHECK-NEXT:    ret
1031 entry:
1032   %a = call <vscale x 2 x double> @llvm.riscv.vfwadd.w.mask.nxv2f64.nxv2f32(
1033     <vscale x 2 x double> %0,
1034     <vscale x 2 x double> %0,
1035     <vscale x 2 x float> %1,
1036     <vscale x 2 x i1> %2,
1037     iXLen 0, iXLen %3, iXLen 1)
1039   ret <vscale x 2 x double> %a
1042 define <vscale x 4 x double> @intrinsic_vfwadd.w_mask_wv_tie_nxv4f64_nxv4f64_nxv4f32(<vscale x 4 x double> %0, <vscale x 4 x float> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
1043 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv4f64_nxv4f64_nxv4f32:
1044 ; CHECK:       # %bb.0: # %entry
1045 ; CHECK-NEXT:    fsrmi a1, 0
1046 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
1047 ; CHECK-NEXT:    vfwadd.wv v8, v8, v12, v0.t
1048 ; CHECK-NEXT:    fsrm a1
1049 ; CHECK-NEXT:    ret
1050 entry:
1051   %a = call <vscale x 4 x double> @llvm.riscv.vfwadd.w.mask.nxv4f64.nxv4f32(
1052     <vscale x 4 x double> %0,
1053     <vscale x 4 x double> %0,
1054     <vscale x 4 x float> %1,
1055     <vscale x 4 x i1> %2,
1056     iXLen 0, iXLen %3, iXLen 1)
1058   ret <vscale x 4 x double> %a
1061 define <vscale x 8 x double> @intrinsic_vfwadd.w_mask_wv_tie_nxv8f64_nxv8f64_nxv8f32(<vscale x 8 x double> %0, <vscale x 8 x float> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
1062 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wv_tie_nxv8f64_nxv8f64_nxv8f32:
1063 ; CHECK:       # %bb.0: # %entry
1064 ; CHECK-NEXT:    fsrmi a1, 0
1065 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1066 ; CHECK-NEXT:    vfwadd.wv v8, v8, v16, v0.t
1067 ; CHECK-NEXT:    fsrm a1
1068 ; CHECK-NEXT:    ret
1069 entry:
1070   %a = call <vscale x 8 x double> @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32(
1071     <vscale x 8 x double> %0,
1072     <vscale x 8 x double> %0,
1073     <vscale x 8 x float> %1,
1074     <vscale x 8 x i1> %2,
1075     iXLen 0, iXLen %3, iXLen 1)
1077   ret <vscale x 8 x double> %a
1080 define <vscale x 1 x float> @intrinsic_vfwadd.w_mask_wf_tie_nxv1f32_nxv1f32_f16(<vscale x 1 x float> %0, half %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
1081 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_tie_nxv1f32_nxv1f32_f16:
1082 ; CHECK:       # %bb.0: # %entry
1083 ; CHECK-NEXT:    fsrmi a1, 0
1084 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
1085 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0, v0.t
1086 ; CHECK-NEXT:    fsrm a1
1087 ; CHECK-NEXT:    ret
1088 entry:
1089   %a = call <vscale x 1 x float> @llvm.riscv.vfwadd.w.mask.nxv1f32.f16(
1090     <vscale x 1 x float> %0,
1091     <vscale x 1 x float> %0,
1092     half %1,
1093     <vscale x 1 x i1> %2,
1094     iXLen 0, iXLen %3, iXLen 1)
1096   ret <vscale x 1 x float> %a
1099 define <vscale x 2 x float> @intrinsic_vfwadd.w_mask_wf_tie_nxv2f32_nxv2f32_f16(<vscale x 2 x float> %0, half %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
1100 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_tie_nxv2f32_nxv2f32_f16:
1101 ; CHECK:       # %bb.0: # %entry
1102 ; CHECK-NEXT:    fsrmi a1, 0
1103 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
1104 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0, v0.t
1105 ; CHECK-NEXT:    fsrm a1
1106 ; CHECK-NEXT:    ret
1107 entry:
1108   %a = call <vscale x 2 x float> @llvm.riscv.vfwadd.w.mask.nxv2f32.f16(
1109     <vscale x 2 x float> %0,
1110     <vscale x 2 x float> %0,
1111     half %1,
1112     <vscale x 2 x i1> %2,
1113     iXLen 0, iXLen %3, iXLen 1)
1115   ret <vscale x 2 x float> %a
1118 define <vscale x 4 x float> @intrinsic_vfwadd.w_mask_wf_tie_nxv4f32_nxv4f32_f16(<vscale x 4 x float> %0, half %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
1119 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_tie_nxv4f32_nxv4f32_f16:
1120 ; CHECK:       # %bb.0: # %entry
1121 ; CHECK-NEXT:    fsrmi a1, 0
1122 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
1123 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0, v0.t
1124 ; CHECK-NEXT:    fsrm a1
1125 ; CHECK-NEXT:    ret
1126 entry:
1127   %a = call <vscale x 4 x float> @llvm.riscv.vfwadd.w.mask.nxv4f32.f16(
1128     <vscale x 4 x float> %0,
1129     <vscale x 4 x float> %0,
1130     half %1,
1131     <vscale x 4 x i1> %2,
1132     iXLen 0, iXLen %3, iXLen 1)
1134   ret <vscale x 4 x float> %a
1137 define <vscale x 8 x float> @intrinsic_vfwadd.w_mask_wf_tie_nxv8f32_nxv8f32_f16(<vscale x 8 x float> %0, half %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
1138 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_tie_nxv8f32_nxv8f32_f16:
1139 ; CHECK:       # %bb.0: # %entry
1140 ; CHECK-NEXT:    fsrmi a1, 0
1141 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
1142 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0, v0.t
1143 ; CHECK-NEXT:    fsrm a1
1144 ; CHECK-NEXT:    ret
1145 entry:
1146   %a = call <vscale x 8 x float> @llvm.riscv.vfwadd.w.mask.nxv8f32.f16(
1147     <vscale x 8 x float> %0,
1148     <vscale x 8 x float> %0,
1149     half %1,
1150     <vscale x 8 x i1> %2,
1151     iXLen 0, iXLen %3, iXLen 1)
1153   ret <vscale x 8 x float> %a
1156 define <vscale x 16 x float> @intrinsic_vfwadd.w_mask_wf_tie_nxv16f32_nxv16f32_f16(<vscale x 16 x float> %0, half %1, <vscale x 16 x i1> %2, iXLen %3) nounwind {
1157 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_tie_nxv16f32_nxv16f32_f16:
1158 ; CHECK:       # %bb.0: # %entry
1159 ; CHECK-NEXT:    fsrmi a1, 0
1160 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
1161 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0, v0.t
1162 ; CHECK-NEXT:    fsrm a1
1163 ; CHECK-NEXT:    ret
1164 entry:
1165   %a = call <vscale x 16 x float> @llvm.riscv.vfwadd.w.mask.nxv16f32.f16(
1166     <vscale x 16 x float> %0,
1167     <vscale x 16 x float> %0,
1168     half %1,
1169     <vscale x 16 x i1> %2,
1170     iXLen 0, iXLen %3, iXLen 1)
1172   ret <vscale x 16 x float> %a
1175 define <vscale x 1 x double> @intrinsic_vfwadd.w_mask_wf_tie_nxv1f64_nxv1f64_f32(<vscale x 1 x double> %0, float %1, <vscale x 1 x i1> %2, iXLen %3) nounwind {
1176 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_tie_nxv1f64_nxv1f64_f32:
1177 ; CHECK:       # %bb.0: # %entry
1178 ; CHECK-NEXT:    fsrmi a1, 0
1179 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
1180 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0, v0.t
1181 ; CHECK-NEXT:    fsrm a1
1182 ; CHECK-NEXT:    ret
1183 entry:
1184   %a = call <vscale x 1 x double> @llvm.riscv.vfwadd.w.mask.nxv1f64.f32(
1185     <vscale x 1 x double> %0,
1186     <vscale x 1 x double> %0,
1187     float %1,
1188     <vscale x 1 x i1> %2,
1189     iXLen 0, iXLen %3, iXLen 1)
1191   ret <vscale x 1 x double> %a
1194 define <vscale x 2 x double> @intrinsic_vfwadd.w_mask_wf_tie_nxv2f64_nxv2f64_f32(<vscale x 2 x double> %0, float %1, <vscale x 2 x i1> %2, iXLen %3) nounwind {
1195 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_tie_nxv2f64_nxv2f64_f32:
1196 ; CHECK:       # %bb.0: # %entry
1197 ; CHECK-NEXT:    fsrmi a1, 0
1198 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
1199 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0, v0.t
1200 ; CHECK-NEXT:    fsrm a1
1201 ; CHECK-NEXT:    ret
1202 entry:
1203   %a = call <vscale x 2 x double> @llvm.riscv.vfwadd.w.mask.nxv2f64.f32(
1204     <vscale x 2 x double> %0,
1205     <vscale x 2 x double> %0,
1206     float %1,
1207     <vscale x 2 x i1> %2,
1208     iXLen 0, iXLen %3, iXLen 1)
1210   ret <vscale x 2 x double> %a
1213 define <vscale x 4 x double> @intrinsic_vfwadd.w_mask_wf_tie_nxv4f64_nxv4f64_f32(<vscale x 4 x double> %0, float %1, <vscale x 4 x i1> %2, iXLen %3) nounwind {
1214 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_tie_nxv4f64_nxv4f64_f32:
1215 ; CHECK:       # %bb.0: # %entry
1216 ; CHECK-NEXT:    fsrmi a1, 0
1217 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
1218 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0, v0.t
1219 ; CHECK-NEXT:    fsrm a1
1220 ; CHECK-NEXT:    ret
1221 entry:
1222   %a = call <vscale x 4 x double> @llvm.riscv.vfwadd.w.mask.nxv4f64.f32(
1223     <vscale x 4 x double> %0,
1224     <vscale x 4 x double> %0,
1225     float %1,
1226     <vscale x 4 x i1> %2,
1227     iXLen 0, iXLen %3, iXLen 1)
1229   ret <vscale x 4 x double> %a
1232 define <vscale x 8 x double> @intrinsic_vfwadd.w_mask_wf_tie_nxv8f64_nxv8f64_f32(<vscale x 8 x double> %0, float %1, <vscale x 8 x i1> %2, iXLen %3) nounwind {
1233 ; CHECK-LABEL: intrinsic_vfwadd.w_mask_wf_tie_nxv8f64_nxv8f64_f32:
1234 ; CHECK:       # %bb.0: # %entry
1235 ; CHECK-NEXT:    fsrmi a1, 0
1236 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
1237 ; CHECK-NEXT:    vfwadd.wf v8, v8, fa0, v0.t
1238 ; CHECK-NEXT:    fsrm a1
1239 ; CHECK-NEXT:    ret
1240 entry:
1241   %a = call <vscale x 8 x double> @llvm.riscv.vfwadd.w.mask.nxv8f64.f32(
1242     <vscale x 8 x double> %0,
1243     <vscale x 8 x double> %0,
1244     float %1,
1245     <vscale x 8 x i1> %2,
1246     iXLen 0, iXLen %3, iXLen 1)
1248   ret <vscale x 8 x double> %a
1251 define <vscale x 1 x float> @intrinsic_vfwadd.w_wv_untie_nxv1f32_nxv1f32_nxv1f16(<vscale x 1 x half> %0, <vscale x 1 x float> %1, iXLen %2) nounwind {
1252 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_untie_nxv1f32_nxv1f32_nxv1f16:
1253 ; CHECK:       # %bb.0: # %entry
1254 ; CHECK-NEXT:    fsrmi a1, 0
1255 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1256 ; CHECK-NEXT:    vfwadd.wv v10, v9, v8
1257 ; CHECK-NEXT:    fsrm a1
1258 ; CHECK-NEXT:    vmv1r.v v8, v10
1259 ; CHECK-NEXT:    ret
1260 entry:
1261   %a = call <vscale x 1 x float> @llvm.riscv.vfwadd.w.nxv1f32.nxv1f16(
1262     <vscale x 1 x float> undef,
1263     <vscale x 1 x float> %1,
1264     <vscale x 1 x half> %0,
1265     iXLen 0, iXLen %2)
1267   ret <vscale x 1 x float> %a
1270 define <vscale x 2 x float> @intrinsic_vfwadd.w_wv_untie_nxv2f32_nxv2f32_nxv2f16(<vscale x 2 x half> %0, <vscale x 2 x float> %1, iXLen %2) nounwind {
1271 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_untie_nxv2f32_nxv2f32_nxv2f16:
1272 ; CHECK:       # %bb.0: # %entry
1273 ; CHECK-NEXT:    fsrmi a1, 0
1274 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1275 ; CHECK-NEXT:    vfwadd.wv v10, v9, v8
1276 ; CHECK-NEXT:    fsrm a1
1277 ; CHECK-NEXT:    vmv1r.v v8, v10
1278 ; CHECK-NEXT:    ret
1279 entry:
1280   %a = call <vscale x 2 x float> @llvm.riscv.vfwadd.w.nxv2f32.nxv2f16(
1281     <vscale x 2 x float> undef,
1282     <vscale x 2 x float> %1,
1283     <vscale x 2 x half> %0,
1284     iXLen 0, iXLen %2)
1286   ret <vscale x 2 x float> %a
1289 define <vscale x 4 x float> @intrinsic_vfwadd.w_wv_untie_nxv4f32_nxv4f32_nxv4f16(<vscale x 4 x half> %0, <vscale x 4 x float> %1, iXLen %2) nounwind {
1290 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_untie_nxv4f32_nxv4f32_nxv4f16:
1291 ; CHECK:       # %bb.0: # %entry
1292 ; CHECK-NEXT:    fsrmi a1, 0
1293 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1294 ; CHECK-NEXT:    vfwadd.wv v12, v10, v8
1295 ; CHECK-NEXT:    fsrm a1
1296 ; CHECK-NEXT:    vmv2r.v v8, v12
1297 ; CHECK-NEXT:    ret
1298 entry:
1299   %a = call <vscale x 4 x float> @llvm.riscv.vfwadd.w.nxv4f32.nxv4f16(
1300     <vscale x 4 x float> undef,
1301     <vscale x 4 x float> %1,
1302     <vscale x 4 x half> %0,
1303     iXLen 0, iXLen %2)
1305   ret <vscale x 4 x float> %a
1308 define <vscale x 8 x float> @intrinsic_vfwadd.w_wv_untie_nxv8f32_nxv8f32_nxv8f16(<vscale x 8 x half> %0, <vscale x 8 x float> %1, iXLen %2) nounwind {
1309 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_untie_nxv8f32_nxv8f32_nxv8f16:
1310 ; CHECK:       # %bb.0: # %entry
1311 ; CHECK-NEXT:    fsrmi a1, 0
1312 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1313 ; CHECK-NEXT:    vfwadd.wv v16, v12, v8
1314 ; CHECK-NEXT:    fsrm a1
1315 ; CHECK-NEXT:    vmv4r.v v8, v16
1316 ; CHECK-NEXT:    ret
1317 entry:
1318   %a = call <vscale x 8 x float> @llvm.riscv.vfwadd.w.nxv8f32.nxv8f16(
1319     <vscale x 8 x float> undef,
1320     <vscale x 8 x float> %1,
1321     <vscale x 8 x half> %0,
1322     iXLen 0, iXLen %2)
1324   ret <vscale x 8 x float> %a
1327 define <vscale x 1 x double> @intrinsic_vfwadd.w_wv_untie_nxv1f64_nxv1f64_nxv1f32(<vscale x 1 x float> %0, <vscale x 1 x double> %1, iXLen %2) nounwind {
1328 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_untie_nxv1f64_nxv1f64_nxv1f32:
1329 ; CHECK:       # %bb.0: # %entry
1330 ; CHECK-NEXT:    fsrmi a1, 0
1331 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1332 ; CHECK-NEXT:    vfwadd.wv v10, v9, v8
1333 ; CHECK-NEXT:    fsrm a1
1334 ; CHECK-NEXT:    vmv1r.v v8, v10
1335 ; CHECK-NEXT:    ret
1336 entry:
1337   %a = call <vscale x 1 x double> @llvm.riscv.vfwadd.w.nxv1f64.nxv1f32(
1338     <vscale x 1 x double> undef,
1339     <vscale x 1 x double> %1,
1340     <vscale x 1 x float> %0,
1341     iXLen 0, iXLen %2)
1343   ret <vscale x 1 x double> %a
1346 define <vscale x 2 x double> @intrinsic_vfwadd.w_wv_untie_nxv2f64_nxv2f64_nxv2f32(<vscale x 2 x float> %0, <vscale x 2 x double> %1, iXLen %2) nounwind {
1347 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_untie_nxv2f64_nxv2f64_nxv2f32:
1348 ; CHECK:       # %bb.0: # %entry
1349 ; CHECK-NEXT:    fsrmi a1, 0
1350 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1351 ; CHECK-NEXT:    vfwadd.wv v12, v10, v8
1352 ; CHECK-NEXT:    fsrm a1
1353 ; CHECK-NEXT:    vmv2r.v v8, v12
1354 ; CHECK-NEXT:    ret
1355 entry:
1356   %a = call <vscale x 2 x double> @llvm.riscv.vfwadd.w.nxv2f64.nxv2f32(
1357     <vscale x 2 x double> undef,
1358     <vscale x 2 x double> %1,
1359     <vscale x 2 x float> %0,
1360     iXLen 0, iXLen %2)
1362   ret <vscale x 2 x double> %a
1365 define <vscale x 4 x double> @intrinsic_vfwadd.w_wv_untie_nxv4f64_nxv4f64_nxv4f32(<vscale x 4 x float> %0, <vscale x 4 x double> %1, iXLen %2) nounwind {
1366 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_untie_nxv4f64_nxv4f64_nxv4f32:
1367 ; CHECK:       # %bb.0: # %entry
1368 ; CHECK-NEXT:    fsrmi a1, 0
1369 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1370 ; CHECK-NEXT:    vfwadd.wv v16, v12, v8
1371 ; CHECK-NEXT:    fsrm a1
1372 ; CHECK-NEXT:    vmv4r.v v8, v16
1373 ; CHECK-NEXT:    ret
1374 entry:
1375   %a = call <vscale x 4 x double> @llvm.riscv.vfwadd.w.nxv4f64.nxv4f32(
1376     <vscale x 4 x double> undef,
1377     <vscale x 4 x double> %1,
1378     <vscale x 4 x float> %0,
1379     iXLen 0, iXLen %2)
1381   ret <vscale x 4 x double> %a
1384 define <vscale x 8 x double> @intrinsic_vfwadd.w_wv_untie_nxv8f64_nxv8f64_nxv8f32(<vscale x 8 x float> %0, <vscale x 8 x double> %1, iXLen %2) nounwind {
1385 ; CHECK-LABEL: intrinsic_vfwadd.w_wv_untie_nxv8f64_nxv8f64_nxv8f32:
1386 ; CHECK:       # %bb.0: # %entry
1387 ; CHECK-NEXT:    fsrmi a1, 0
1388 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1389 ; CHECK-NEXT:    vfwadd.wv v24, v16, v8
1390 ; CHECK-NEXT:    fsrm a1
1391 ; CHECK-NEXT:    vmv8r.v v8, v24
1392 ; CHECK-NEXT:    ret
1393 entry:
1394   %a = call <vscale x 8 x double> @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32(
1395     <vscale x 8 x double> undef,
1396     <vscale x 8 x double> %1,
1397     <vscale x 8 x float> %0,
1398     iXLen 0, iXLen %2)
1400   ret <vscale x 8 x double> %a