[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vmadc.ll
blob5ec84f89f67c7c0e65305000489b991ca2be9eec
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 \
3 ; RUN:   -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v \
5 ; RUN:   -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i8.nxv1i8(
8   <vscale x 1 x i8>,
9   <vscale x 1 x i8>,
10   iXLen);
12 define <vscale x 1 x i1> @intrinsic_vmadc_vv_nxv1i1_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, iXLen %2) nounwind {
13 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv1i1_nxv1i8_nxv1i8:
14 ; CHECK:       # %bb.0: # %entry
15 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
16 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
17 ; CHECK-NEXT:    ret
18 entry:
19   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i8.nxv1i8(
20     <vscale x 1 x i8> %0,
21     <vscale x 1 x i8> %1,
22     iXLen %2)
24   ret <vscale x 1 x i1> %a
27 declare <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i8.nxv2i8(
28   <vscale x 2 x i8>,
29   <vscale x 2 x i8>,
30   iXLen);
32 define <vscale x 2 x i1> @intrinsic_vmadc_vv_nxv2i1_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, iXLen %2) nounwind {
33 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv2i1_nxv2i8_nxv2i8:
34 ; CHECK:       # %bb.0: # %entry
35 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
36 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
37 ; CHECK-NEXT:    ret
38 entry:
39   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i8.nxv2i8(
40     <vscale x 2 x i8> %0,
41     <vscale x 2 x i8> %1,
42     iXLen %2)
44   ret <vscale x 2 x i1> %a
47 declare <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i8.nxv4i8(
48   <vscale x 4 x i8>,
49   <vscale x 4 x i8>,
50   iXLen);
52 define <vscale x 4 x i1> @intrinsic_vmadc_vv_nxv4i1_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, iXLen %2) nounwind {
53 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv4i1_nxv4i8_nxv4i8:
54 ; CHECK:       # %bb.0: # %entry
55 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
56 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
57 ; CHECK-NEXT:    ret
58 entry:
59   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i8.nxv4i8(
60     <vscale x 4 x i8> %0,
61     <vscale x 4 x i8> %1,
62     iXLen %2)
64   ret <vscale x 4 x i1> %a
67 declare <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i8.nxv8i8(
68   <vscale x 8 x i8>,
69   <vscale x 8 x i8>,
70   iXLen);
72 define <vscale x 8 x i1> @intrinsic_vmadc_vv_nxv8i1_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, iXLen %2) nounwind {
73 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv8i1_nxv8i8_nxv8i8:
74 ; CHECK:       # %bb.0: # %entry
75 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
76 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
77 ; CHECK-NEXT:    ret
78 entry:
79   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i8.nxv8i8(
80     <vscale x 8 x i8> %0,
81     <vscale x 8 x i8> %1,
82     iXLen %2)
84   ret <vscale x 8 x i1> %a
87 declare <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i8.nxv16i8(
88   <vscale x 16 x i8>,
89   <vscale x 16 x i8>,
90   iXLen);
92 define <vscale x 16 x i1> @intrinsic_vmadc_vv_nxv16i1_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, iXLen %2) nounwind {
93 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv16i1_nxv16i8_nxv16i8:
94 ; CHECK:       # %bb.0: # %entry
95 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
96 ; CHECK-NEXT:    vmadc.vv v0, v8, v10
97 ; CHECK-NEXT:    ret
98 entry:
99   %a = call <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i8.nxv16i8(
100     <vscale x 16 x i8> %0,
101     <vscale x 16 x i8> %1,
102     iXLen %2)
104   ret <vscale x 16 x i1> %a
107 declare <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i8.nxv32i8(
108   <vscale x 32 x i8>,
109   <vscale x 32 x i8>,
110   iXLen);
112 define <vscale x 32 x i1> @intrinsic_vmadc_vv_nxv32i1_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, iXLen %2) nounwind {
113 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv32i1_nxv32i8_nxv32i8:
114 ; CHECK:       # %bb.0: # %entry
115 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
116 ; CHECK-NEXT:    vmadc.vv v0, v8, v12
117 ; CHECK-NEXT:    ret
118 entry:
119   %a = call <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i8.nxv32i8(
120     <vscale x 32 x i8> %0,
121     <vscale x 32 x i8> %1,
122     iXLen %2)
124   ret <vscale x 32 x i1> %a
127 declare <vscale x 64 x i1> @llvm.riscv.vmadc.nxv64i8.nxv64i8(
128   <vscale x 64 x i8>,
129   <vscale x 64 x i8>,
130   iXLen);
132 define <vscale x 64 x i1> @intrinsic_vmadc_vv_nxv64i1_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, iXLen %2) nounwind {
133 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv64i1_nxv64i8_nxv64i8:
134 ; CHECK:       # %bb.0: # %entry
135 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
136 ; CHECK-NEXT:    vmadc.vv v0, v8, v16
137 ; CHECK-NEXT:    ret
138 entry:
139   %a = call <vscale x 64 x i1> @llvm.riscv.vmadc.nxv64i8.nxv64i8(
140     <vscale x 64 x i8> %0,
141     <vscale x 64 x i8> %1,
142     iXLen %2)
144   ret <vscale x 64 x i1> %a
147 declare <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i16.nxv1i16(
148   <vscale x 1 x i16>,
149   <vscale x 1 x i16>,
150   iXLen);
152 define <vscale x 1 x i1> @intrinsic_vmadc_vv_nxv1i1_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, iXLen %2) nounwind {
153 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv1i1_nxv1i16_nxv1i16:
154 ; CHECK:       # %bb.0: # %entry
155 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
156 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
157 ; CHECK-NEXT:    ret
158 entry:
159   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i16.nxv1i16(
160     <vscale x 1 x i16> %0,
161     <vscale x 1 x i16> %1,
162     iXLen %2)
164   ret <vscale x 1 x i1> %a
167 declare <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i16.nxv2i16(
168   <vscale x 2 x i16>,
169   <vscale x 2 x i16>,
170   iXLen);
172 define <vscale x 2 x i1> @intrinsic_vmadc_vv_nxv2i1_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, iXLen %2) nounwind {
173 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv2i1_nxv2i16_nxv2i16:
174 ; CHECK:       # %bb.0: # %entry
175 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
176 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
177 ; CHECK-NEXT:    ret
178 entry:
179   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i16.nxv2i16(
180     <vscale x 2 x i16> %0,
181     <vscale x 2 x i16> %1,
182     iXLen %2)
184   ret <vscale x 2 x i1> %a
187 declare <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i16.nxv4i16(
188   <vscale x 4 x i16>,
189   <vscale x 4 x i16>,
190   iXLen);
192 define <vscale x 4 x i1> @intrinsic_vmadc_vv_nxv4i1_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, iXLen %2) nounwind {
193 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv4i1_nxv4i16_nxv4i16:
194 ; CHECK:       # %bb.0: # %entry
195 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
196 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
197 ; CHECK-NEXT:    ret
198 entry:
199   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i16.nxv4i16(
200     <vscale x 4 x i16> %0,
201     <vscale x 4 x i16> %1,
202     iXLen %2)
204   ret <vscale x 4 x i1> %a
207 declare <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i16.nxv8i16(
208   <vscale x 8 x i16>,
209   <vscale x 8 x i16>,
210   iXLen);
212 define <vscale x 8 x i1> @intrinsic_vmadc_vv_nxv8i1_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, iXLen %2) nounwind {
213 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv8i1_nxv8i16_nxv8i16:
214 ; CHECK:       # %bb.0: # %entry
215 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
216 ; CHECK-NEXT:    vmadc.vv v0, v8, v10
217 ; CHECK-NEXT:    ret
218 entry:
219   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i16.nxv8i16(
220     <vscale x 8 x i16> %0,
221     <vscale x 8 x i16> %1,
222     iXLen %2)
224   ret <vscale x 8 x i1> %a
227 declare <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i16.nxv16i16(
228   <vscale x 16 x i16>,
229   <vscale x 16 x i16>,
230   iXLen);
232 define <vscale x 16 x i1> @intrinsic_vmadc_vv_nxv16i1_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, iXLen %2) nounwind {
233 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv16i1_nxv16i16_nxv16i16:
234 ; CHECK:       # %bb.0: # %entry
235 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
236 ; CHECK-NEXT:    vmadc.vv v0, v8, v12
237 ; CHECK-NEXT:    ret
238 entry:
239   %a = call <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i16.nxv16i16(
240     <vscale x 16 x i16> %0,
241     <vscale x 16 x i16> %1,
242     iXLen %2)
244   ret <vscale x 16 x i1> %a
247 declare <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i16.nxv32i16(
248   <vscale x 32 x i16>,
249   <vscale x 32 x i16>,
250   iXLen);
252 define <vscale x 32 x i1> @intrinsic_vmadc_vv_nxv32i1_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, iXLen %2) nounwind {
253 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv32i1_nxv32i16_nxv32i16:
254 ; CHECK:       # %bb.0: # %entry
255 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
256 ; CHECK-NEXT:    vmadc.vv v0, v8, v16
257 ; CHECK-NEXT:    ret
258 entry:
259   %a = call <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i16.nxv32i16(
260     <vscale x 32 x i16> %0,
261     <vscale x 32 x i16> %1,
262     iXLen %2)
264   ret <vscale x 32 x i1> %a
267 declare <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i32.nxv1i32(
268   <vscale x 1 x i32>,
269   <vscale x 1 x i32>,
270   iXLen);
272 define <vscale x 1 x i1> @intrinsic_vmadc_vv_nxv1i1_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, iXLen %2) nounwind {
273 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv1i1_nxv1i32_nxv1i32:
274 ; CHECK:       # %bb.0: # %entry
275 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
276 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
277 ; CHECK-NEXT:    ret
278 entry:
279   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i32.nxv1i32(
280     <vscale x 1 x i32> %0,
281     <vscale x 1 x i32> %1,
282     iXLen %2)
284   ret <vscale x 1 x i1> %a
287 declare <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i32.nxv2i32(
288   <vscale x 2 x i32>,
289   <vscale x 2 x i32>,
290   iXLen);
292 define <vscale x 2 x i1> @intrinsic_vmadc_vv_nxv2i1_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, iXLen %2) nounwind {
293 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv2i1_nxv2i32_nxv2i32:
294 ; CHECK:       # %bb.0: # %entry
295 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
296 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
297 ; CHECK-NEXT:    ret
298 entry:
299   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i32.nxv2i32(
300     <vscale x 2 x i32> %0,
301     <vscale x 2 x i32> %1,
302     iXLen %2)
304   ret <vscale x 2 x i1> %a
307 declare <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i32.nxv4i32(
308   <vscale x 4 x i32>,
309   <vscale x 4 x i32>,
310   iXLen);
312 define <vscale x 4 x i1> @intrinsic_vmadc_vv_nxv4i1_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, iXLen %2) nounwind {
313 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv4i1_nxv4i32_nxv4i32:
314 ; CHECK:       # %bb.0: # %entry
315 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
316 ; CHECK-NEXT:    vmadc.vv v0, v8, v10
317 ; CHECK-NEXT:    ret
318 entry:
319   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i32.nxv4i32(
320     <vscale x 4 x i32> %0,
321     <vscale x 4 x i32> %1,
322     iXLen %2)
324   ret <vscale x 4 x i1> %a
327 declare <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i32.nxv8i32(
328   <vscale x 8 x i32>,
329   <vscale x 8 x i32>,
330   iXLen);
332 define <vscale x 8 x i1> @intrinsic_vmadc_vv_nxv8i1_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, iXLen %2) nounwind {
333 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv8i1_nxv8i32_nxv8i32:
334 ; CHECK:       # %bb.0: # %entry
335 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
336 ; CHECK-NEXT:    vmadc.vv v0, v8, v12
337 ; CHECK-NEXT:    ret
338 entry:
339   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i32.nxv8i32(
340     <vscale x 8 x i32> %0,
341     <vscale x 8 x i32> %1,
342     iXLen %2)
344   ret <vscale x 8 x i1> %a
347 declare <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i32.nxv16i32(
348   <vscale x 16 x i32>,
349   <vscale x 16 x i32>,
350   iXLen);
352 define <vscale x 16 x i1> @intrinsic_vmadc_vv_nxv16i1_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, iXLen %2) nounwind {
353 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv16i1_nxv16i32_nxv16i32:
354 ; CHECK:       # %bb.0: # %entry
355 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
356 ; CHECK-NEXT:    vmadc.vv v0, v8, v16
357 ; CHECK-NEXT:    ret
358 entry:
359   %a = call <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i32.nxv16i32(
360     <vscale x 16 x i32> %0,
361     <vscale x 16 x i32> %1,
362     iXLen %2)
364   ret <vscale x 16 x i1> %a
367 declare <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i64.nxv1i64(
368   <vscale x 1 x i64>,
369   <vscale x 1 x i64>,
370   iXLen);
372 define <vscale x 1 x i1> @intrinsic_vmadc_vv_nxv1i1_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, iXLen %2) nounwind {
373 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv1i1_nxv1i64_nxv1i64:
374 ; CHECK:       # %bb.0: # %entry
375 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
376 ; CHECK-NEXT:    vmadc.vv v0, v8, v9
377 ; CHECK-NEXT:    ret
378 entry:
379   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i64.nxv1i64(
380     <vscale x 1 x i64> %0,
381     <vscale x 1 x i64> %1,
382     iXLen %2)
384   ret <vscale x 1 x i1> %a
387 declare <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i64.nxv2i64(
388   <vscale x 2 x i64>,
389   <vscale x 2 x i64>,
390   iXLen);
392 define <vscale x 2 x i1> @intrinsic_vmadc_vv_nxv2i1_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, iXLen %2) nounwind {
393 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv2i1_nxv2i64_nxv2i64:
394 ; CHECK:       # %bb.0: # %entry
395 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
396 ; CHECK-NEXT:    vmadc.vv v0, v8, v10
397 ; CHECK-NEXT:    ret
398 entry:
399   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i64.nxv2i64(
400     <vscale x 2 x i64> %0,
401     <vscale x 2 x i64> %1,
402     iXLen %2)
404   ret <vscale x 2 x i1> %a
407 declare <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i64.nxv4i64(
408   <vscale x 4 x i64>,
409   <vscale x 4 x i64>,
410   iXLen);
412 define <vscale x 4 x i1> @intrinsic_vmadc_vv_nxv4i1_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, iXLen %2) nounwind {
413 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv4i1_nxv4i64_nxv4i64:
414 ; CHECK:       # %bb.0: # %entry
415 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
416 ; CHECK-NEXT:    vmadc.vv v0, v8, v12
417 ; CHECK-NEXT:    ret
418 entry:
419   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i64.nxv4i64(
420     <vscale x 4 x i64> %0,
421     <vscale x 4 x i64> %1,
422     iXLen %2)
424   ret <vscale x 4 x i1> %a
427 declare <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i64.nxv8i64(
428   <vscale x 8 x i64>,
429   <vscale x 8 x i64>,
430   iXLen);
432 define <vscale x 8 x i1> @intrinsic_vmadc_vv_nxv8i1_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, iXLen %2) nounwind {
433 ; CHECK-LABEL: intrinsic_vmadc_vv_nxv8i1_nxv8i64_nxv8i64:
434 ; CHECK:       # %bb.0: # %entry
435 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
436 ; CHECK-NEXT:    vmadc.vv v0, v8, v16
437 ; CHECK-NEXT:    ret
438 entry:
439   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i64.nxv8i64(
440     <vscale x 8 x i64> %0,
441     <vscale x 8 x i64> %1,
442     iXLen %2)
444   ret <vscale x 8 x i1> %a
447 declare <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i8.i8(
448   <vscale x 1 x i8>,
449   i8,
450   iXLen);
452 define <vscale x 1 x i1> @intrinsic_vmadc_vx_nxv1i1_nxv1i8_i8(<vscale x 1 x i8> %0, i8 %1, iXLen %2) nounwind {
453 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv1i1_nxv1i8_i8:
454 ; CHECK:       # %bb.0: # %entry
455 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
456 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
457 ; CHECK-NEXT:    ret
458 entry:
459   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i8.i8(
460     <vscale x 1 x i8> %0,
461     i8 %1,
462     iXLen %2)
464   ret <vscale x 1 x i1> %a
467 declare <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i8.i8(
468   <vscale x 2 x i8>,
469   i8,
470   iXLen);
472 define <vscale x 2 x i1> @intrinsic_vmadc_vx_nxv2i1_nxv2i8_i8(<vscale x 2 x i8> %0, i8 %1, iXLen %2) nounwind {
473 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv2i1_nxv2i8_i8:
474 ; CHECK:       # %bb.0: # %entry
475 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
476 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
477 ; CHECK-NEXT:    ret
478 entry:
479   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i8.i8(
480     <vscale x 2 x i8> %0,
481     i8 %1,
482     iXLen %2)
484   ret <vscale x 2 x i1> %a
487 declare <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i8.i8(
488   <vscale x 4 x i8>,
489   i8,
490   iXLen);
492 define <vscale x 4 x i1> @intrinsic_vmadc_vx_nxv4i1_nxv4i8_i8(<vscale x 4 x i8> %0, i8 %1, iXLen %2) nounwind {
493 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv4i1_nxv4i8_i8:
494 ; CHECK:       # %bb.0: # %entry
495 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
496 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
497 ; CHECK-NEXT:    ret
498 entry:
499   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i8.i8(
500     <vscale x 4 x i8> %0,
501     i8 %1,
502     iXLen %2)
504   ret <vscale x 4 x i1> %a
507 declare <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i8.i8(
508   <vscale x 8 x i8>,
509   i8,
510   iXLen);
512 define <vscale x 8 x i1> @intrinsic_vmadc_vx_nxv8i1_nxv8i8_i8(<vscale x 8 x i8> %0, i8 %1, iXLen %2) nounwind {
513 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv8i1_nxv8i8_i8:
514 ; CHECK:       # %bb.0: # %entry
515 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
516 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
517 ; CHECK-NEXT:    ret
518 entry:
519   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i8.i8(
520     <vscale x 8 x i8> %0,
521     i8 %1,
522     iXLen %2)
524   ret <vscale x 8 x i1> %a
527 declare <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i8.i8(
528   <vscale x 16 x i8>,
529   i8,
530   iXLen);
532 define <vscale x 16 x i1> @intrinsic_vmadc_vx_nxv16i1_nxv16i8_i8(<vscale x 16 x i8> %0, i8 %1, iXLen %2) nounwind {
533 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv16i1_nxv16i8_i8:
534 ; CHECK:       # %bb.0: # %entry
535 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
536 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
537 ; CHECK-NEXT:    ret
538 entry:
539   %a = call <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i8.i8(
540     <vscale x 16 x i8> %0,
541     i8 %1,
542     iXLen %2)
544   ret <vscale x 16 x i1> %a
547 declare <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i8.i8(
548   <vscale x 32 x i8>,
549   i8,
550   iXLen);
552 define <vscale x 32 x i1> @intrinsic_vmadc_vx_nxv32i1_nxv32i8_i8(<vscale x 32 x i8> %0, i8 %1, iXLen %2) nounwind {
553 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv32i1_nxv32i8_i8:
554 ; CHECK:       # %bb.0: # %entry
555 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
556 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
557 ; CHECK-NEXT:    ret
558 entry:
559   %a = call <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i8.i8(
560     <vscale x 32 x i8> %0,
561     i8 %1,
562     iXLen %2)
564   ret <vscale x 32 x i1> %a
567 declare <vscale x 64 x i1> @llvm.riscv.vmadc.nxv64i8.i8(
568   <vscale x 64 x i8>,
569   i8,
570   iXLen);
572 define <vscale x 64 x i1> @intrinsic_vmadc_vx_nxv64i1_nxv64i8_i8(<vscale x 64 x i8> %0, i8 %1, iXLen %2) nounwind {
573 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv64i1_nxv64i8_i8:
574 ; CHECK:       # %bb.0: # %entry
575 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
576 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
577 ; CHECK-NEXT:    ret
578 entry:
579   %a = call <vscale x 64 x i1> @llvm.riscv.vmadc.nxv64i8.i8(
580     <vscale x 64 x i8> %0,
581     i8 %1,
582     iXLen %2)
584   ret <vscale x 64 x i1> %a
587 declare <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i16.i16(
588   <vscale x 1 x i16>,
589   i16,
590   iXLen);
592 define <vscale x 1 x i1> @intrinsic_vmadc_vx_nxv1i1_nxv1i16_i16(<vscale x 1 x i16> %0, i16 %1, iXLen %2) nounwind {
593 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv1i1_nxv1i16_i16:
594 ; CHECK:       # %bb.0: # %entry
595 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
596 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
597 ; CHECK-NEXT:    ret
598 entry:
599   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i16.i16(
600     <vscale x 1 x i16> %0,
601     i16 %1,
602     iXLen %2)
604   ret <vscale x 1 x i1> %a
607 declare <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i16.i16(
608   <vscale x 2 x i16>,
609   i16,
610   iXLen);
612 define <vscale x 2 x i1> @intrinsic_vmadc_vx_nxv2i1_nxv2i16_i16(<vscale x 2 x i16> %0, i16 %1, iXLen %2) nounwind {
613 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv2i1_nxv2i16_i16:
614 ; CHECK:       # %bb.0: # %entry
615 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
616 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
617 ; CHECK-NEXT:    ret
618 entry:
619   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i16.i16(
620     <vscale x 2 x i16> %0,
621     i16 %1,
622     iXLen %2)
624   ret <vscale x 2 x i1> %a
627 declare <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i16.i16(
628   <vscale x 4 x i16>,
629   i16,
630   iXLen);
632 define <vscale x 4 x i1> @intrinsic_vmadc_vx_nxv4i1_nxv4i16_i16(<vscale x 4 x i16> %0, i16 %1, iXLen %2) nounwind {
633 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv4i1_nxv4i16_i16:
634 ; CHECK:       # %bb.0: # %entry
635 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
636 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
637 ; CHECK-NEXT:    ret
638 entry:
639   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i16.i16(
640     <vscale x 4 x i16> %0,
641     i16 %1,
642     iXLen %2)
644   ret <vscale x 4 x i1> %a
647 declare <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i16.i16(
648   <vscale x 8 x i16>,
649   i16,
650   iXLen);
652 define <vscale x 8 x i1> @intrinsic_vmadc_vx_nxv8i1_nxv8i16_i16(<vscale x 8 x i16> %0, i16 %1, iXLen %2) nounwind {
653 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv8i1_nxv8i16_i16:
654 ; CHECK:       # %bb.0: # %entry
655 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
656 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
657 ; CHECK-NEXT:    ret
658 entry:
659   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i16.i16(
660     <vscale x 8 x i16> %0,
661     i16 %1,
662     iXLen %2)
664   ret <vscale x 8 x i1> %a
667 declare <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i16.i16(
668   <vscale x 16 x i16>,
669   i16,
670   iXLen);
672 define <vscale x 16 x i1> @intrinsic_vmadc_vx_nxv16i1_nxv16i16_i16(<vscale x 16 x i16> %0, i16 %1, iXLen %2) nounwind {
673 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv16i1_nxv16i16_i16:
674 ; CHECK:       # %bb.0: # %entry
675 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
676 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
677 ; CHECK-NEXT:    ret
678 entry:
679   %a = call <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i16.i16(
680     <vscale x 16 x i16> %0,
681     i16 %1,
682     iXLen %2)
684   ret <vscale x 16 x i1> %a
687 declare <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i16.i16(
688   <vscale x 32 x i16>,
689   i16,
690   iXLen);
692 define <vscale x 32 x i1> @intrinsic_vmadc_vx_nxv32i1_nxv32i16_i16(<vscale x 32 x i16> %0, i16 %1, iXLen %2) nounwind {
693 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv32i1_nxv32i16_i16:
694 ; CHECK:       # %bb.0: # %entry
695 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
696 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
697 ; CHECK-NEXT:    ret
698 entry:
699   %a = call <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i16.i16(
700     <vscale x 32 x i16> %0,
701     i16 %1,
702     iXLen %2)
704   ret <vscale x 32 x i1> %a
707 declare <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i32.i32(
708   <vscale x 1 x i32>,
709   i32,
710   iXLen);
712 define <vscale x 1 x i1> @intrinsic_vmadc_vx_nxv1i1_nxv1i32_i32(<vscale x 1 x i32> %0, i32 %1, iXLen %2) nounwind {
713 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv1i1_nxv1i32_i32:
714 ; CHECK:       # %bb.0: # %entry
715 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
716 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
717 ; CHECK-NEXT:    ret
718 entry:
719   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i32.i32(
720     <vscale x 1 x i32> %0,
721     i32 %1,
722     iXLen %2)
724   ret <vscale x 1 x i1> %a
727 declare <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i32.i32(
728   <vscale x 2 x i32>,
729   i32,
730   iXLen);
732 define <vscale x 2 x i1> @intrinsic_vmadc_vx_nxv2i1_nxv2i32_i32(<vscale x 2 x i32> %0, i32 %1, iXLen %2) nounwind {
733 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv2i1_nxv2i32_i32:
734 ; CHECK:       # %bb.0: # %entry
735 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
736 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
737 ; CHECK-NEXT:    ret
738 entry:
739   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i32.i32(
740     <vscale x 2 x i32> %0,
741     i32 %1,
742     iXLen %2)
744   ret <vscale x 2 x i1> %a
747 declare <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i32.i32(
748   <vscale x 4 x i32>,
749   i32,
750   iXLen);
752 define <vscale x 4 x i1> @intrinsic_vmadc_vx_nxv4i1_nxv4i32_i32(<vscale x 4 x i32> %0, i32 %1, iXLen %2) nounwind {
753 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv4i1_nxv4i32_i32:
754 ; CHECK:       # %bb.0: # %entry
755 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
756 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
757 ; CHECK-NEXT:    ret
758 entry:
759   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i32.i32(
760     <vscale x 4 x i32> %0,
761     i32 %1,
762     iXLen %2)
764   ret <vscale x 4 x i1> %a
767 declare <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i32.i32(
768   <vscale x 8 x i32>,
769   i32,
770   iXLen);
772 define <vscale x 8 x i1> @intrinsic_vmadc_vx_nxv8i1_nxv8i32_i32(<vscale x 8 x i32> %0, i32 %1, iXLen %2) nounwind {
773 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv8i1_nxv8i32_i32:
774 ; CHECK:       # %bb.0: # %entry
775 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
776 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
777 ; CHECK-NEXT:    ret
778 entry:
779   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i32.i32(
780     <vscale x 8 x i32> %0,
781     i32 %1,
782     iXLen %2)
784   ret <vscale x 8 x i1> %a
787 declare <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i32.i32(
788   <vscale x 16 x i32>,
789   i32,
790   iXLen);
792 define <vscale x 16 x i1> @intrinsic_vmadc_vx_nxv16i1_nxv16i32_i32(<vscale x 16 x i32> %0, i32 %1, iXLen %2) nounwind {
793 ; CHECK-LABEL: intrinsic_vmadc_vx_nxv16i1_nxv16i32_i32:
794 ; CHECK:       # %bb.0: # %entry
795 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
796 ; CHECK-NEXT:    vmadc.vx v0, v8, a0
797 ; CHECK-NEXT:    ret
798 entry:
799   %a = call <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i32.i32(
800     <vscale x 16 x i32> %0,
801     i32 %1,
802     iXLen %2)
804   ret <vscale x 16 x i1> %a
807 declare <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i64.i64(
808   <vscale x 1 x i64>,
809   i64,
810   iXLen);
812 define <vscale x 1 x i1> @intrinsic_vmadc_vx_nxv1i1_nxv1i64_i64(<vscale x 1 x i64> %0, i64 %1, iXLen %2) nounwind {
813 ; RV32-LABEL: intrinsic_vmadc_vx_nxv1i1_nxv1i64_i64:
814 ; RV32:       # %bb.0: # %entry
815 ; RV32-NEXT:    addi sp, sp, -16
816 ; RV32-NEXT:    sw a1, 12(sp)
817 ; RV32-NEXT:    sw a0, 8(sp)
818 ; RV32-NEXT:    addi a0, sp, 8
819 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
820 ; RV32-NEXT:    vlse64.v v9, (a0), zero
821 ; RV32-NEXT:    vmadc.vv v0, v8, v9
822 ; RV32-NEXT:    addi sp, sp, 16
823 ; RV32-NEXT:    ret
825 ; RV64-LABEL: intrinsic_vmadc_vx_nxv1i1_nxv1i64_i64:
826 ; RV64:       # %bb.0: # %entry
827 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
828 ; RV64-NEXT:    vmadc.vx v0, v8, a0
829 ; RV64-NEXT:    ret
830 entry:
831   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i64.i64(
832     <vscale x 1 x i64> %0,
833     i64 %1,
834     iXLen %2)
836   ret <vscale x 1 x i1> %a
839 declare <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i64.i64(
840   <vscale x 2 x i64>,
841   i64,
842   iXLen);
844 define <vscale x 2 x i1> @intrinsic_vmadc_vx_nxv2i1_nxv2i64_i64(<vscale x 2 x i64> %0, i64 %1, iXLen %2) nounwind {
845 ; RV32-LABEL: intrinsic_vmadc_vx_nxv2i1_nxv2i64_i64:
846 ; RV32:       # %bb.0: # %entry
847 ; RV32-NEXT:    addi sp, sp, -16
848 ; RV32-NEXT:    sw a1, 12(sp)
849 ; RV32-NEXT:    sw a0, 8(sp)
850 ; RV32-NEXT:    addi a0, sp, 8
851 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
852 ; RV32-NEXT:    vlse64.v v10, (a0), zero
853 ; RV32-NEXT:    vmadc.vv v0, v8, v10
854 ; RV32-NEXT:    addi sp, sp, 16
855 ; RV32-NEXT:    ret
857 ; RV64-LABEL: intrinsic_vmadc_vx_nxv2i1_nxv2i64_i64:
858 ; RV64:       # %bb.0: # %entry
859 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
860 ; RV64-NEXT:    vmadc.vx v0, v8, a0
861 ; RV64-NEXT:    ret
862 entry:
863   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i64.i64(
864     <vscale x 2 x i64> %0,
865     i64 %1,
866     iXLen %2)
868   ret <vscale x 2 x i1> %a
871 declare <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i64.i64(
872   <vscale x 4 x i64>,
873   i64,
874   iXLen);
876 define <vscale x 4 x i1> @intrinsic_vmadc_vx_nxv4i1_nxv4i64_i64(<vscale x 4 x i64> %0, i64 %1, iXLen %2) nounwind {
877 ; RV32-LABEL: intrinsic_vmadc_vx_nxv4i1_nxv4i64_i64:
878 ; RV32:       # %bb.0: # %entry
879 ; RV32-NEXT:    addi sp, sp, -16
880 ; RV32-NEXT:    sw a1, 12(sp)
881 ; RV32-NEXT:    sw a0, 8(sp)
882 ; RV32-NEXT:    addi a0, sp, 8
883 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
884 ; RV32-NEXT:    vlse64.v v12, (a0), zero
885 ; RV32-NEXT:    vmadc.vv v0, v8, v12
886 ; RV32-NEXT:    addi sp, sp, 16
887 ; RV32-NEXT:    ret
889 ; RV64-LABEL: intrinsic_vmadc_vx_nxv4i1_nxv4i64_i64:
890 ; RV64:       # %bb.0: # %entry
891 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
892 ; RV64-NEXT:    vmadc.vx v0, v8, a0
893 ; RV64-NEXT:    ret
894 entry:
895   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i64.i64(
896     <vscale x 4 x i64> %0,
897     i64 %1,
898     iXLen %2)
900   ret <vscale x 4 x i1> %a
903 declare <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i64.i64(
904   <vscale x 8 x i64>,
905   i64,
906   iXLen);
908 define <vscale x 8 x i1> @intrinsic_vmadc_vx_nxv8i1_nxv8i64_i64(<vscale x 8 x i64> %0, i64 %1, iXLen %2) nounwind {
909 ; RV32-LABEL: intrinsic_vmadc_vx_nxv8i1_nxv8i64_i64:
910 ; RV32:       # %bb.0: # %entry
911 ; RV32-NEXT:    addi sp, sp, -16
912 ; RV32-NEXT:    sw a1, 12(sp)
913 ; RV32-NEXT:    sw a0, 8(sp)
914 ; RV32-NEXT:    addi a0, sp, 8
915 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
916 ; RV32-NEXT:    vlse64.v v16, (a0), zero
917 ; RV32-NEXT:    vmadc.vv v0, v8, v16
918 ; RV32-NEXT:    addi sp, sp, 16
919 ; RV32-NEXT:    ret
921 ; RV64-LABEL: intrinsic_vmadc_vx_nxv8i1_nxv8i64_i64:
922 ; RV64:       # %bb.0: # %entry
923 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
924 ; RV64-NEXT:    vmadc.vx v0, v8, a0
925 ; RV64-NEXT:    ret
926 entry:
927   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i64.i64(
928     <vscale x 8 x i64> %0,
929     i64 %1,
930     iXLen %2)
932   ret <vscale x 8 x i1> %a
935 define <vscale x 1 x i1> @intrinsic_vmadc_vi_nxv1i1_nxv1i8_i8(<vscale x 1 x i8> %0, iXLen %1) nounwind {
936 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv1i1_nxv1i8_i8:
937 ; CHECK:       # %bb.0: # %entry
938 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
939 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
940 ; CHECK-NEXT:    ret
941 entry:
942   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i8.i8(
943     <vscale x 1 x i8> %0,
944     i8 9,
945     iXLen %1)
947   ret <vscale x 1 x i1> %a
950 define <vscale x 2 x i1> @intrinsic_vmadc_vi_nxv2i1_nxv2i8_i8(<vscale x 2 x i8> %0, iXLen %1) nounwind {
951 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv2i1_nxv2i8_i8:
952 ; CHECK:       # %bb.0: # %entry
953 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
954 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
955 ; CHECK-NEXT:    ret
956 entry:
957   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i8.i8(
958     <vscale x 2 x i8> %0,
959     i8 -9,
960     iXLen %1)
962   ret <vscale x 2 x i1> %a
965 define <vscale x 4 x i1> @intrinsic_vmadc_vi_nxv4i1_nxv4i8_i8(<vscale x 4 x i8> %0, iXLen %1) nounwind {
966 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv4i1_nxv4i8_i8:
967 ; CHECK:       # %bb.0: # %entry
968 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
969 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
970 ; CHECK-NEXT:    ret
971 entry:
972   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i8.i8(
973     <vscale x 4 x i8> %0,
974     i8 9,
975     iXLen %1)
977   ret <vscale x 4 x i1> %a
980 define <vscale x 8 x i1> @intrinsic_vmadc_vi_nxv8i1_nxv8i8_i8(<vscale x 8 x i8> %0, iXLen %1) nounwind {
981 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv8i1_nxv8i8_i8:
982 ; CHECK:       # %bb.0: # %entry
983 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
984 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
985 ; CHECK-NEXT:    ret
986 entry:
987   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i8.i8(
988     <vscale x 8 x i8> %0,
989     i8 -9,
990     iXLen %1)
992   ret <vscale x 8 x i1> %a
995 define <vscale x 16 x i1> @intrinsic_vmadc_vi_nxv16i1_nxv16i8_i8(<vscale x 16 x i8> %0, iXLen %1) nounwind {
996 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv16i1_nxv16i8_i8:
997 ; CHECK:       # %bb.0: # %entry
998 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
999 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
1000 ; CHECK-NEXT:    ret
1001 entry:
1002   %a = call <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i8.i8(
1003     <vscale x 16 x i8> %0,
1004     i8 9,
1005     iXLen %1)
1007   ret <vscale x 16 x i1> %a
1010 define <vscale x 32 x i1> @intrinsic_vmadc_vi_nxv32i1_nxv32i8_i8(<vscale x 32 x i8> %0, iXLen %1) nounwind {
1011 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv32i1_nxv32i8_i8:
1012 ; CHECK:       # %bb.0: # %entry
1013 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
1014 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
1015 ; CHECK-NEXT:    ret
1016 entry:
1017   %a = call <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i8.i8(
1018     <vscale x 32 x i8> %0,
1019     i8 -9,
1020     iXLen %1)
1022   ret <vscale x 32 x i1> %a
1025 define <vscale x 64 x i1> @intrinsic_vmadc_vi_nxv64i1_nxv64i8_i8(<vscale x 64 x i8> %0, iXLen %1) nounwind {
1026 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv64i1_nxv64i8_i8:
1027 ; CHECK:       # %bb.0: # %entry
1028 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
1029 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
1030 ; CHECK-NEXT:    ret
1031 entry:
1032   %a = call <vscale x 64 x i1> @llvm.riscv.vmadc.nxv64i8.i8(
1033     <vscale x 64 x i8> %0,
1034     i8 9,
1035     iXLen %1)
1037   ret <vscale x 64 x i1> %a
1040 define <vscale x 1 x i1> @intrinsic_vmadc_vi_nxv1i1_nxv1i16_i16(<vscale x 1 x i16> %0, iXLen %1) nounwind {
1041 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv1i1_nxv1i16_i16:
1042 ; CHECK:       # %bb.0: # %entry
1043 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
1044 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
1045 ; CHECK-NEXT:    ret
1046 entry:
1047   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i16.i16(
1048     <vscale x 1 x i16> %0,
1049     i16 -9,
1050     iXLen %1)
1052   ret <vscale x 1 x i1> %a
1055 define <vscale x 2 x i1> @intrinsic_vmadc_vi_nxv2i1_nxv2i16_i16(<vscale x 2 x i16> %0, iXLen %1) nounwind {
1056 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv2i1_nxv2i16_i16:
1057 ; CHECK:       # %bb.0: # %entry
1058 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
1059 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
1060 ; CHECK-NEXT:    ret
1061 entry:
1062   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i16.i16(
1063     <vscale x 2 x i16> %0,
1064     i16 9,
1065     iXLen %1)
1067   ret <vscale x 2 x i1> %a
1070 define <vscale x 4 x i1> @intrinsic_vmadc_vi_nxv4i1_nxv4i16_i16(<vscale x 4 x i16> %0, iXLen %1) nounwind {
1071 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv4i1_nxv4i16_i16:
1072 ; CHECK:       # %bb.0: # %entry
1073 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1074 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
1075 ; CHECK-NEXT:    ret
1076 entry:
1077   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i16.i16(
1078     <vscale x 4 x i16> %0,
1079     i16 -9,
1080     iXLen %1)
1082   ret <vscale x 4 x i1> %a
1085 define <vscale x 8 x i1> @intrinsic_vmadc_vi_nxv8i1_nxv8i16_i16(<vscale x 8 x i16> %0, iXLen %1) nounwind {
1086 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv8i1_nxv8i16_i16:
1087 ; CHECK:       # %bb.0: # %entry
1088 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
1089 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
1090 ; CHECK-NEXT:    ret
1091 entry:
1092   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i16.i16(
1093     <vscale x 8 x i16> %0,
1094     i16 9,
1095     iXLen %1)
1097   ret <vscale x 8 x i1> %a
1100 define <vscale x 16 x i1> @intrinsic_vmadc_vi_nxv16i1_nxv16i16_i16(<vscale x 16 x i16> %0, iXLen %1) nounwind {
1101 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv16i1_nxv16i16_i16:
1102 ; CHECK:       # %bb.0: # %entry
1103 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
1104 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
1105 ; CHECK-NEXT:    ret
1106 entry:
1107   %a = call <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i16.i16(
1108     <vscale x 16 x i16> %0,
1109     i16 -9,
1110     iXLen %1)
1112   ret <vscale x 16 x i1> %a
1115 define <vscale x 32 x i1> @intrinsic_vmadc_vi_nxv32i1_nxv32i16_i16(<vscale x 32 x i16> %0, iXLen %1) nounwind {
1116 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv32i1_nxv32i16_i16:
1117 ; CHECK:       # %bb.0: # %entry
1118 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1119 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
1120 ; CHECK-NEXT:    ret
1121 entry:
1122   %a = call <vscale x 32 x i1> @llvm.riscv.vmadc.nxv32i16.i16(
1123     <vscale x 32 x i16> %0,
1124     i16 9,
1125     iXLen %1)
1127   ret <vscale x 32 x i1> %a
1130 define <vscale x 1 x i1> @intrinsic_vmadc_vi_nxv1i1_nxv1i32_i32(<vscale x 1 x i32> %0, iXLen %1) nounwind {
1131 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv1i1_nxv1i32_i32:
1132 ; CHECK:       # %bb.0: # %entry
1133 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1134 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
1135 ; CHECK-NEXT:    ret
1136 entry:
1137   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i32.i32(
1138     <vscale x 1 x i32> %0,
1139     i32 -9,
1140     iXLen %1)
1142   ret <vscale x 1 x i1> %a
1145 define <vscale x 2 x i1> @intrinsic_vmadc_vi_nxv2i1_nxv2i32_i32(<vscale x 2 x i32> %0, iXLen %1) nounwind {
1146 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv2i1_nxv2i32_i32:
1147 ; CHECK:       # %bb.0: # %entry
1148 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1149 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
1150 ; CHECK-NEXT:    ret
1151 entry:
1152   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i32.i32(
1153     <vscale x 2 x i32> %0,
1154     i32 9,
1155     iXLen %1)
1157   ret <vscale x 2 x i1> %a
1160 define <vscale x 4 x i1> @intrinsic_vmadc_vi_nxv4i1_nxv4i32_i32(<vscale x 4 x i32> %0, iXLen %1) nounwind {
1161 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv4i1_nxv4i32_i32:
1162 ; CHECK:       # %bb.0: # %entry
1163 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1164 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
1165 ; CHECK-NEXT:    ret
1166 entry:
1167   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i32.i32(
1168     <vscale x 4 x i32> %0,
1169     i32 -9,
1170     iXLen %1)
1172   ret <vscale x 4 x i1> %a
1175 define <vscale x 8 x i1> @intrinsic_vmadc_vi_nxv8i1_nxv8i32_i32(<vscale x 8 x i32> %0, iXLen %1) nounwind {
1176 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv8i1_nxv8i32_i32:
1177 ; CHECK:       # %bb.0: # %entry
1178 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1179 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
1180 ; CHECK-NEXT:    ret
1181 entry:
1182   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i32.i32(
1183     <vscale x 8 x i32> %0,
1184     i32 9,
1185     iXLen %1)
1187   ret <vscale x 8 x i1> %a
1190 define <vscale x 16 x i1> @intrinsic_vmadc_vi_nxv16i1_nxv16i32_i32(<vscale x 16 x i32> %0, iXLen %1) nounwind {
1191 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv16i1_nxv16i32_i32:
1192 ; CHECK:       # %bb.0: # %entry
1193 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1194 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
1195 ; CHECK-NEXT:    ret
1196 entry:
1197   %a = call <vscale x 16 x i1> @llvm.riscv.vmadc.nxv16i32.i32(
1198     <vscale x 16 x i32> %0,
1199     i32 -9,
1200     iXLen %1)
1202   ret <vscale x 16 x i1> %a
1205 define <vscale x 1 x i1> @intrinsic_vmadc_vi_nxv1i1_nxv1i64_i64(<vscale x 1 x i64> %0, iXLen %1) nounwind {
1206 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv1i1_nxv1i64_i64:
1207 ; CHECK:       # %bb.0: # %entry
1208 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1209 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
1210 ; CHECK-NEXT:    ret
1211 entry:
1212   %a = call <vscale x 1 x i1> @llvm.riscv.vmadc.nxv1i64.i64(
1213     <vscale x 1 x i64> %0,
1214     i64 9,
1215     iXLen %1)
1217   ret <vscale x 1 x i1> %a
1220 define <vscale x 2 x i1> @intrinsic_vmadc_vi_nxv2i1_nxv2i64_i64(<vscale x 2 x i64> %0, iXLen %1) nounwind {
1221 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv2i1_nxv2i64_i64:
1222 ; CHECK:       # %bb.0: # %entry
1223 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1224 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
1225 ; CHECK-NEXT:    ret
1226 entry:
1227   %a = call <vscale x 2 x i1> @llvm.riscv.vmadc.nxv2i64.i64(
1228     <vscale x 2 x i64> %0,
1229     i64 -9,
1230     iXLen %1)
1232   ret <vscale x 2 x i1> %a
1235 define <vscale x 4 x i1> @intrinsic_vmadc_vi_nxv4i1_nxv4i64_i64(<vscale x 4 x i64> %0, iXLen %1) nounwind {
1236 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv4i1_nxv4i64_i64:
1237 ; CHECK:       # %bb.0: # %entry
1238 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1239 ; CHECK-NEXT:    vmadc.vi v0, v8, 9
1240 ; CHECK-NEXT:    ret
1241 entry:
1242   %a = call <vscale x 4 x i1> @llvm.riscv.vmadc.nxv4i64.i64(
1243     <vscale x 4 x i64> %0,
1244     i64 9,
1245     iXLen %1)
1247   ret <vscale x 4 x i1> %a
1250 define <vscale x 8 x i1> @intrinsic_vmadc_vi_nxv8i1_nxv8i64_i64(<vscale x 8 x i64> %0, iXLen %1) nounwind {
1251 ; CHECK-LABEL: intrinsic_vmadc_vi_nxv8i1_nxv8i64_i64:
1252 ; CHECK:       # %bb.0: # %entry
1253 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1254 ; CHECK-NEXT:    vmadc.vi v0, v8, -9
1255 ; CHECK-NEXT:    ret
1256 entry:
1257   %a = call <vscale x 8 x i1> @llvm.riscv.vmadc.nxv8i64.i64(
1258     <vscale x 8 x i64> %0,
1259     i64 -9,
1260     iXLen %1)
1262   ret <vscale x 8 x i1> %a