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 1 x float> @llvm.riscv.vfwsub.w.nxv1f32.nxv1f16(
13 define <vscale x 1 x float> @intrinsic_vfwsub.w_wv_nxv1f32_nxv1f32_nxv1f16(<vscale x 1 x float> %0, <vscale x 1 x half> %1, iXLen %2) nounwind {
14 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wv v8, v8, v9
22 %a = call <vscale x 1 x float> @llvm.riscv.vfwsub.w.nxv1f32.nxv1f16(
23 <vscale x 1 x float> undef,
24 <vscale x 1 x float> %0,
25 <vscale x 1 x half> %1,
28 ret <vscale x 1 x float> %a
31 declare <vscale x 1 x float> @llvm.riscv.vfwsub.w.mask.nxv1f32.nxv1f16(
38 define <vscale x 1 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v8, v9, v10, v0.t
47 %a = call <vscale x 1 x float> @llvm.riscv.vfwsub.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,
52 iXLen 0, iXLen %4, iXLen 1)
54 ret <vscale x 1 x float> %a
57 declare <vscale x 2 x float> @llvm.riscv.vfwsub.w.nxv2f32.nxv2f16(
63 define <vscale x 2 x float> @intrinsic_vfwsub.w_wv_nxv2f32_nxv2f32_nxv2f16(<vscale x 2 x float> %0, <vscale x 2 x half> %1, iXLen %2) nounwind {
64 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wv v8, v8, v9
72 %a = call <vscale x 2 x float> @llvm.riscv.vfwsub.w.nxv2f32.nxv2f16(
73 <vscale x 2 x float> undef,
74 <vscale x 2 x float> %0,
75 <vscale x 2 x half> %1,
78 ret <vscale x 2 x float> %a
81 declare <vscale x 2 x float> @llvm.riscv.vfwsub.w.mask.nxv2f32.nxv2f16(
88 define <vscale x 2 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v8, v9, v10, v0.t
97 %a = call <vscale x 2 x float> @llvm.riscv.vfwsub.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.vfwsub.w.nxv4f32.nxv4f16(
108 <vscale x 4 x float>,
109 <vscale x 4 x float>,
113 define <vscale x 4 x float> @intrinsic_vfwsub.w_wv_nxv4f32_nxv4f32_nxv4f16(<vscale x 4 x float> %0, <vscale x 4 x half> %1, iXLen %2) nounwind {
114 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wv v8, v8, v10
119 ; CHECK-NEXT: fsrm a1
122 %a = call <vscale x 4 x float> @llvm.riscv.vfwsub.w.nxv4f32.nxv4f16(
123 <vscale x 4 x float> undef,
124 <vscale x 4 x float> %0,
125 <vscale x 4 x half> %1,
128 ret <vscale x 4 x float> %a
131 declare <vscale x 4 x float> @llvm.riscv.vfwsub.w.mask.nxv4f32.nxv4f16(
132 <vscale x 4 x float>,
133 <vscale x 4 x float>,
136 iXLen, iXLen, iXLen);
138 define <vscale x 4 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v8, v10, v12, v0.t
144 ; CHECK-NEXT: fsrm a1
147 %a = call <vscale x 4 x float> @llvm.riscv.vfwsub.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.vfwsub.w.nxv8f32.nxv8f16(
158 <vscale x 8 x float>,
159 <vscale x 8 x float>,
163 define <vscale x 8 x float> @intrinsic_vfwsub.w_wv_nxv8f32_nxv8f32_nxv8f16(<vscale x 8 x float> %0, <vscale x 8 x half> %1, iXLen %2) nounwind {
164 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wv v8, v8, v12
169 ; CHECK-NEXT: fsrm a1
172 %a = call <vscale x 8 x float> @llvm.riscv.vfwsub.w.nxv8f32.nxv8f16(
173 <vscale x 8 x float> undef,
174 <vscale x 8 x float> %0,
175 <vscale x 8 x half> %1,
178 ret <vscale x 8 x float> %a
181 declare <vscale x 8 x float> @llvm.riscv.vfwsub.w.mask.nxv8f32.nxv8f16(
182 <vscale x 8 x float>,
183 <vscale x 8 x float>,
186 iXLen, iXLen, iXLen);
188 define <vscale x 8 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v8, v12, v16, v0.t
194 ; CHECK-NEXT: fsrm a1
197 %a = call <vscale x 8 x float> @llvm.riscv.vfwsub.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.vfwsub.w.nxv16f32.nxv16f16(
208 <vscale x 16 x float>,
209 <vscale x 16 x float>,
210 <vscale x 16 x half>,
213 define <vscale x 16 x float> @intrinsic_vfwsub.w_wv_nxv16f32_nxv16f32_nxv16f16(<vscale x 16 x float> %0, <vscale x 16 x half> %1, iXLen %2) nounwind {
214 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wv v8, v8, v16
219 ; CHECK-NEXT: fsrm a1
222 %a = call <vscale x 16 x float> @llvm.riscv.vfwsub.w.nxv16f32.nxv16f16(
223 <vscale x 16 x float> undef,
224 <vscale x 16 x float> %0,
225 <vscale x 16 x half> %1,
228 ret <vscale x 16 x float> %a
231 declare <vscale x 16 x float> @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16(
232 <vscale x 16 x float>,
233 <vscale x 16 x float>,
234 <vscale x 16 x half>,
236 iXLen, iXLen, iXLen);
238 define <vscale x 16 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v8, v16, v24, v0.t
245 ; CHECK-NEXT: fsrm a0
248 %a = call <vscale x 16 x float> @llvm.riscv.vfwsub.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.vfwsub.w.nxv1f64.nxv1f32(
259 <vscale x 1 x double>,
260 <vscale x 1 x double>,
261 <vscale x 1 x float>,
264 define <vscale x 1 x double> @intrinsic_vfwsub.w_wv_nxv1f64_nxv1f64_nxv1f32(<vscale x 1 x double> %0, <vscale x 1 x float> %1, iXLen %2) nounwind {
265 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wv v8, v8, v9
270 ; CHECK-NEXT: fsrm a1
273 %a = call <vscale x 1 x double> @llvm.riscv.vfwsub.w.nxv1f64.nxv1f32(
274 <vscale x 1 x double> undef,
275 <vscale x 1 x double> %0,
276 <vscale x 1 x float> %1,
279 ret <vscale x 1 x double> %a
282 declare <vscale x 1 x double> @llvm.riscv.vfwsub.w.mask.nxv1f64.nxv1f32(
283 <vscale x 1 x double>,
284 <vscale x 1 x double>,
285 <vscale x 1 x float>,
287 iXLen, iXLen, iXLen);
289 define <vscale x 1 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v8, v9, v10, v0.t
295 ; CHECK-NEXT: fsrm a1
298 %a = call <vscale x 1 x double> @llvm.riscv.vfwsub.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.vfwsub.w.nxv2f64.nxv2f32(
309 <vscale x 2 x double>,
310 <vscale x 2 x double>,
311 <vscale x 2 x float>,
314 define <vscale x 2 x double> @intrinsic_vfwsub.w_wv_nxv2f64_nxv2f64_nxv2f32(<vscale x 2 x double> %0, <vscale x 2 x float> %1, iXLen %2) nounwind {
315 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wv v8, v8, v10
320 ; CHECK-NEXT: fsrm a1
323 %a = call <vscale x 2 x double> @llvm.riscv.vfwsub.w.nxv2f64.nxv2f32(
324 <vscale x 2 x double> undef,
325 <vscale x 2 x double> %0,
326 <vscale x 2 x float> %1,
329 ret <vscale x 2 x double> %a
332 declare <vscale x 2 x double> @llvm.riscv.vfwsub.w.mask.nxv2f64.nxv2f32(
333 <vscale x 2 x double>,
334 <vscale x 2 x double>,
335 <vscale x 2 x float>,
337 iXLen, iXLen, iXLen);
339 define <vscale x 2 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v8, v10, v12, v0.t
345 ; CHECK-NEXT: fsrm a1
348 %a = call <vscale x 2 x double> @llvm.riscv.vfwsub.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.vfwsub.w.nxv4f64.nxv4f32(
359 <vscale x 4 x double>,
360 <vscale x 4 x double>,
361 <vscale x 4 x float>,
364 define <vscale x 4 x double> @intrinsic_vfwsub.w_wv_nxv4f64_nxv4f64_nxv4f32(<vscale x 4 x double> %0, <vscale x 4 x float> %1, iXLen %2) nounwind {
365 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wv v8, v8, v12
370 ; CHECK-NEXT: fsrm a1
373 %a = call <vscale x 4 x double> @llvm.riscv.vfwsub.w.nxv4f64.nxv4f32(
374 <vscale x 4 x double> undef,
375 <vscale x 4 x double> %0,
376 <vscale x 4 x float> %1,
379 ret <vscale x 4 x double> %a
382 declare <vscale x 4 x double> @llvm.riscv.vfwsub.w.mask.nxv4f64.nxv4f32(
383 <vscale x 4 x double>,
384 <vscale x 4 x double>,
385 <vscale x 4 x float>,
387 iXLen, iXLen, iXLen);
389 define <vscale x 4 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v8, v12, v16, v0.t
395 ; CHECK-NEXT: fsrm a1
398 %a = call <vscale x 4 x double> @llvm.riscv.vfwsub.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.vfwsub.w.nxv8f64.nxv8f32(
409 <vscale x 8 x double>,
410 <vscale x 8 x double>,
411 <vscale x 8 x float>,
414 define <vscale x 8 x double> @intrinsic_vfwsub.w_wv_nxv8f64_nxv8f64_nxv8f32(<vscale x 8 x double> %0, <vscale x 8 x float> %1, iXLen %2) nounwind {
415 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wv v8, v8, v16
420 ; CHECK-NEXT: fsrm a1
423 %a = call <vscale x 8 x double> @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32(
424 <vscale x 8 x double> undef,
425 <vscale x 8 x double> %0,
426 <vscale x 8 x float> %1,
429 ret <vscale x 8 x double> %a
432 declare <vscale x 8 x double> @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32(
433 <vscale x 8 x double>,
434 <vscale x 8 x double>,
435 <vscale x 8 x float>,
437 iXLen, iXLen, iXLen);
439 define <vscale x 8 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v8, v16, v24, v0.t
446 ; CHECK-NEXT: fsrm a0
449 %a = call <vscale x 8 x double> @llvm.riscv.vfwsub.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.vfwsub.w.nxv1f32.f16(
460 <vscale x 1 x float>,
461 <vscale x 1 x float>,
465 define <vscale x 1 x float> @intrinsic_vfwsub.w_wf_nxv1f32_nxv1f32_f16(<vscale x 1 x float> %0, half %1, iXLen %2) nounwind {
466 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wf v8, v8, fa0
471 ; CHECK-NEXT: fsrm a1
474 %a = call <vscale x 1 x float> @llvm.riscv.vfwsub.w.nxv1f32.f16(
475 <vscale x 1 x float> undef,
476 <vscale x 1 x float> %0,
480 ret <vscale x 1 x float> %a
483 declare <vscale x 1 x float> @llvm.riscv.vfwsub.w.mask.nxv1f32.f16(
484 <vscale x 1 x float>,
485 <vscale x 1 x float>,
488 iXLen, iXLen, iXLen);
490 define <vscale x 1 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wf v8, v9, fa0, v0.t
496 ; CHECK-NEXT: fsrm a1
499 %a = call <vscale x 1 x float> @llvm.riscv.vfwsub.w.mask.nxv1f32.f16(
500 <vscale x 1 x float> %0,
501 <vscale x 1 x float> %1,
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.vfwsub.w.nxv2f32.f16(
510 <vscale x 2 x float>,
511 <vscale x 2 x float>,
515 define <vscale x 2 x float> @intrinsic_vfwsub.w_wf_nxv2f32_nxv2f32_f16(<vscale x 2 x float> %0, half %1, iXLen %2) nounwind {
516 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wf v8, v8, fa0
521 ; CHECK-NEXT: fsrm a1
524 %a = call <vscale x 2 x float> @llvm.riscv.vfwsub.w.nxv2f32.f16(
525 <vscale x 2 x float> undef,
526 <vscale x 2 x float> %0,
530 ret <vscale x 2 x float> %a
533 declare <vscale x 2 x float> @llvm.riscv.vfwsub.w.mask.nxv2f32.f16(
534 <vscale x 2 x float>,
535 <vscale x 2 x float>,
538 iXLen, iXLen, iXLen);
540 define <vscale x 2 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wf v8, v9, fa0, v0.t
546 ; CHECK-NEXT: fsrm a1
549 %a = call <vscale x 2 x float> @llvm.riscv.vfwsub.w.mask.nxv2f32.f16(
550 <vscale x 2 x float> %0,
551 <vscale x 2 x float> %1,
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.vfwsub.w.nxv4f32.f16(
560 <vscale x 4 x float>,
561 <vscale x 4 x float>,
565 define <vscale x 4 x float> @intrinsic_vfwsub.w_wf_nxv4f32_nxv4f32_f16(<vscale x 4 x float> %0, half %1, iXLen %2) nounwind {
566 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wf v8, v8, fa0
571 ; CHECK-NEXT: fsrm a1
574 %a = call <vscale x 4 x float> @llvm.riscv.vfwsub.w.nxv4f32.f16(
575 <vscale x 4 x float> undef,
576 <vscale x 4 x float> %0,
580 ret <vscale x 4 x float> %a
583 declare <vscale x 4 x float> @llvm.riscv.vfwsub.w.mask.nxv4f32.f16(
584 <vscale x 4 x float>,
585 <vscale x 4 x float>,
588 iXLen, iXLen, iXLen);
590 define <vscale x 4 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wf v8, v10, fa0, v0.t
596 ; CHECK-NEXT: fsrm a1
599 %a = call <vscale x 4 x float> @llvm.riscv.vfwsub.w.mask.nxv4f32.f16(
600 <vscale x 4 x float> %0,
601 <vscale x 4 x float> %1,
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.vfwsub.w.nxv8f32.f16(
610 <vscale x 8 x float>,
611 <vscale x 8 x float>,
615 define <vscale x 8 x float> @intrinsic_vfwsub.w_wf_nxv8f32_nxv8f32_f16(<vscale x 8 x float> %0, half %1, iXLen %2) nounwind {
616 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wf v8, v8, fa0
621 ; CHECK-NEXT: fsrm a1
624 %a = call <vscale x 8 x float> @llvm.riscv.vfwsub.w.nxv8f32.f16(
625 <vscale x 8 x float> undef,
626 <vscale x 8 x float> %0,
630 ret <vscale x 8 x float> %a
633 declare <vscale x 8 x float> @llvm.riscv.vfwsub.w.mask.nxv8f32.f16(
634 <vscale x 8 x float>,
635 <vscale x 8 x float>,
638 iXLen, iXLen, iXLen);
640 define <vscale x 8 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wf v8, v12, fa0, v0.t
646 ; CHECK-NEXT: fsrm a1
649 %a = call <vscale x 8 x float> @llvm.riscv.vfwsub.w.mask.nxv8f32.f16(
650 <vscale x 8 x float> %0,
651 <vscale x 8 x float> %1,
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.vfwsub.w.nxv16f32.f16(
660 <vscale x 16 x float>,
661 <vscale x 16 x float>,
665 define <vscale x 16 x float> @intrinsic_vfwsub.w_wf_nxv16f32_nxv16f32_f16(<vscale x 16 x float> %0, half %1, iXLen %2) nounwind {
666 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wf v8, v8, fa0
671 ; CHECK-NEXT: fsrm a1
674 %a = call <vscale x 16 x float> @llvm.riscv.vfwsub.w.nxv16f32.f16(
675 <vscale x 16 x float> undef,
676 <vscale x 16 x float> %0,
680 ret <vscale x 16 x float> %a
683 declare <vscale x 16 x float> @llvm.riscv.vfwsub.w.mask.nxv16f32.f16(
684 <vscale x 16 x float>,
685 <vscale x 16 x float>,
688 iXLen, iXLen, iXLen);
690 define <vscale x 16 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wf v8, v16, fa0, v0.t
696 ; CHECK-NEXT: fsrm a1
699 %a = call <vscale x 16 x float> @llvm.riscv.vfwsub.w.mask.nxv16f32.f16(
700 <vscale x 16 x float> %0,
701 <vscale x 16 x float> %1,
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.vfwsub.w.nxv1f64.f32(
710 <vscale x 1 x double>,
711 <vscale x 1 x double>,
715 define <vscale x 1 x double> @intrinsic_vfwsub.w_wf_nxv1f64_nxv1f64_f32(<vscale x 1 x double> %0, float %1, iXLen %2) nounwind {
716 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wf v8, v8, fa0
721 ; CHECK-NEXT: fsrm a1
724 %a = call <vscale x 1 x double> @llvm.riscv.vfwsub.w.nxv1f64.f32(
725 <vscale x 1 x double> undef,
726 <vscale x 1 x double> %0,
730 ret <vscale x 1 x double> %a
733 declare <vscale x 1 x double> @llvm.riscv.vfwsub.w.mask.nxv1f64.f32(
734 <vscale x 1 x double>,
735 <vscale x 1 x double>,
738 iXLen, iXLen, iXLen);
740 define <vscale x 1 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wf v8, v9, fa0, v0.t
746 ; CHECK-NEXT: fsrm a1
749 %a = call <vscale x 1 x double> @llvm.riscv.vfwsub.w.mask.nxv1f64.f32(
750 <vscale x 1 x double> %0,
751 <vscale x 1 x double> %1,
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.vfwsub.w.nxv2f64.f32(
760 <vscale x 2 x double>,
761 <vscale x 2 x double>,
765 define <vscale x 2 x double> @intrinsic_vfwsub.w_wf_nxv2f64_nxv2f64_f32(<vscale x 2 x double> %0, float %1, iXLen %2) nounwind {
766 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wf v8, v8, fa0
771 ; CHECK-NEXT: fsrm a1
774 %a = call <vscale x 2 x double> @llvm.riscv.vfwsub.w.nxv2f64.f32(
775 <vscale x 2 x double> undef,
776 <vscale x 2 x double> %0,
780 ret <vscale x 2 x double> %a
783 declare <vscale x 2 x double> @llvm.riscv.vfwsub.w.mask.nxv2f64.f32(
784 <vscale x 2 x double>,
785 <vscale x 2 x double>,
788 iXLen, iXLen, iXLen);
790 define <vscale x 2 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wf v8, v10, fa0, v0.t
796 ; CHECK-NEXT: fsrm a1
799 %a = call <vscale x 2 x double> @llvm.riscv.vfwsub.w.mask.nxv2f64.f32(
800 <vscale x 2 x double> %0,
801 <vscale x 2 x double> %1,
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.vfwsub.w.nxv4f64.f32(
810 <vscale x 4 x double>,
811 <vscale x 4 x double>,
815 define <vscale x 4 x double> @intrinsic_vfwsub.w_wf_nxv4f64_nxv4f64_f32(<vscale x 4 x double> %0, float %1, iXLen %2) nounwind {
816 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wf v8, v8, fa0
821 ; CHECK-NEXT: fsrm a1
824 %a = call <vscale x 4 x double> @llvm.riscv.vfwsub.w.nxv4f64.f32(
825 <vscale x 4 x double> undef,
826 <vscale x 4 x double> %0,
830 ret <vscale x 4 x double> %a
833 declare <vscale x 4 x double> @llvm.riscv.vfwsub.w.mask.nxv4f64.f32(
834 <vscale x 4 x double>,
835 <vscale x 4 x double>,
838 iXLen, iXLen, iXLen);
840 define <vscale x 4 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wf v8, v12, fa0, v0.t
846 ; CHECK-NEXT: fsrm a1
849 %a = call <vscale x 4 x double> @llvm.riscv.vfwsub.w.mask.nxv4f64.f32(
850 <vscale x 4 x double> %0,
851 <vscale x 4 x double> %1,
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.vfwsub.w.nxv8f64.f32(
860 <vscale x 8 x double>,
861 <vscale x 8 x double>,
865 define <vscale x 8 x double> @intrinsic_vfwsub.w_wf_nxv8f64_nxv8f64_f32(<vscale x 8 x double> %0, float %1, iXLen %2) nounwind {
866 ; CHECK-LABEL: intrinsic_vfwsub.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: vfwsub.wf v8, v8, fa0
871 ; CHECK-NEXT: fsrm a1
874 %a = call <vscale x 8 x double> @llvm.riscv.vfwsub.w.nxv8f64.f32(
875 <vscale x 8 x double> undef,
876 <vscale x 8 x double> %0,
880 ret <vscale x 8 x double> %a
883 declare <vscale x 8 x double> @llvm.riscv.vfwsub.w.mask.nxv8f64.f32(
884 <vscale x 8 x double>,
885 <vscale x 8 x double>,
888 iXLen, iXLen, iXLen);
890 define <vscale x 8 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wf v8, v16, fa0, v0.t
896 ; CHECK-NEXT: fsrm a1
899 %a = call <vscale x 8 x double> @llvm.riscv.vfwsub.w.mask.nxv8f64.f32(
900 <vscale x 8 x double> %0,
901 <vscale x 8 x double> %1,
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_vfwsub.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_vfwsub.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: vfwsub.wv v8, v8, v9, v0.t
915 ; CHECK-NEXT: fsrm a1
918 %a = call <vscale x 1 x float> @llvm.riscv.vfwsub.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_vfwsub.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_vfwsub.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: vfwsub.wv v8, v8, v9, v0.t
934 ; CHECK-NEXT: fsrm a1
937 %a = call <vscale x 2 x float> @llvm.riscv.vfwsub.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_vfwsub.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_vfwsub.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: vfwsub.wv v8, v8, v10, v0.t
953 ; CHECK-NEXT: fsrm a1
956 %a = call <vscale x 4 x float> @llvm.riscv.vfwsub.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_vfwsub.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_vfwsub.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: vfwsub.wv v8, v8, v12, v0.t
972 ; CHECK-NEXT: fsrm a1
975 %a = call <vscale x 8 x float> @llvm.riscv.vfwsub.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_vfwsub.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_vfwsub.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: vfwsub.wv v8, v8, v16, v0.t
991 ; CHECK-NEXT: fsrm a1
994 %a = call <vscale x 16 x float> @llvm.riscv.vfwsub.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_vfwsub.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_vfwsub.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: vfwsub.wv v8, v8, v9, v0.t
1010 ; CHECK-NEXT: fsrm a1
1013 %a = call <vscale x 1 x double> @llvm.riscv.vfwsub.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_vfwsub.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_vfwsub.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: vfwsub.wv v8, v8, v10, v0.t
1029 ; CHECK-NEXT: fsrm a1
1032 %a = call <vscale x 2 x double> @llvm.riscv.vfwsub.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_vfwsub.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_vfwsub.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: vfwsub.wv v8, v8, v12, v0.t
1048 ; CHECK-NEXT: fsrm a1
1051 %a = call <vscale x 4 x double> @llvm.riscv.vfwsub.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_vfwsub.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_vfwsub.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: vfwsub.wv v8, v8, v16, v0.t
1067 ; CHECK-NEXT: fsrm a1
1070 %a = call <vscale x 8 x double> @llvm.riscv.vfwsub.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_vfwsub.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_vfwsub.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: vfwsub.wf v8, v8, fa0, v0.t
1086 ; CHECK-NEXT: fsrm a1
1089 %a = call <vscale x 1 x float> @llvm.riscv.vfwsub.w.mask.nxv1f32.f16(
1090 <vscale x 1 x float> %0,
1091 <vscale x 1 x float> %0,
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_vfwsub.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_vfwsub.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: vfwsub.wf v8, v8, fa0, v0.t
1105 ; CHECK-NEXT: fsrm a1
1108 %a = call <vscale x 2 x float> @llvm.riscv.vfwsub.w.mask.nxv2f32.f16(
1109 <vscale x 2 x float> %0,
1110 <vscale x 2 x float> %0,
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_vfwsub.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_vfwsub.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: vfwsub.wf v8, v8, fa0, v0.t
1124 ; CHECK-NEXT: fsrm a1
1127 %a = call <vscale x 4 x float> @llvm.riscv.vfwsub.w.mask.nxv4f32.f16(
1128 <vscale x 4 x float> %0,
1129 <vscale x 4 x float> %0,
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_vfwsub.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_vfwsub.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: vfwsub.wf v8, v8, fa0, v0.t
1143 ; CHECK-NEXT: fsrm a1
1146 %a = call <vscale x 8 x float> @llvm.riscv.vfwsub.w.mask.nxv8f32.f16(
1147 <vscale x 8 x float> %0,
1148 <vscale x 8 x float> %0,
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_vfwsub.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_vfwsub.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: vfwsub.wf v8, v8, fa0, v0.t
1162 ; CHECK-NEXT: fsrm a1
1165 %a = call <vscale x 16 x float> @llvm.riscv.vfwsub.w.mask.nxv16f32.f16(
1166 <vscale x 16 x float> %0,
1167 <vscale x 16 x float> %0,
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_vfwsub.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_vfwsub.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: vfwsub.wf v8, v8, fa0, v0.t
1181 ; CHECK-NEXT: fsrm a1
1184 %a = call <vscale x 1 x double> @llvm.riscv.vfwsub.w.mask.nxv1f64.f32(
1185 <vscale x 1 x double> %0,
1186 <vscale x 1 x double> %0,
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_vfwsub.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_vfwsub.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: vfwsub.wf v8, v8, fa0, v0.t
1200 ; CHECK-NEXT: fsrm a1
1203 %a = call <vscale x 2 x double> @llvm.riscv.vfwsub.w.mask.nxv2f64.f32(
1204 <vscale x 2 x double> %0,
1205 <vscale x 2 x double> %0,
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_vfwsub.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_vfwsub.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: vfwsub.wf v8, v8, fa0, v0.t
1219 ; CHECK-NEXT: fsrm a1
1222 %a = call <vscale x 4 x double> @llvm.riscv.vfwsub.w.mask.nxv4f64.f32(
1223 <vscale x 4 x double> %0,
1224 <vscale x 4 x double> %0,
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_vfwsub.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_vfwsub.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: vfwsub.wf v8, v8, fa0, v0.t
1238 ; CHECK-NEXT: fsrm a1
1241 %a = call <vscale x 8 x double> @llvm.riscv.vfwsub.w.mask.nxv8f64.f32(
1242 <vscale x 8 x double> %0,
1243 <vscale x 8 x double> %0,
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_vfwsub.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_vfwsub.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: vfwsub.wv v10, v9, v8
1257 ; CHECK-NEXT: fsrm a1
1258 ; CHECK-NEXT: vmv1r.v v8, v10
1261 %a = call <vscale x 1 x float> @llvm.riscv.vfwsub.w.nxv1f32.nxv1f16(
1262 <vscale x 1 x float> undef,
1263 <vscale x 1 x float> %1,
1264 <vscale x 1 x half> %0,
1267 ret <vscale x 1 x float> %a
1270 define <vscale x 2 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v10, v9, v8
1276 ; CHECK-NEXT: fsrm a1
1277 ; CHECK-NEXT: vmv1r.v v8, v10
1280 %a = call <vscale x 2 x float> @llvm.riscv.vfwsub.w.nxv2f32.nxv2f16(
1281 <vscale x 2 x float> undef,
1282 <vscale x 2 x float> %1,
1283 <vscale x 2 x half> %0,
1286 ret <vscale x 2 x float> %a
1289 define <vscale x 4 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v12, v10, v8
1295 ; CHECK-NEXT: fsrm a1
1296 ; CHECK-NEXT: vmv2r.v v8, v12
1299 %a = call <vscale x 4 x float> @llvm.riscv.vfwsub.w.nxv4f32.nxv4f16(
1300 <vscale x 4 x float> undef,
1301 <vscale x 4 x float> %1,
1302 <vscale x 4 x half> %0,
1305 ret <vscale x 4 x float> %a
1308 define <vscale x 8 x float> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v16, v12, v8
1314 ; CHECK-NEXT: fsrm a1
1315 ; CHECK-NEXT: vmv4r.v v8, v16
1318 %a = call <vscale x 8 x float> @llvm.riscv.vfwsub.w.nxv8f32.nxv8f16(
1319 <vscale x 8 x float> undef,
1320 <vscale x 8 x float> %1,
1321 <vscale x 8 x half> %0,
1324 ret <vscale x 8 x float> %a
1327 define <vscale x 1 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v10, v9, v8
1333 ; CHECK-NEXT: fsrm a1
1334 ; CHECK-NEXT: vmv1r.v v8, v10
1337 %a = call <vscale x 1 x double> @llvm.riscv.vfwsub.w.nxv1f64.nxv1f32(
1338 <vscale x 1 x double> undef,
1339 <vscale x 1 x double> %1,
1340 <vscale x 1 x float> %0,
1343 ret <vscale x 1 x double> %a
1346 define <vscale x 2 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v12, v10, v8
1352 ; CHECK-NEXT: fsrm a1
1353 ; CHECK-NEXT: vmv2r.v v8, v12
1356 %a = call <vscale x 2 x double> @llvm.riscv.vfwsub.w.nxv2f64.nxv2f32(
1357 <vscale x 2 x double> undef,
1358 <vscale x 2 x double> %1,
1359 <vscale x 2 x float> %0,
1362 ret <vscale x 2 x double> %a
1365 define <vscale x 4 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v16, v12, v8
1371 ; CHECK-NEXT: fsrm a1
1372 ; CHECK-NEXT: vmv4r.v v8, v16
1375 %a = call <vscale x 4 x double> @llvm.riscv.vfwsub.w.nxv4f64.nxv4f32(
1376 <vscale x 4 x double> undef,
1377 <vscale x 4 x double> %1,
1378 <vscale x 4 x float> %0,
1381 ret <vscale x 4 x double> %a
1384 define <vscale x 8 x double> @intrinsic_vfwsub.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_vfwsub.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: vfwsub.wv v24, v16, v8
1390 ; CHECK-NEXT: fsrm a1
1391 ; CHECK-NEXT: vmv8r.v v8, v24
1394 %a = call <vscale x 8 x double> @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32(
1395 <vscale x 8 x double> undef,
1396 <vscale x 8 x double> %1,
1397 <vscale x 8 x float> %0,
1400 ret <vscale x 8 x double> %a