[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vssub-rv32.ll
blobf3ba5daafb683800882b075d7164f777bb17a908
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs \
3 ; RUN:   < %s | FileCheck %s
5 declare <vscale x 1 x i8> @llvm.riscv.vssub.nxv1i8.nxv1i8(
6   <vscale x 1 x i8>,
7   <vscale x 1 x i8>,
8   <vscale x 1 x i8>,
9   i32);
11 define <vscale x 1 x i8> @intrinsic_vssub_vv_nxv1i8_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i32 %2) nounwind {
12 ; CHECK-LABEL: intrinsic_vssub_vv_nxv1i8_nxv1i8_nxv1i8:
13 ; CHECK:       # %bb.0: # %entry
14 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
15 ; CHECK-NEXT:    vssub.vv v8, v8, v9
16 ; CHECK-NEXT:    ret
17 entry:
18   %a = call <vscale x 1 x i8> @llvm.riscv.vssub.nxv1i8.nxv1i8(
19     <vscale x 1 x i8> undef,
20     <vscale x 1 x i8> %0,
21     <vscale x 1 x i8> %1,
22     i32 %2)
24   ret <vscale x 1 x i8> %a
27 declare <vscale x 1 x i8> @llvm.riscv.vssub.mask.nxv1i8.nxv1i8(
28   <vscale x 1 x i8>,
29   <vscale x 1 x i8>,
30   <vscale x 1 x i8>,
31   <vscale x 1 x i1>,
32   i32,
33   i32);
35 define <vscale x 1 x i8> @intrinsic_vssub_mask_vv_nxv1i8_nxv1i8_nxv1i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, <vscale x 1 x i8> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
36 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv1i8_nxv1i8_nxv1i8:
37 ; CHECK:       # %bb.0: # %entry
38 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, mu
39 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
40 ; CHECK-NEXT:    ret
41 entry:
42   %a = call <vscale x 1 x i8> @llvm.riscv.vssub.mask.nxv1i8.nxv1i8(
43     <vscale x 1 x i8> %0,
44     <vscale x 1 x i8> %1,
45     <vscale x 1 x i8> %2,
46     <vscale x 1 x i1> %3,
47     i32 %4, i32 1)
49   ret <vscale x 1 x i8> %a
52 declare <vscale x 2 x i8> @llvm.riscv.vssub.nxv2i8.nxv2i8(
53   <vscale x 2 x i8>,
54   <vscale x 2 x i8>,
55   <vscale x 2 x i8>,
56   i32);
58 define <vscale x 2 x i8> @intrinsic_vssub_vv_nxv2i8_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, i32 %2) nounwind {
59 ; CHECK-LABEL: intrinsic_vssub_vv_nxv2i8_nxv2i8_nxv2i8:
60 ; CHECK:       # %bb.0: # %entry
61 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
62 ; CHECK-NEXT:    vssub.vv v8, v8, v9
63 ; CHECK-NEXT:    ret
64 entry:
65   %a = call <vscale x 2 x i8> @llvm.riscv.vssub.nxv2i8.nxv2i8(
66     <vscale x 2 x i8> undef,
67     <vscale x 2 x i8> %0,
68     <vscale x 2 x i8> %1,
69     i32 %2)
71   ret <vscale x 2 x i8> %a
74 declare <vscale x 2 x i8> @llvm.riscv.vssub.mask.nxv2i8.nxv2i8(
75   <vscale x 2 x i8>,
76   <vscale x 2 x i8>,
77   <vscale x 2 x i8>,
78   <vscale x 2 x i1>,
79   i32,
80   i32);
82 define <vscale x 2 x i8> @intrinsic_vssub_mask_vv_nxv2i8_nxv2i8_nxv2i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, <vscale x 2 x i8> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
83 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv2i8_nxv2i8_nxv2i8:
84 ; CHECK:       # %bb.0: # %entry
85 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, mu
86 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
87 ; CHECK-NEXT:    ret
88 entry:
89   %a = call <vscale x 2 x i8> @llvm.riscv.vssub.mask.nxv2i8.nxv2i8(
90     <vscale x 2 x i8> %0,
91     <vscale x 2 x i8> %1,
92     <vscale x 2 x i8> %2,
93     <vscale x 2 x i1> %3,
94     i32 %4, i32 1)
96   ret <vscale x 2 x i8> %a
99 declare <vscale x 4 x i8> @llvm.riscv.vssub.nxv4i8.nxv4i8(
100   <vscale x 4 x i8>,
101   <vscale x 4 x i8>,
102   <vscale x 4 x i8>,
103   i32);
105 define <vscale x 4 x i8> @intrinsic_vssub_vv_nxv4i8_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, i32 %2) nounwind {
106 ; CHECK-LABEL: intrinsic_vssub_vv_nxv4i8_nxv4i8_nxv4i8:
107 ; CHECK:       # %bb.0: # %entry
108 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
109 ; CHECK-NEXT:    vssub.vv v8, v8, v9
110 ; CHECK-NEXT:    ret
111 entry:
112   %a = call <vscale x 4 x i8> @llvm.riscv.vssub.nxv4i8.nxv4i8(
113     <vscale x 4 x i8> undef,
114     <vscale x 4 x i8> %0,
115     <vscale x 4 x i8> %1,
116     i32 %2)
118   ret <vscale x 4 x i8> %a
121 declare <vscale x 4 x i8> @llvm.riscv.vssub.mask.nxv4i8.nxv4i8(
122   <vscale x 4 x i8>,
123   <vscale x 4 x i8>,
124   <vscale x 4 x i8>,
125   <vscale x 4 x i1>,
126   i32,
127   i32);
129 define <vscale x 4 x i8> @intrinsic_vssub_mask_vv_nxv4i8_nxv4i8_nxv4i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, <vscale x 4 x i8> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
130 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv4i8_nxv4i8_nxv4i8:
131 ; CHECK:       # %bb.0: # %entry
132 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, mu
133 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
134 ; CHECK-NEXT:    ret
135 entry:
136   %a = call <vscale x 4 x i8> @llvm.riscv.vssub.mask.nxv4i8.nxv4i8(
137     <vscale x 4 x i8> %0,
138     <vscale x 4 x i8> %1,
139     <vscale x 4 x i8> %2,
140     <vscale x 4 x i1> %3,
141     i32 %4, i32 1)
143   ret <vscale x 4 x i8> %a
146 declare <vscale x 8 x i8> @llvm.riscv.vssub.nxv8i8.nxv8i8(
147   <vscale x 8 x i8>,
148   <vscale x 8 x i8>,
149   <vscale x 8 x i8>,
150   i32);
152 define <vscale x 8 x i8> @intrinsic_vssub_vv_nxv8i8_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, i32 %2) nounwind {
153 ; CHECK-LABEL: intrinsic_vssub_vv_nxv8i8_nxv8i8_nxv8i8:
154 ; CHECK:       # %bb.0: # %entry
155 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
156 ; CHECK-NEXT:    vssub.vv v8, v8, v9
157 ; CHECK-NEXT:    ret
158 entry:
159   %a = call <vscale x 8 x i8> @llvm.riscv.vssub.nxv8i8.nxv8i8(
160     <vscale x 8 x i8> undef,
161     <vscale x 8 x i8> %0,
162     <vscale x 8 x i8> %1,
163     i32 %2)
165   ret <vscale x 8 x i8> %a
168 declare <vscale x 8 x i8> @llvm.riscv.vssub.mask.nxv8i8.nxv8i8(
169   <vscale x 8 x i8>,
170   <vscale x 8 x i8>,
171   <vscale x 8 x i8>,
172   <vscale x 8 x i1>,
173   i32,
174   i32);
176 define <vscale x 8 x i8> @intrinsic_vssub_mask_vv_nxv8i8_nxv8i8_nxv8i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, <vscale x 8 x i8> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
177 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv8i8_nxv8i8_nxv8i8:
178 ; CHECK:       # %bb.0: # %entry
179 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, mu
180 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
181 ; CHECK-NEXT:    ret
182 entry:
183   %a = call <vscale x 8 x i8> @llvm.riscv.vssub.mask.nxv8i8.nxv8i8(
184     <vscale x 8 x i8> %0,
185     <vscale x 8 x i8> %1,
186     <vscale x 8 x i8> %2,
187     <vscale x 8 x i1> %3,
188     i32 %4, i32 1)
190   ret <vscale x 8 x i8> %a
193 declare <vscale x 16 x i8> @llvm.riscv.vssub.nxv16i8.nxv16i8(
194   <vscale x 16 x i8>,
195   <vscale x 16 x i8>,
196   <vscale x 16 x i8>,
197   i32);
199 define <vscale x 16 x i8> @intrinsic_vssub_vv_nxv16i8_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, i32 %2) nounwind {
200 ; CHECK-LABEL: intrinsic_vssub_vv_nxv16i8_nxv16i8_nxv16i8:
201 ; CHECK:       # %bb.0: # %entry
202 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
203 ; CHECK-NEXT:    vssub.vv v8, v8, v10
204 ; CHECK-NEXT:    ret
205 entry:
206   %a = call <vscale x 16 x i8> @llvm.riscv.vssub.nxv16i8.nxv16i8(
207     <vscale x 16 x i8> undef,
208     <vscale x 16 x i8> %0,
209     <vscale x 16 x i8> %1,
210     i32 %2)
212   ret <vscale x 16 x i8> %a
215 declare <vscale x 16 x i8> @llvm.riscv.vssub.mask.nxv16i8.nxv16i8(
216   <vscale x 16 x i8>,
217   <vscale x 16 x i8>,
218   <vscale x 16 x i8>,
219   <vscale x 16 x i1>,
220   i32,
221   i32);
223 define <vscale x 16 x i8> @intrinsic_vssub_mask_vv_nxv16i8_nxv16i8_nxv16i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, <vscale x 16 x i8> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
224 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv16i8_nxv16i8_nxv16i8:
225 ; CHECK:       # %bb.0: # %entry
226 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, mu
227 ; CHECK-NEXT:    vssub.vv v8, v10, v12, v0.t
228 ; CHECK-NEXT:    ret
229 entry:
230   %a = call <vscale x 16 x i8> @llvm.riscv.vssub.mask.nxv16i8.nxv16i8(
231     <vscale x 16 x i8> %0,
232     <vscale x 16 x i8> %1,
233     <vscale x 16 x i8> %2,
234     <vscale x 16 x i1> %3,
235     i32 %4, i32 1)
237   ret <vscale x 16 x i8> %a
240 declare <vscale x 32 x i8> @llvm.riscv.vssub.nxv32i8.nxv32i8(
241   <vscale x 32 x i8>,
242   <vscale x 32 x i8>,
243   <vscale x 32 x i8>,
244   i32);
246 define <vscale x 32 x i8> @intrinsic_vssub_vv_nxv32i8_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, i32 %2) nounwind {
247 ; CHECK-LABEL: intrinsic_vssub_vv_nxv32i8_nxv32i8_nxv32i8:
248 ; CHECK:       # %bb.0: # %entry
249 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
250 ; CHECK-NEXT:    vssub.vv v8, v8, v12
251 ; CHECK-NEXT:    ret
252 entry:
253   %a = call <vscale x 32 x i8> @llvm.riscv.vssub.nxv32i8.nxv32i8(
254     <vscale x 32 x i8> undef,
255     <vscale x 32 x i8> %0,
256     <vscale x 32 x i8> %1,
257     i32 %2)
259   ret <vscale x 32 x i8> %a
262 declare <vscale x 32 x i8> @llvm.riscv.vssub.mask.nxv32i8.nxv32i8(
263   <vscale x 32 x i8>,
264   <vscale x 32 x i8>,
265   <vscale x 32 x i8>,
266   <vscale x 32 x i1>,
267   i32,
268   i32);
270 define <vscale x 32 x i8> @intrinsic_vssub_mask_vv_nxv32i8_nxv32i8_nxv32i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, <vscale x 32 x i8> %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
271 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv32i8_nxv32i8_nxv32i8:
272 ; CHECK:       # %bb.0: # %entry
273 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, mu
274 ; CHECK-NEXT:    vssub.vv v8, v12, v16, v0.t
275 ; CHECK-NEXT:    ret
276 entry:
277   %a = call <vscale x 32 x i8> @llvm.riscv.vssub.mask.nxv32i8.nxv32i8(
278     <vscale x 32 x i8> %0,
279     <vscale x 32 x i8> %1,
280     <vscale x 32 x i8> %2,
281     <vscale x 32 x i1> %3,
282     i32 %4, i32 1)
284   ret <vscale x 32 x i8> %a
287 declare <vscale x 64 x i8> @llvm.riscv.vssub.nxv64i8.nxv64i8(
288   <vscale x 64 x i8>,
289   <vscale x 64 x i8>,
290   <vscale x 64 x i8>,
291   i32);
293 define <vscale x 64 x i8> @intrinsic_vssub_vv_nxv64i8_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, i32 %2) nounwind {
294 ; CHECK-LABEL: intrinsic_vssub_vv_nxv64i8_nxv64i8_nxv64i8:
295 ; CHECK:       # %bb.0: # %entry
296 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
297 ; CHECK-NEXT:    vssub.vv v8, v8, v16
298 ; CHECK-NEXT:    ret
299 entry:
300   %a = call <vscale x 64 x i8> @llvm.riscv.vssub.nxv64i8.nxv64i8(
301     <vscale x 64 x i8> undef,
302     <vscale x 64 x i8> %0,
303     <vscale x 64 x i8> %1,
304     i32 %2)
306   ret <vscale x 64 x i8> %a
309 declare <vscale x 64 x i8> @llvm.riscv.vssub.mask.nxv64i8.nxv64i8(
310   <vscale x 64 x i8>,
311   <vscale x 64 x i8>,
312   <vscale x 64 x i8>,
313   <vscale x 64 x i1>,
314   i32,
315   i32);
317 define <vscale x 64 x i8> @intrinsic_vssub_mask_vv_nxv64i8_nxv64i8_nxv64i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, <vscale x 64 x i8> %2, <vscale x 64 x i1> %3, i32 %4) nounwind {
318 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv64i8_nxv64i8_nxv64i8:
319 ; CHECK:       # %bb.0: # %entry
320 ; CHECK-NEXT:    vl8r.v v24, (a0)
321 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
322 ; CHECK-NEXT:    vssub.vv v8, v16, v24, v0.t
323 ; CHECK-NEXT:    ret
324 entry:
325   %a = call <vscale x 64 x i8> @llvm.riscv.vssub.mask.nxv64i8.nxv64i8(
326     <vscale x 64 x i8> %0,
327     <vscale x 64 x i8> %1,
328     <vscale x 64 x i8> %2,
329     <vscale x 64 x i1> %3,
330     i32 %4, i32 1)
332   ret <vscale x 64 x i8> %a
335 declare <vscale x 1 x i16> @llvm.riscv.vssub.nxv1i16.nxv1i16(
336   <vscale x 1 x i16>,
337   <vscale x 1 x i16>,
338   <vscale x 1 x i16>,
339   i32);
341 define <vscale x 1 x i16> @intrinsic_vssub_vv_nxv1i16_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, i32 %2) nounwind {
342 ; CHECK-LABEL: intrinsic_vssub_vv_nxv1i16_nxv1i16_nxv1i16:
343 ; CHECK:       # %bb.0: # %entry
344 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
345 ; CHECK-NEXT:    vssub.vv v8, v8, v9
346 ; CHECK-NEXT:    ret
347 entry:
348   %a = call <vscale x 1 x i16> @llvm.riscv.vssub.nxv1i16.nxv1i16(
349     <vscale x 1 x i16> undef,
350     <vscale x 1 x i16> %0,
351     <vscale x 1 x i16> %1,
352     i32 %2)
354   ret <vscale x 1 x i16> %a
357 declare <vscale x 1 x i16> @llvm.riscv.vssub.mask.nxv1i16.nxv1i16(
358   <vscale x 1 x i16>,
359   <vscale x 1 x i16>,
360   <vscale x 1 x i16>,
361   <vscale x 1 x i1>,
362   i32,
363   i32);
365 define <vscale x 1 x i16> @intrinsic_vssub_mask_vv_nxv1i16_nxv1i16_nxv1i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, <vscale x 1 x i16> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
366 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv1i16_nxv1i16_nxv1i16:
367 ; CHECK:       # %bb.0: # %entry
368 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, mu
369 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
370 ; CHECK-NEXT:    ret
371 entry:
372   %a = call <vscale x 1 x i16> @llvm.riscv.vssub.mask.nxv1i16.nxv1i16(
373     <vscale x 1 x i16> %0,
374     <vscale x 1 x i16> %1,
375     <vscale x 1 x i16> %2,
376     <vscale x 1 x i1> %3,
377     i32 %4, i32 1)
379   ret <vscale x 1 x i16> %a
382 declare <vscale x 2 x i16> @llvm.riscv.vssub.nxv2i16.nxv2i16(
383   <vscale x 2 x i16>,
384   <vscale x 2 x i16>,
385   <vscale x 2 x i16>,
386   i32);
388 define <vscale x 2 x i16> @intrinsic_vssub_vv_nxv2i16_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, i32 %2) nounwind {
389 ; CHECK-LABEL: intrinsic_vssub_vv_nxv2i16_nxv2i16_nxv2i16:
390 ; CHECK:       # %bb.0: # %entry
391 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
392 ; CHECK-NEXT:    vssub.vv v8, v8, v9
393 ; CHECK-NEXT:    ret
394 entry:
395   %a = call <vscale x 2 x i16> @llvm.riscv.vssub.nxv2i16.nxv2i16(
396     <vscale x 2 x i16> undef,
397     <vscale x 2 x i16> %0,
398     <vscale x 2 x i16> %1,
399     i32 %2)
401   ret <vscale x 2 x i16> %a
404 declare <vscale x 2 x i16> @llvm.riscv.vssub.mask.nxv2i16.nxv2i16(
405   <vscale x 2 x i16>,
406   <vscale x 2 x i16>,
407   <vscale x 2 x i16>,
408   <vscale x 2 x i1>,
409   i32,
410   i32);
412 define <vscale x 2 x i16> @intrinsic_vssub_mask_vv_nxv2i16_nxv2i16_nxv2i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, <vscale x 2 x i16> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
413 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv2i16_nxv2i16_nxv2i16:
414 ; CHECK:       # %bb.0: # %entry
415 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, mu
416 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
417 ; CHECK-NEXT:    ret
418 entry:
419   %a = call <vscale x 2 x i16> @llvm.riscv.vssub.mask.nxv2i16.nxv2i16(
420     <vscale x 2 x i16> %0,
421     <vscale x 2 x i16> %1,
422     <vscale x 2 x i16> %2,
423     <vscale x 2 x i1> %3,
424     i32 %4, i32 1)
426   ret <vscale x 2 x i16> %a
429 declare <vscale x 4 x i16> @llvm.riscv.vssub.nxv4i16.nxv4i16(
430   <vscale x 4 x i16>,
431   <vscale x 4 x i16>,
432   <vscale x 4 x i16>,
433   i32);
435 define <vscale x 4 x i16> @intrinsic_vssub_vv_nxv4i16_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, i32 %2) nounwind {
436 ; CHECK-LABEL: intrinsic_vssub_vv_nxv4i16_nxv4i16_nxv4i16:
437 ; CHECK:       # %bb.0: # %entry
438 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
439 ; CHECK-NEXT:    vssub.vv v8, v8, v9
440 ; CHECK-NEXT:    ret
441 entry:
442   %a = call <vscale x 4 x i16> @llvm.riscv.vssub.nxv4i16.nxv4i16(
443     <vscale x 4 x i16> undef,
444     <vscale x 4 x i16> %0,
445     <vscale x 4 x i16> %1,
446     i32 %2)
448   ret <vscale x 4 x i16> %a
451 declare <vscale x 4 x i16> @llvm.riscv.vssub.mask.nxv4i16.nxv4i16(
452   <vscale x 4 x i16>,
453   <vscale x 4 x i16>,
454   <vscale x 4 x i16>,
455   <vscale x 4 x i1>,
456   i32,
457   i32);
459 define <vscale x 4 x i16> @intrinsic_vssub_mask_vv_nxv4i16_nxv4i16_nxv4i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, <vscale x 4 x i16> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
460 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv4i16_nxv4i16_nxv4i16:
461 ; CHECK:       # %bb.0: # %entry
462 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, mu
463 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
464 ; CHECK-NEXT:    ret
465 entry:
466   %a = call <vscale x 4 x i16> @llvm.riscv.vssub.mask.nxv4i16.nxv4i16(
467     <vscale x 4 x i16> %0,
468     <vscale x 4 x i16> %1,
469     <vscale x 4 x i16> %2,
470     <vscale x 4 x i1> %3,
471     i32 %4, i32 1)
473   ret <vscale x 4 x i16> %a
476 declare <vscale x 8 x i16> @llvm.riscv.vssub.nxv8i16.nxv8i16(
477   <vscale x 8 x i16>,
478   <vscale x 8 x i16>,
479   <vscale x 8 x i16>,
480   i32);
482 define <vscale x 8 x i16> @intrinsic_vssub_vv_nxv8i16_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, i32 %2) nounwind {
483 ; CHECK-LABEL: intrinsic_vssub_vv_nxv8i16_nxv8i16_nxv8i16:
484 ; CHECK:       # %bb.0: # %entry
485 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
486 ; CHECK-NEXT:    vssub.vv v8, v8, v10
487 ; CHECK-NEXT:    ret
488 entry:
489   %a = call <vscale x 8 x i16> @llvm.riscv.vssub.nxv8i16.nxv8i16(
490     <vscale x 8 x i16> undef,
491     <vscale x 8 x i16> %0,
492     <vscale x 8 x i16> %1,
493     i32 %2)
495   ret <vscale x 8 x i16> %a
498 declare <vscale x 8 x i16> @llvm.riscv.vssub.mask.nxv8i16.nxv8i16(
499   <vscale x 8 x i16>,
500   <vscale x 8 x i16>,
501   <vscale x 8 x i16>,
502   <vscale x 8 x i1>,
503   i32,
504   i32);
506 define <vscale x 8 x i16> @intrinsic_vssub_mask_vv_nxv8i16_nxv8i16_nxv8i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, <vscale x 8 x i16> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
507 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv8i16_nxv8i16_nxv8i16:
508 ; CHECK:       # %bb.0: # %entry
509 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, mu
510 ; CHECK-NEXT:    vssub.vv v8, v10, v12, v0.t
511 ; CHECK-NEXT:    ret
512 entry:
513   %a = call <vscale x 8 x i16> @llvm.riscv.vssub.mask.nxv8i16.nxv8i16(
514     <vscale x 8 x i16> %0,
515     <vscale x 8 x i16> %1,
516     <vscale x 8 x i16> %2,
517     <vscale x 8 x i1> %3,
518     i32 %4, i32 1)
520   ret <vscale x 8 x i16> %a
523 declare <vscale x 16 x i16> @llvm.riscv.vssub.nxv16i16.nxv16i16(
524   <vscale x 16 x i16>,
525   <vscale x 16 x i16>,
526   <vscale x 16 x i16>,
527   i32);
529 define <vscale x 16 x i16> @intrinsic_vssub_vv_nxv16i16_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, i32 %2) nounwind {
530 ; CHECK-LABEL: intrinsic_vssub_vv_nxv16i16_nxv16i16_nxv16i16:
531 ; CHECK:       # %bb.0: # %entry
532 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
533 ; CHECK-NEXT:    vssub.vv v8, v8, v12
534 ; CHECK-NEXT:    ret
535 entry:
536   %a = call <vscale x 16 x i16> @llvm.riscv.vssub.nxv16i16.nxv16i16(
537     <vscale x 16 x i16> undef,
538     <vscale x 16 x i16> %0,
539     <vscale x 16 x i16> %1,
540     i32 %2)
542   ret <vscale x 16 x i16> %a
545 declare <vscale x 16 x i16> @llvm.riscv.vssub.mask.nxv16i16.nxv16i16(
546   <vscale x 16 x i16>,
547   <vscale x 16 x i16>,
548   <vscale x 16 x i16>,
549   <vscale x 16 x i1>,
550   i32,
551   i32);
553 define <vscale x 16 x i16> @intrinsic_vssub_mask_vv_nxv16i16_nxv16i16_nxv16i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, <vscale x 16 x i16> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
554 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv16i16_nxv16i16_nxv16i16:
555 ; CHECK:       # %bb.0: # %entry
556 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu
557 ; CHECK-NEXT:    vssub.vv v8, v12, v16, v0.t
558 ; CHECK-NEXT:    ret
559 entry:
560   %a = call <vscale x 16 x i16> @llvm.riscv.vssub.mask.nxv16i16.nxv16i16(
561     <vscale x 16 x i16> %0,
562     <vscale x 16 x i16> %1,
563     <vscale x 16 x i16> %2,
564     <vscale x 16 x i1> %3,
565     i32 %4, i32 1)
567   ret <vscale x 16 x i16> %a
570 declare <vscale x 32 x i16> @llvm.riscv.vssub.nxv32i16.nxv32i16(
571   <vscale x 32 x i16>,
572   <vscale x 32 x i16>,
573   <vscale x 32 x i16>,
574   i32);
576 define <vscale x 32 x i16> @intrinsic_vssub_vv_nxv32i16_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, i32 %2) nounwind {
577 ; CHECK-LABEL: intrinsic_vssub_vv_nxv32i16_nxv32i16_nxv32i16:
578 ; CHECK:       # %bb.0: # %entry
579 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
580 ; CHECK-NEXT:    vssub.vv v8, v8, v16
581 ; CHECK-NEXT:    ret
582 entry:
583   %a = call <vscale x 32 x i16> @llvm.riscv.vssub.nxv32i16.nxv32i16(
584     <vscale x 32 x i16> undef,
585     <vscale x 32 x i16> %0,
586     <vscale x 32 x i16> %1,
587     i32 %2)
589   ret <vscale x 32 x i16> %a
592 declare <vscale x 32 x i16> @llvm.riscv.vssub.mask.nxv32i16.nxv32i16(
593   <vscale x 32 x i16>,
594   <vscale x 32 x i16>,
595   <vscale x 32 x i16>,
596   <vscale x 32 x i1>,
597   i32,
598   i32);
600 define <vscale x 32 x i16> @intrinsic_vssub_mask_vv_nxv32i16_nxv32i16_nxv32i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, <vscale x 32 x i16> %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
601 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv32i16_nxv32i16_nxv32i16:
602 ; CHECK:       # %bb.0: # %entry
603 ; CHECK-NEXT:    vl8re16.v v24, (a0)
604 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
605 ; CHECK-NEXT:    vssub.vv v8, v16, v24, v0.t
606 ; CHECK-NEXT:    ret
607 entry:
608   %a = call <vscale x 32 x i16> @llvm.riscv.vssub.mask.nxv32i16.nxv32i16(
609     <vscale x 32 x i16> %0,
610     <vscale x 32 x i16> %1,
611     <vscale x 32 x i16> %2,
612     <vscale x 32 x i1> %3,
613     i32 %4, i32 1)
615   ret <vscale x 32 x i16> %a
618 declare <vscale x 1 x i32> @llvm.riscv.vssub.nxv1i32.nxv1i32(
619   <vscale x 1 x i32>,
620   <vscale x 1 x i32>,
621   <vscale x 1 x i32>,
622   i32);
624 define <vscale x 1 x i32> @intrinsic_vssub_vv_nxv1i32_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, i32 %2) nounwind {
625 ; CHECK-LABEL: intrinsic_vssub_vv_nxv1i32_nxv1i32_nxv1i32:
626 ; CHECK:       # %bb.0: # %entry
627 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
628 ; CHECK-NEXT:    vssub.vv v8, v8, v9
629 ; CHECK-NEXT:    ret
630 entry:
631   %a = call <vscale x 1 x i32> @llvm.riscv.vssub.nxv1i32.nxv1i32(
632     <vscale x 1 x i32> undef,
633     <vscale x 1 x i32> %0,
634     <vscale x 1 x i32> %1,
635     i32 %2)
637   ret <vscale x 1 x i32> %a
640 declare <vscale x 1 x i32> @llvm.riscv.vssub.mask.nxv1i32.nxv1i32(
641   <vscale x 1 x i32>,
642   <vscale x 1 x i32>,
643   <vscale x 1 x i32>,
644   <vscale x 1 x i1>,
645   i32,
646   i32);
648 define <vscale x 1 x i32> @intrinsic_vssub_mask_vv_nxv1i32_nxv1i32_nxv1i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, <vscale x 1 x i32> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
649 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv1i32_nxv1i32_nxv1i32:
650 ; CHECK:       # %bb.0: # %entry
651 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, mu
652 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
653 ; CHECK-NEXT:    ret
654 entry:
655   %a = call <vscale x 1 x i32> @llvm.riscv.vssub.mask.nxv1i32.nxv1i32(
656     <vscale x 1 x i32> %0,
657     <vscale x 1 x i32> %1,
658     <vscale x 1 x i32> %2,
659     <vscale x 1 x i1> %3,
660     i32 %4, i32 1)
662   ret <vscale x 1 x i32> %a
665 declare <vscale x 2 x i32> @llvm.riscv.vssub.nxv2i32.nxv2i32(
666   <vscale x 2 x i32>,
667   <vscale x 2 x i32>,
668   <vscale x 2 x i32>,
669   i32);
671 define <vscale x 2 x i32> @intrinsic_vssub_vv_nxv2i32_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, i32 %2) nounwind {
672 ; CHECK-LABEL: intrinsic_vssub_vv_nxv2i32_nxv2i32_nxv2i32:
673 ; CHECK:       # %bb.0: # %entry
674 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
675 ; CHECK-NEXT:    vssub.vv v8, v8, v9
676 ; CHECK-NEXT:    ret
677 entry:
678   %a = call <vscale x 2 x i32> @llvm.riscv.vssub.nxv2i32.nxv2i32(
679     <vscale x 2 x i32> undef,
680     <vscale x 2 x i32> %0,
681     <vscale x 2 x i32> %1,
682     i32 %2)
684   ret <vscale x 2 x i32> %a
687 declare <vscale x 2 x i32> @llvm.riscv.vssub.mask.nxv2i32.nxv2i32(
688   <vscale x 2 x i32>,
689   <vscale x 2 x i32>,
690   <vscale x 2 x i32>,
691   <vscale x 2 x i1>,
692   i32,
693   i32);
695 define <vscale x 2 x i32> @intrinsic_vssub_mask_vv_nxv2i32_nxv2i32_nxv2i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, <vscale x 2 x i32> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
696 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv2i32_nxv2i32_nxv2i32:
697 ; CHECK:       # %bb.0: # %entry
698 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, mu
699 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
700 ; CHECK-NEXT:    ret
701 entry:
702   %a = call <vscale x 2 x i32> @llvm.riscv.vssub.mask.nxv2i32.nxv2i32(
703     <vscale x 2 x i32> %0,
704     <vscale x 2 x i32> %1,
705     <vscale x 2 x i32> %2,
706     <vscale x 2 x i1> %3,
707     i32 %4, i32 1)
709   ret <vscale x 2 x i32> %a
712 declare <vscale x 4 x i32> @llvm.riscv.vssub.nxv4i32.nxv4i32(
713   <vscale x 4 x i32>,
714   <vscale x 4 x i32>,
715   <vscale x 4 x i32>,
716   i32);
718 define <vscale x 4 x i32> @intrinsic_vssub_vv_nxv4i32_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, i32 %2) nounwind {
719 ; CHECK-LABEL: intrinsic_vssub_vv_nxv4i32_nxv4i32_nxv4i32:
720 ; CHECK:       # %bb.0: # %entry
721 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
722 ; CHECK-NEXT:    vssub.vv v8, v8, v10
723 ; CHECK-NEXT:    ret
724 entry:
725   %a = call <vscale x 4 x i32> @llvm.riscv.vssub.nxv4i32.nxv4i32(
726     <vscale x 4 x i32> undef,
727     <vscale x 4 x i32> %0,
728     <vscale x 4 x i32> %1,
729     i32 %2)
731   ret <vscale x 4 x i32> %a
734 declare <vscale x 4 x i32> @llvm.riscv.vssub.mask.nxv4i32.nxv4i32(
735   <vscale x 4 x i32>,
736   <vscale x 4 x i32>,
737   <vscale x 4 x i32>,
738   <vscale x 4 x i1>,
739   i32,
740   i32);
742 define <vscale x 4 x i32> @intrinsic_vssub_mask_vv_nxv4i32_nxv4i32_nxv4i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, <vscale x 4 x i32> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
743 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv4i32_nxv4i32_nxv4i32:
744 ; CHECK:       # %bb.0: # %entry
745 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, mu
746 ; CHECK-NEXT:    vssub.vv v8, v10, v12, v0.t
747 ; CHECK-NEXT:    ret
748 entry:
749   %a = call <vscale x 4 x i32> @llvm.riscv.vssub.mask.nxv4i32.nxv4i32(
750     <vscale x 4 x i32> %0,
751     <vscale x 4 x i32> %1,
752     <vscale x 4 x i32> %2,
753     <vscale x 4 x i1> %3,
754     i32 %4, i32 1)
756   ret <vscale x 4 x i32> %a
759 declare <vscale x 8 x i32> @llvm.riscv.vssub.nxv8i32.nxv8i32(
760   <vscale x 8 x i32>,
761   <vscale x 8 x i32>,
762   <vscale x 8 x i32>,
763   i32);
765 define <vscale x 8 x i32> @intrinsic_vssub_vv_nxv8i32_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, i32 %2) nounwind {
766 ; CHECK-LABEL: intrinsic_vssub_vv_nxv8i32_nxv8i32_nxv8i32:
767 ; CHECK:       # %bb.0: # %entry
768 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
769 ; CHECK-NEXT:    vssub.vv v8, v8, v12
770 ; CHECK-NEXT:    ret
771 entry:
772   %a = call <vscale x 8 x i32> @llvm.riscv.vssub.nxv8i32.nxv8i32(
773     <vscale x 8 x i32> undef,
774     <vscale x 8 x i32> %0,
775     <vscale x 8 x i32> %1,
776     i32 %2)
778   ret <vscale x 8 x i32> %a
781 declare <vscale x 8 x i32> @llvm.riscv.vssub.mask.nxv8i32.nxv8i32(
782   <vscale x 8 x i32>,
783   <vscale x 8 x i32>,
784   <vscale x 8 x i32>,
785   <vscale x 8 x i1>,
786   i32,
787   i32);
789 define <vscale x 8 x i32> @intrinsic_vssub_mask_vv_nxv8i32_nxv8i32_nxv8i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, <vscale x 8 x i32> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
790 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv8i32_nxv8i32_nxv8i32:
791 ; CHECK:       # %bb.0: # %entry
792 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, mu
793 ; CHECK-NEXT:    vssub.vv v8, v12, v16, v0.t
794 ; CHECK-NEXT:    ret
795 entry:
796   %a = call <vscale x 8 x i32> @llvm.riscv.vssub.mask.nxv8i32.nxv8i32(
797     <vscale x 8 x i32> %0,
798     <vscale x 8 x i32> %1,
799     <vscale x 8 x i32> %2,
800     <vscale x 8 x i1> %3,
801     i32 %4, i32 1)
803   ret <vscale x 8 x i32> %a
806 declare <vscale x 16 x i32> @llvm.riscv.vssub.nxv16i32.nxv16i32(
807   <vscale x 16 x i32>,
808   <vscale x 16 x i32>,
809   <vscale x 16 x i32>,
810   i32);
812 define <vscale x 16 x i32> @intrinsic_vssub_vv_nxv16i32_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, i32 %2) nounwind {
813 ; CHECK-LABEL: intrinsic_vssub_vv_nxv16i32_nxv16i32_nxv16i32:
814 ; CHECK:       # %bb.0: # %entry
815 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
816 ; CHECK-NEXT:    vssub.vv v8, v8, v16
817 ; CHECK-NEXT:    ret
818 entry:
819   %a = call <vscale x 16 x i32> @llvm.riscv.vssub.nxv16i32.nxv16i32(
820     <vscale x 16 x i32> undef,
821     <vscale x 16 x i32> %0,
822     <vscale x 16 x i32> %1,
823     i32 %2)
825   ret <vscale x 16 x i32> %a
828 declare <vscale x 16 x i32> @llvm.riscv.vssub.mask.nxv16i32.nxv16i32(
829   <vscale x 16 x i32>,
830   <vscale x 16 x i32>,
831   <vscale x 16 x i32>,
832   <vscale x 16 x i1>,
833   i32,
834   i32);
836 define <vscale x 16 x i32> @intrinsic_vssub_mask_vv_nxv16i32_nxv16i32_nxv16i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, <vscale x 16 x i32> %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
837 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv16i32_nxv16i32_nxv16i32:
838 ; CHECK:       # %bb.0: # %entry
839 ; CHECK-NEXT:    vl8re32.v v24, (a0)
840 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
841 ; CHECK-NEXT:    vssub.vv v8, v16, v24, v0.t
842 ; CHECK-NEXT:    ret
843 entry:
844   %a = call <vscale x 16 x i32> @llvm.riscv.vssub.mask.nxv16i32.nxv16i32(
845     <vscale x 16 x i32> %0,
846     <vscale x 16 x i32> %1,
847     <vscale x 16 x i32> %2,
848     <vscale x 16 x i1> %3,
849     i32 %4, i32 1)
851   ret <vscale x 16 x i32> %a
854 declare <vscale x 1 x i64> @llvm.riscv.vssub.nxv1i64.nxv1i64(
855   <vscale x 1 x i64>,
856   <vscale x 1 x i64>,
857   <vscale x 1 x i64>,
858   i32);
860 define <vscale x 1 x i64> @intrinsic_vssub_vv_nxv1i64_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, i32 %2) nounwind {
861 ; CHECK-LABEL: intrinsic_vssub_vv_nxv1i64_nxv1i64_nxv1i64:
862 ; CHECK:       # %bb.0: # %entry
863 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
864 ; CHECK-NEXT:    vssub.vv v8, v8, v9
865 ; CHECK-NEXT:    ret
866 entry:
867   %a = call <vscale x 1 x i64> @llvm.riscv.vssub.nxv1i64.nxv1i64(
868     <vscale x 1 x i64> undef,
869     <vscale x 1 x i64> %0,
870     <vscale x 1 x i64> %1,
871     i32 %2)
873   ret <vscale x 1 x i64> %a
876 declare <vscale x 1 x i64> @llvm.riscv.vssub.mask.nxv1i64.nxv1i64(
877   <vscale x 1 x i64>,
878   <vscale x 1 x i64>,
879   <vscale x 1 x i64>,
880   <vscale x 1 x i1>,
881   i32,
882   i32);
884 define <vscale x 1 x i64> @intrinsic_vssub_mask_vv_nxv1i64_nxv1i64_nxv1i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, <vscale x 1 x i64> %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
885 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv1i64_nxv1i64_nxv1i64:
886 ; CHECK:       # %bb.0: # %entry
887 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, mu
888 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
889 ; CHECK-NEXT:    ret
890 entry:
891   %a = call <vscale x 1 x i64> @llvm.riscv.vssub.mask.nxv1i64.nxv1i64(
892     <vscale x 1 x i64> %0,
893     <vscale x 1 x i64> %1,
894     <vscale x 1 x i64> %2,
895     <vscale x 1 x i1> %3,
896     i32 %4, i32 1)
898   ret <vscale x 1 x i64> %a
901 declare <vscale x 2 x i64> @llvm.riscv.vssub.nxv2i64.nxv2i64(
902   <vscale x 2 x i64>,
903   <vscale x 2 x i64>,
904   <vscale x 2 x i64>,
905   i32);
907 define <vscale x 2 x i64> @intrinsic_vssub_vv_nxv2i64_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, i32 %2) nounwind {
908 ; CHECK-LABEL: intrinsic_vssub_vv_nxv2i64_nxv2i64_nxv2i64:
909 ; CHECK:       # %bb.0: # %entry
910 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
911 ; CHECK-NEXT:    vssub.vv v8, v8, v10
912 ; CHECK-NEXT:    ret
913 entry:
914   %a = call <vscale x 2 x i64> @llvm.riscv.vssub.nxv2i64.nxv2i64(
915     <vscale x 2 x i64> undef,
916     <vscale x 2 x i64> %0,
917     <vscale x 2 x i64> %1,
918     i32 %2)
920   ret <vscale x 2 x i64> %a
923 declare <vscale x 2 x i64> @llvm.riscv.vssub.mask.nxv2i64.nxv2i64(
924   <vscale x 2 x i64>,
925   <vscale x 2 x i64>,
926   <vscale x 2 x i64>,
927   <vscale x 2 x i1>,
928   i32,
929   i32);
931 define <vscale x 2 x i64> @intrinsic_vssub_mask_vv_nxv2i64_nxv2i64_nxv2i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, <vscale x 2 x i64> %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
932 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv2i64_nxv2i64_nxv2i64:
933 ; CHECK:       # %bb.0: # %entry
934 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, mu
935 ; CHECK-NEXT:    vssub.vv v8, v10, v12, v0.t
936 ; CHECK-NEXT:    ret
937 entry:
938   %a = call <vscale x 2 x i64> @llvm.riscv.vssub.mask.nxv2i64.nxv2i64(
939     <vscale x 2 x i64> %0,
940     <vscale x 2 x i64> %1,
941     <vscale x 2 x i64> %2,
942     <vscale x 2 x i1> %3,
943     i32 %4, i32 1)
945   ret <vscale x 2 x i64> %a
948 declare <vscale x 4 x i64> @llvm.riscv.vssub.nxv4i64.nxv4i64(
949   <vscale x 4 x i64>,
950   <vscale x 4 x i64>,
951   <vscale x 4 x i64>,
952   i32);
954 define <vscale x 4 x i64> @intrinsic_vssub_vv_nxv4i64_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, i32 %2) nounwind {
955 ; CHECK-LABEL: intrinsic_vssub_vv_nxv4i64_nxv4i64_nxv4i64:
956 ; CHECK:       # %bb.0: # %entry
957 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
958 ; CHECK-NEXT:    vssub.vv v8, v8, v12
959 ; CHECK-NEXT:    ret
960 entry:
961   %a = call <vscale x 4 x i64> @llvm.riscv.vssub.nxv4i64.nxv4i64(
962     <vscale x 4 x i64> undef,
963     <vscale x 4 x i64> %0,
964     <vscale x 4 x i64> %1,
965     i32 %2)
967   ret <vscale x 4 x i64> %a
970 declare <vscale x 4 x i64> @llvm.riscv.vssub.mask.nxv4i64.nxv4i64(
971   <vscale x 4 x i64>,
972   <vscale x 4 x i64>,
973   <vscale x 4 x i64>,
974   <vscale x 4 x i1>,
975   i32,
976   i32);
978 define <vscale x 4 x i64> @intrinsic_vssub_mask_vv_nxv4i64_nxv4i64_nxv4i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, <vscale x 4 x i64> %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
979 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv4i64_nxv4i64_nxv4i64:
980 ; CHECK:       # %bb.0: # %entry
981 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, mu
982 ; CHECK-NEXT:    vssub.vv v8, v12, v16, v0.t
983 ; CHECK-NEXT:    ret
984 entry:
985   %a = call <vscale x 4 x i64> @llvm.riscv.vssub.mask.nxv4i64.nxv4i64(
986     <vscale x 4 x i64> %0,
987     <vscale x 4 x i64> %1,
988     <vscale x 4 x i64> %2,
989     <vscale x 4 x i1> %3,
990     i32 %4, i32 1)
992   ret <vscale x 4 x i64> %a
995 declare <vscale x 8 x i64> @llvm.riscv.vssub.nxv8i64.nxv8i64(
996   <vscale x 8 x i64>,
997   <vscale x 8 x i64>,
998   <vscale x 8 x i64>,
999   i32);
1001 define <vscale x 8 x i64> @intrinsic_vssub_vv_nxv8i64_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, i32 %2) nounwind {
1002 ; CHECK-LABEL: intrinsic_vssub_vv_nxv8i64_nxv8i64_nxv8i64:
1003 ; CHECK:       # %bb.0: # %entry
1004 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1005 ; CHECK-NEXT:    vssub.vv v8, v8, v16
1006 ; CHECK-NEXT:    ret
1007 entry:
1008   %a = call <vscale x 8 x i64> @llvm.riscv.vssub.nxv8i64.nxv8i64(
1009     <vscale x 8 x i64> undef,
1010     <vscale x 8 x i64> %0,
1011     <vscale x 8 x i64> %1,
1012     i32 %2)
1014   ret <vscale x 8 x i64> %a
1017 declare <vscale x 8 x i64> @llvm.riscv.vssub.mask.nxv8i64.nxv8i64(
1018   <vscale x 8 x i64>,
1019   <vscale x 8 x i64>,
1020   <vscale x 8 x i64>,
1021   <vscale x 8 x i1>,
1022   i32,
1023   i32);
1025 define <vscale x 8 x i64> @intrinsic_vssub_mask_vv_nxv8i64_nxv8i64_nxv8i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, <vscale x 8 x i64> %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1026 ; CHECK-LABEL: intrinsic_vssub_mask_vv_nxv8i64_nxv8i64_nxv8i64:
1027 ; CHECK:       # %bb.0: # %entry
1028 ; CHECK-NEXT:    vl8re64.v v24, (a0)
1029 ; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, mu
1030 ; CHECK-NEXT:    vssub.vv v8, v16, v24, v0.t
1031 ; CHECK-NEXT:    ret
1032 entry:
1033   %a = call <vscale x 8 x i64> @llvm.riscv.vssub.mask.nxv8i64.nxv8i64(
1034     <vscale x 8 x i64> %0,
1035     <vscale x 8 x i64> %1,
1036     <vscale x 8 x i64> %2,
1037     <vscale x 8 x i1> %3,
1038     i32 %4, i32 1)
1040   ret <vscale x 8 x i64> %a
1043 declare <vscale x 1 x i8> @llvm.riscv.vssub.nxv1i8.i8(
1044   <vscale x 1 x i8>,
1045   <vscale x 1 x i8>,
1046   i8,
1047   i32);
1049 define <vscale x 1 x i8> @intrinsic_vssub_vx_nxv1i8_nxv1i8_i8(<vscale x 1 x i8> %0, i8 %1, i32 %2) nounwind {
1050 ; CHECK-LABEL: intrinsic_vssub_vx_nxv1i8_nxv1i8_i8:
1051 ; CHECK:       # %bb.0: # %entry
1052 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
1053 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1054 ; CHECK-NEXT:    ret
1055 entry:
1056   %a = call <vscale x 1 x i8> @llvm.riscv.vssub.nxv1i8.i8(
1057     <vscale x 1 x i8> undef,
1058     <vscale x 1 x i8> %0,
1059     i8 %1,
1060     i32 %2)
1062   ret <vscale x 1 x i8> %a
1065 declare <vscale x 1 x i8> @llvm.riscv.vssub.mask.nxv1i8.i8(
1066   <vscale x 1 x i8>,
1067   <vscale x 1 x i8>,
1068   i8,
1069   <vscale x 1 x i1>,
1070   i32,
1071   i32);
1073 define <vscale x 1 x i8> @intrinsic_vssub_mask_vx_nxv1i8_nxv1i8_i8(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, i8 %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
1074 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv1i8_nxv1i8_i8:
1075 ; CHECK:       # %bb.0: # %entry
1076 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, mu
1077 ; CHECK-NEXT:    vssub.vx v8, v9, a0, v0.t
1078 ; CHECK-NEXT:    ret
1079 entry:
1080   %a = call <vscale x 1 x i8> @llvm.riscv.vssub.mask.nxv1i8.i8(
1081     <vscale x 1 x i8> %0,
1082     <vscale x 1 x i8> %1,
1083     i8 %2,
1084     <vscale x 1 x i1> %3,
1085     i32 %4, i32 1)
1087   ret <vscale x 1 x i8> %a
1090 declare <vscale x 2 x i8> @llvm.riscv.vssub.nxv2i8.i8(
1091   <vscale x 2 x i8>,
1092   <vscale x 2 x i8>,
1093   i8,
1094   i32);
1096 define <vscale x 2 x i8> @intrinsic_vssub_vx_nxv2i8_nxv2i8_i8(<vscale x 2 x i8> %0, i8 %1, i32 %2) nounwind {
1097 ; CHECK-LABEL: intrinsic_vssub_vx_nxv2i8_nxv2i8_i8:
1098 ; CHECK:       # %bb.0: # %entry
1099 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
1100 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1101 ; CHECK-NEXT:    ret
1102 entry:
1103   %a = call <vscale x 2 x i8> @llvm.riscv.vssub.nxv2i8.i8(
1104     <vscale x 2 x i8> undef,
1105     <vscale x 2 x i8> %0,
1106     i8 %1,
1107     i32 %2)
1109   ret <vscale x 2 x i8> %a
1112 declare <vscale x 2 x i8> @llvm.riscv.vssub.mask.nxv2i8.i8(
1113   <vscale x 2 x i8>,
1114   <vscale x 2 x i8>,
1115   i8,
1116   <vscale x 2 x i1>,
1117   i32,
1118   i32);
1120 define <vscale x 2 x i8> @intrinsic_vssub_mask_vx_nxv2i8_nxv2i8_i8(<vscale x 2 x i8> %0, <vscale x 2 x i8> %1, i8 %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
1121 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv2i8_nxv2i8_i8:
1122 ; CHECK:       # %bb.0: # %entry
1123 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, mu
1124 ; CHECK-NEXT:    vssub.vx v8, v9, a0, v0.t
1125 ; CHECK-NEXT:    ret
1126 entry:
1127   %a = call <vscale x 2 x i8> @llvm.riscv.vssub.mask.nxv2i8.i8(
1128     <vscale x 2 x i8> %0,
1129     <vscale x 2 x i8> %1,
1130     i8 %2,
1131     <vscale x 2 x i1> %3,
1132     i32 %4, i32 1)
1134   ret <vscale x 2 x i8> %a
1137 declare <vscale x 4 x i8> @llvm.riscv.vssub.nxv4i8.i8(
1138   <vscale x 4 x i8>,
1139   <vscale x 4 x i8>,
1140   i8,
1141   i32);
1143 define <vscale x 4 x i8> @intrinsic_vssub_vx_nxv4i8_nxv4i8_i8(<vscale x 4 x i8> %0, i8 %1, i32 %2) nounwind {
1144 ; CHECK-LABEL: intrinsic_vssub_vx_nxv4i8_nxv4i8_i8:
1145 ; CHECK:       # %bb.0: # %entry
1146 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
1147 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1148 ; CHECK-NEXT:    ret
1149 entry:
1150   %a = call <vscale x 4 x i8> @llvm.riscv.vssub.nxv4i8.i8(
1151     <vscale x 4 x i8> undef,
1152     <vscale x 4 x i8> %0,
1153     i8 %1,
1154     i32 %2)
1156   ret <vscale x 4 x i8> %a
1159 declare <vscale x 4 x i8> @llvm.riscv.vssub.mask.nxv4i8.i8(
1160   <vscale x 4 x i8>,
1161   <vscale x 4 x i8>,
1162   i8,
1163   <vscale x 4 x i1>,
1164   i32,
1165   i32);
1167 define <vscale x 4 x i8> @intrinsic_vssub_mask_vx_nxv4i8_nxv4i8_i8(<vscale x 4 x i8> %0, <vscale x 4 x i8> %1, i8 %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1168 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv4i8_nxv4i8_i8:
1169 ; CHECK:       # %bb.0: # %entry
1170 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, mu
1171 ; CHECK-NEXT:    vssub.vx v8, v9, a0, v0.t
1172 ; CHECK-NEXT:    ret
1173 entry:
1174   %a = call <vscale x 4 x i8> @llvm.riscv.vssub.mask.nxv4i8.i8(
1175     <vscale x 4 x i8> %0,
1176     <vscale x 4 x i8> %1,
1177     i8 %2,
1178     <vscale x 4 x i1> %3,
1179     i32 %4, i32 1)
1181   ret <vscale x 4 x i8> %a
1184 declare <vscale x 8 x i8> @llvm.riscv.vssub.nxv8i8.i8(
1185   <vscale x 8 x i8>,
1186   <vscale x 8 x i8>,
1187   i8,
1188   i32);
1190 define <vscale x 8 x i8> @intrinsic_vssub_vx_nxv8i8_nxv8i8_i8(<vscale x 8 x i8> %0, i8 %1, i32 %2) nounwind {
1191 ; CHECK-LABEL: intrinsic_vssub_vx_nxv8i8_nxv8i8_i8:
1192 ; CHECK:       # %bb.0: # %entry
1193 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
1194 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1195 ; CHECK-NEXT:    ret
1196 entry:
1197   %a = call <vscale x 8 x i8> @llvm.riscv.vssub.nxv8i8.i8(
1198     <vscale x 8 x i8> undef,
1199     <vscale x 8 x i8> %0,
1200     i8 %1,
1201     i32 %2)
1203   ret <vscale x 8 x i8> %a
1206 declare <vscale x 8 x i8> @llvm.riscv.vssub.mask.nxv8i8.i8(
1207   <vscale x 8 x i8>,
1208   <vscale x 8 x i8>,
1209   i8,
1210   <vscale x 8 x i1>,
1211   i32,
1212   i32);
1214 define <vscale x 8 x i8> @intrinsic_vssub_mask_vx_nxv8i8_nxv8i8_i8(<vscale x 8 x i8> %0, <vscale x 8 x i8> %1, i8 %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1215 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv8i8_nxv8i8_i8:
1216 ; CHECK:       # %bb.0: # %entry
1217 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, mu
1218 ; CHECK-NEXT:    vssub.vx v8, v9, a0, v0.t
1219 ; CHECK-NEXT:    ret
1220 entry:
1221   %a = call <vscale x 8 x i8> @llvm.riscv.vssub.mask.nxv8i8.i8(
1222     <vscale x 8 x i8> %0,
1223     <vscale x 8 x i8> %1,
1224     i8 %2,
1225     <vscale x 8 x i1> %3,
1226     i32 %4, i32 1)
1228   ret <vscale x 8 x i8> %a
1231 declare <vscale x 16 x i8> @llvm.riscv.vssub.nxv16i8.i8(
1232   <vscale x 16 x i8>,
1233   <vscale x 16 x i8>,
1234   i8,
1235   i32);
1237 define <vscale x 16 x i8> @intrinsic_vssub_vx_nxv16i8_nxv16i8_i8(<vscale x 16 x i8> %0, i8 %1, i32 %2) nounwind {
1238 ; CHECK-LABEL: intrinsic_vssub_vx_nxv16i8_nxv16i8_i8:
1239 ; CHECK:       # %bb.0: # %entry
1240 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
1241 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1242 ; CHECK-NEXT:    ret
1243 entry:
1244   %a = call <vscale x 16 x i8> @llvm.riscv.vssub.nxv16i8.i8(
1245     <vscale x 16 x i8> undef,
1246     <vscale x 16 x i8> %0,
1247     i8 %1,
1248     i32 %2)
1250   ret <vscale x 16 x i8> %a
1253 declare <vscale x 16 x i8> @llvm.riscv.vssub.mask.nxv16i8.i8(
1254   <vscale x 16 x i8>,
1255   <vscale x 16 x i8>,
1256   i8,
1257   <vscale x 16 x i1>,
1258   i32,
1259   i32);
1261 define <vscale x 16 x i8> @intrinsic_vssub_mask_vx_nxv16i8_nxv16i8_i8(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, i8 %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
1262 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv16i8_nxv16i8_i8:
1263 ; CHECK:       # %bb.0: # %entry
1264 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, mu
1265 ; CHECK-NEXT:    vssub.vx v8, v10, a0, v0.t
1266 ; CHECK-NEXT:    ret
1267 entry:
1268   %a = call <vscale x 16 x i8> @llvm.riscv.vssub.mask.nxv16i8.i8(
1269     <vscale x 16 x i8> %0,
1270     <vscale x 16 x i8> %1,
1271     i8 %2,
1272     <vscale x 16 x i1> %3,
1273     i32 %4, i32 1)
1275   ret <vscale x 16 x i8> %a
1278 declare <vscale x 32 x i8> @llvm.riscv.vssub.nxv32i8.i8(
1279   <vscale x 32 x i8>,
1280   <vscale x 32 x i8>,
1281   i8,
1282   i32);
1284 define <vscale x 32 x i8> @intrinsic_vssub_vx_nxv32i8_nxv32i8_i8(<vscale x 32 x i8> %0, i8 %1, i32 %2) nounwind {
1285 ; CHECK-LABEL: intrinsic_vssub_vx_nxv32i8_nxv32i8_i8:
1286 ; CHECK:       # %bb.0: # %entry
1287 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
1288 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1289 ; CHECK-NEXT:    ret
1290 entry:
1291   %a = call <vscale x 32 x i8> @llvm.riscv.vssub.nxv32i8.i8(
1292     <vscale x 32 x i8> undef,
1293     <vscale x 32 x i8> %0,
1294     i8 %1,
1295     i32 %2)
1297   ret <vscale x 32 x i8> %a
1300 declare <vscale x 32 x i8> @llvm.riscv.vssub.mask.nxv32i8.i8(
1301   <vscale x 32 x i8>,
1302   <vscale x 32 x i8>,
1303   i8,
1304   <vscale x 32 x i1>,
1305   i32,
1306   i32);
1308 define <vscale x 32 x i8> @intrinsic_vssub_mask_vx_nxv32i8_nxv32i8_i8(<vscale x 32 x i8> %0, <vscale x 32 x i8> %1, i8 %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
1309 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv32i8_nxv32i8_i8:
1310 ; CHECK:       # %bb.0: # %entry
1311 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, mu
1312 ; CHECK-NEXT:    vssub.vx v8, v12, a0, v0.t
1313 ; CHECK-NEXT:    ret
1314 entry:
1315   %a = call <vscale x 32 x i8> @llvm.riscv.vssub.mask.nxv32i8.i8(
1316     <vscale x 32 x i8> %0,
1317     <vscale x 32 x i8> %1,
1318     i8 %2,
1319     <vscale x 32 x i1> %3,
1320     i32 %4, i32 1)
1322   ret <vscale x 32 x i8> %a
1325 declare <vscale x 64 x i8> @llvm.riscv.vssub.nxv64i8.i8(
1326   <vscale x 64 x i8>,
1327   <vscale x 64 x i8>,
1328   i8,
1329   i32);
1331 define <vscale x 64 x i8> @intrinsic_vssub_vx_nxv64i8_nxv64i8_i8(<vscale x 64 x i8> %0, i8 %1, i32 %2) nounwind {
1332 ; CHECK-LABEL: intrinsic_vssub_vx_nxv64i8_nxv64i8_i8:
1333 ; CHECK:       # %bb.0: # %entry
1334 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
1335 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1336 ; CHECK-NEXT:    ret
1337 entry:
1338   %a = call <vscale x 64 x i8> @llvm.riscv.vssub.nxv64i8.i8(
1339     <vscale x 64 x i8> undef,
1340     <vscale x 64 x i8> %0,
1341     i8 %1,
1342     i32 %2)
1344   ret <vscale x 64 x i8> %a
1347 declare <vscale x 64 x i8> @llvm.riscv.vssub.mask.nxv64i8.i8(
1348   <vscale x 64 x i8>,
1349   <vscale x 64 x i8>,
1350   i8,
1351   <vscale x 64 x i1>,
1352   i32,
1353   i32);
1355 define <vscale x 64 x i8> @intrinsic_vssub_mask_vx_nxv64i8_nxv64i8_i8(<vscale x 64 x i8> %0, <vscale x 64 x i8> %1, i8 %2, <vscale x 64 x i1> %3, i32 %4) nounwind {
1356 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv64i8_nxv64i8_i8:
1357 ; CHECK:       # %bb.0: # %entry
1358 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, mu
1359 ; CHECK-NEXT:    vssub.vx v8, v16, a0, v0.t
1360 ; CHECK-NEXT:    ret
1361 entry:
1362   %a = call <vscale x 64 x i8> @llvm.riscv.vssub.mask.nxv64i8.i8(
1363     <vscale x 64 x i8> %0,
1364     <vscale x 64 x i8> %1,
1365     i8 %2,
1366     <vscale x 64 x i1> %3,
1367     i32 %4, i32 1)
1369   ret <vscale x 64 x i8> %a
1372 declare <vscale x 1 x i16> @llvm.riscv.vssub.nxv1i16.i16(
1373   <vscale x 1 x i16>,
1374   <vscale x 1 x i16>,
1375   i16,
1376   i32);
1378 define <vscale x 1 x i16> @intrinsic_vssub_vx_nxv1i16_nxv1i16_i16(<vscale x 1 x i16> %0, i16 %1, i32 %2) nounwind {
1379 ; CHECK-LABEL: intrinsic_vssub_vx_nxv1i16_nxv1i16_i16:
1380 ; CHECK:       # %bb.0: # %entry
1381 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
1382 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1383 ; CHECK-NEXT:    ret
1384 entry:
1385   %a = call <vscale x 1 x i16> @llvm.riscv.vssub.nxv1i16.i16(
1386     <vscale x 1 x i16> undef,
1387     <vscale x 1 x i16> %0,
1388     i16 %1,
1389     i32 %2)
1391   ret <vscale x 1 x i16> %a
1394 declare <vscale x 1 x i16> @llvm.riscv.vssub.mask.nxv1i16.i16(
1395   <vscale x 1 x i16>,
1396   <vscale x 1 x i16>,
1397   i16,
1398   <vscale x 1 x i1>,
1399   i32,
1400   i32);
1402 define <vscale x 1 x i16> @intrinsic_vssub_mask_vx_nxv1i16_nxv1i16_i16(<vscale x 1 x i16> %0, <vscale x 1 x i16> %1, i16 %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
1403 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv1i16_nxv1i16_i16:
1404 ; CHECK:       # %bb.0: # %entry
1405 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, mu
1406 ; CHECK-NEXT:    vssub.vx v8, v9, a0, v0.t
1407 ; CHECK-NEXT:    ret
1408 entry:
1409   %a = call <vscale x 1 x i16> @llvm.riscv.vssub.mask.nxv1i16.i16(
1410     <vscale x 1 x i16> %0,
1411     <vscale x 1 x i16> %1,
1412     i16 %2,
1413     <vscale x 1 x i1> %3,
1414     i32 %4, i32 1)
1416   ret <vscale x 1 x i16> %a
1419 declare <vscale x 2 x i16> @llvm.riscv.vssub.nxv2i16.i16(
1420   <vscale x 2 x i16>,
1421   <vscale x 2 x i16>,
1422   i16,
1423   i32);
1425 define <vscale x 2 x i16> @intrinsic_vssub_vx_nxv2i16_nxv2i16_i16(<vscale x 2 x i16> %0, i16 %1, i32 %2) nounwind {
1426 ; CHECK-LABEL: intrinsic_vssub_vx_nxv2i16_nxv2i16_i16:
1427 ; CHECK:       # %bb.0: # %entry
1428 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
1429 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1430 ; CHECK-NEXT:    ret
1431 entry:
1432   %a = call <vscale x 2 x i16> @llvm.riscv.vssub.nxv2i16.i16(
1433     <vscale x 2 x i16> undef,
1434     <vscale x 2 x i16> %0,
1435     i16 %1,
1436     i32 %2)
1438   ret <vscale x 2 x i16> %a
1441 declare <vscale x 2 x i16> @llvm.riscv.vssub.mask.nxv2i16.i16(
1442   <vscale x 2 x i16>,
1443   <vscale x 2 x i16>,
1444   i16,
1445   <vscale x 2 x i1>,
1446   i32,
1447   i32);
1449 define <vscale x 2 x i16> @intrinsic_vssub_mask_vx_nxv2i16_nxv2i16_i16(<vscale x 2 x i16> %0, <vscale x 2 x i16> %1, i16 %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
1450 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv2i16_nxv2i16_i16:
1451 ; CHECK:       # %bb.0: # %entry
1452 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, mu
1453 ; CHECK-NEXT:    vssub.vx v8, v9, a0, v0.t
1454 ; CHECK-NEXT:    ret
1455 entry:
1456   %a = call <vscale x 2 x i16> @llvm.riscv.vssub.mask.nxv2i16.i16(
1457     <vscale x 2 x i16> %0,
1458     <vscale x 2 x i16> %1,
1459     i16 %2,
1460     <vscale x 2 x i1> %3,
1461     i32 %4, i32 1)
1463   ret <vscale x 2 x i16> %a
1466 declare <vscale x 4 x i16> @llvm.riscv.vssub.nxv4i16.i16(
1467   <vscale x 4 x i16>,
1468   <vscale x 4 x i16>,
1469   i16,
1470   i32);
1472 define <vscale x 4 x i16> @intrinsic_vssub_vx_nxv4i16_nxv4i16_i16(<vscale x 4 x i16> %0, i16 %1, i32 %2) nounwind {
1473 ; CHECK-LABEL: intrinsic_vssub_vx_nxv4i16_nxv4i16_i16:
1474 ; CHECK:       # %bb.0: # %entry
1475 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
1476 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1477 ; CHECK-NEXT:    ret
1478 entry:
1479   %a = call <vscale x 4 x i16> @llvm.riscv.vssub.nxv4i16.i16(
1480     <vscale x 4 x i16> undef,
1481     <vscale x 4 x i16> %0,
1482     i16 %1,
1483     i32 %2)
1485   ret <vscale x 4 x i16> %a
1488 declare <vscale x 4 x i16> @llvm.riscv.vssub.mask.nxv4i16.i16(
1489   <vscale x 4 x i16>,
1490   <vscale x 4 x i16>,
1491   i16,
1492   <vscale x 4 x i1>,
1493   i32,
1494   i32);
1496 define <vscale x 4 x i16> @intrinsic_vssub_mask_vx_nxv4i16_nxv4i16_i16(<vscale x 4 x i16> %0, <vscale x 4 x i16> %1, i16 %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1497 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv4i16_nxv4i16_i16:
1498 ; CHECK:       # %bb.0: # %entry
1499 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, mu
1500 ; CHECK-NEXT:    vssub.vx v8, v9, a0, v0.t
1501 ; CHECK-NEXT:    ret
1502 entry:
1503   %a = call <vscale x 4 x i16> @llvm.riscv.vssub.mask.nxv4i16.i16(
1504     <vscale x 4 x i16> %0,
1505     <vscale x 4 x i16> %1,
1506     i16 %2,
1507     <vscale x 4 x i1> %3,
1508     i32 %4, i32 1)
1510   ret <vscale x 4 x i16> %a
1513 declare <vscale x 8 x i16> @llvm.riscv.vssub.nxv8i16.i16(
1514   <vscale x 8 x i16>,
1515   <vscale x 8 x i16>,
1516   i16,
1517   i32);
1519 define <vscale x 8 x i16> @intrinsic_vssub_vx_nxv8i16_nxv8i16_i16(<vscale x 8 x i16> %0, i16 %1, i32 %2) nounwind {
1520 ; CHECK-LABEL: intrinsic_vssub_vx_nxv8i16_nxv8i16_i16:
1521 ; CHECK:       # %bb.0: # %entry
1522 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
1523 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1524 ; CHECK-NEXT:    ret
1525 entry:
1526   %a = call <vscale x 8 x i16> @llvm.riscv.vssub.nxv8i16.i16(
1527     <vscale x 8 x i16> undef,
1528     <vscale x 8 x i16> %0,
1529     i16 %1,
1530     i32 %2)
1532   ret <vscale x 8 x i16> %a
1535 declare <vscale x 8 x i16> @llvm.riscv.vssub.mask.nxv8i16.i16(
1536   <vscale x 8 x i16>,
1537   <vscale x 8 x i16>,
1538   i16,
1539   <vscale x 8 x i1>,
1540   i32,
1541   i32);
1543 define <vscale x 8 x i16> @intrinsic_vssub_mask_vx_nxv8i16_nxv8i16_i16(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, i16 %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1544 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv8i16_nxv8i16_i16:
1545 ; CHECK:       # %bb.0: # %entry
1546 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, mu
1547 ; CHECK-NEXT:    vssub.vx v8, v10, a0, v0.t
1548 ; CHECK-NEXT:    ret
1549 entry:
1550   %a = call <vscale x 8 x i16> @llvm.riscv.vssub.mask.nxv8i16.i16(
1551     <vscale x 8 x i16> %0,
1552     <vscale x 8 x i16> %1,
1553     i16 %2,
1554     <vscale x 8 x i1> %3,
1555     i32 %4, i32 1)
1557   ret <vscale x 8 x i16> %a
1560 declare <vscale x 16 x i16> @llvm.riscv.vssub.nxv16i16.i16(
1561   <vscale x 16 x i16>,
1562   <vscale x 16 x i16>,
1563   i16,
1564   i32);
1566 define <vscale x 16 x i16> @intrinsic_vssub_vx_nxv16i16_nxv16i16_i16(<vscale x 16 x i16> %0, i16 %1, i32 %2) nounwind {
1567 ; CHECK-LABEL: intrinsic_vssub_vx_nxv16i16_nxv16i16_i16:
1568 ; CHECK:       # %bb.0: # %entry
1569 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
1570 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1571 ; CHECK-NEXT:    ret
1572 entry:
1573   %a = call <vscale x 16 x i16> @llvm.riscv.vssub.nxv16i16.i16(
1574     <vscale x 16 x i16> undef,
1575     <vscale x 16 x i16> %0,
1576     i16 %1,
1577     i32 %2)
1579   ret <vscale x 16 x i16> %a
1582 declare <vscale x 16 x i16> @llvm.riscv.vssub.mask.nxv16i16.i16(
1583   <vscale x 16 x i16>,
1584   <vscale x 16 x i16>,
1585   i16,
1586   <vscale x 16 x i1>,
1587   i32,
1588   i32);
1590 define <vscale x 16 x i16> @intrinsic_vssub_mask_vx_nxv16i16_nxv16i16_i16(<vscale x 16 x i16> %0, <vscale x 16 x i16> %1, i16 %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
1591 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv16i16_nxv16i16_i16:
1592 ; CHECK:       # %bb.0: # %entry
1593 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, mu
1594 ; CHECK-NEXT:    vssub.vx v8, v12, a0, v0.t
1595 ; CHECK-NEXT:    ret
1596 entry:
1597   %a = call <vscale x 16 x i16> @llvm.riscv.vssub.mask.nxv16i16.i16(
1598     <vscale x 16 x i16> %0,
1599     <vscale x 16 x i16> %1,
1600     i16 %2,
1601     <vscale x 16 x i1> %3,
1602     i32 %4, i32 1)
1604   ret <vscale x 16 x i16> %a
1607 declare <vscale x 32 x i16> @llvm.riscv.vssub.nxv32i16.i16(
1608   <vscale x 32 x i16>,
1609   <vscale x 32 x i16>,
1610   i16,
1611   i32);
1613 define <vscale x 32 x i16> @intrinsic_vssub_vx_nxv32i16_nxv32i16_i16(<vscale x 32 x i16> %0, i16 %1, i32 %2) nounwind {
1614 ; CHECK-LABEL: intrinsic_vssub_vx_nxv32i16_nxv32i16_i16:
1615 ; CHECK:       # %bb.0: # %entry
1616 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
1617 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1618 ; CHECK-NEXT:    ret
1619 entry:
1620   %a = call <vscale x 32 x i16> @llvm.riscv.vssub.nxv32i16.i16(
1621     <vscale x 32 x i16> undef,
1622     <vscale x 32 x i16> %0,
1623     i16 %1,
1624     i32 %2)
1626   ret <vscale x 32 x i16> %a
1629 declare <vscale x 32 x i16> @llvm.riscv.vssub.mask.nxv32i16.i16(
1630   <vscale x 32 x i16>,
1631   <vscale x 32 x i16>,
1632   i16,
1633   <vscale x 32 x i1>,
1634   i32,
1635   i32);
1637 define <vscale x 32 x i16> @intrinsic_vssub_mask_vx_nxv32i16_nxv32i16_i16(<vscale x 32 x i16> %0, <vscale x 32 x i16> %1, i16 %2, <vscale x 32 x i1> %3, i32 %4) nounwind {
1638 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv32i16_nxv32i16_i16:
1639 ; CHECK:       # %bb.0: # %entry
1640 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, mu
1641 ; CHECK-NEXT:    vssub.vx v8, v16, a0, v0.t
1642 ; CHECK-NEXT:    ret
1643 entry:
1644   %a = call <vscale x 32 x i16> @llvm.riscv.vssub.mask.nxv32i16.i16(
1645     <vscale x 32 x i16> %0,
1646     <vscale x 32 x i16> %1,
1647     i16 %2,
1648     <vscale x 32 x i1> %3,
1649     i32 %4, i32 1)
1651   ret <vscale x 32 x i16> %a
1654 declare <vscale x 1 x i32> @llvm.riscv.vssub.nxv1i32.i32(
1655   <vscale x 1 x i32>,
1656   <vscale x 1 x i32>,
1657   i32,
1658   i32);
1660 define <vscale x 1 x i32> @intrinsic_vssub_vx_nxv1i32_nxv1i32_i32(<vscale x 1 x i32> %0, i32 %1, i32 %2) nounwind {
1661 ; CHECK-LABEL: intrinsic_vssub_vx_nxv1i32_nxv1i32_i32:
1662 ; CHECK:       # %bb.0: # %entry
1663 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
1664 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1665 ; CHECK-NEXT:    ret
1666 entry:
1667   %a = call <vscale x 1 x i32> @llvm.riscv.vssub.nxv1i32.i32(
1668     <vscale x 1 x i32> undef,
1669     <vscale x 1 x i32> %0,
1670     i32 %1,
1671     i32 %2)
1673   ret <vscale x 1 x i32> %a
1676 declare <vscale x 1 x i32> @llvm.riscv.vssub.mask.nxv1i32.i32(
1677   <vscale x 1 x i32>,
1678   <vscale x 1 x i32>,
1679   i32,
1680   <vscale x 1 x i1>,
1681   i32,
1682   i32);
1684 define <vscale x 1 x i32> @intrinsic_vssub_mask_vx_nxv1i32_nxv1i32_i32(<vscale x 1 x i32> %0, <vscale x 1 x i32> %1, i32 %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
1685 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv1i32_nxv1i32_i32:
1686 ; CHECK:       # %bb.0: # %entry
1687 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, mu
1688 ; CHECK-NEXT:    vssub.vx v8, v9, a0, v0.t
1689 ; CHECK-NEXT:    ret
1690 entry:
1691   %a = call <vscale x 1 x i32> @llvm.riscv.vssub.mask.nxv1i32.i32(
1692     <vscale x 1 x i32> %0,
1693     <vscale x 1 x i32> %1,
1694     i32 %2,
1695     <vscale x 1 x i1> %3,
1696     i32 %4, i32 1)
1698   ret <vscale x 1 x i32> %a
1701 declare <vscale x 2 x i32> @llvm.riscv.vssub.nxv2i32.i32(
1702   <vscale x 2 x i32>,
1703   <vscale x 2 x i32>,
1704   i32,
1705   i32);
1707 define <vscale x 2 x i32> @intrinsic_vssub_vx_nxv2i32_nxv2i32_i32(<vscale x 2 x i32> %0, i32 %1, i32 %2) nounwind {
1708 ; CHECK-LABEL: intrinsic_vssub_vx_nxv2i32_nxv2i32_i32:
1709 ; CHECK:       # %bb.0: # %entry
1710 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
1711 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1712 ; CHECK-NEXT:    ret
1713 entry:
1714   %a = call <vscale x 2 x i32> @llvm.riscv.vssub.nxv2i32.i32(
1715     <vscale x 2 x i32> undef,
1716     <vscale x 2 x i32> %0,
1717     i32 %1,
1718     i32 %2)
1720   ret <vscale x 2 x i32> %a
1723 declare <vscale x 2 x i32> @llvm.riscv.vssub.mask.nxv2i32.i32(
1724   <vscale x 2 x i32>,
1725   <vscale x 2 x i32>,
1726   i32,
1727   <vscale x 2 x i1>,
1728   i32,
1729   i32);
1731 define <vscale x 2 x i32> @intrinsic_vssub_mask_vx_nxv2i32_nxv2i32_i32(<vscale x 2 x i32> %0, <vscale x 2 x i32> %1, i32 %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
1732 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv2i32_nxv2i32_i32:
1733 ; CHECK:       # %bb.0: # %entry
1734 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, mu
1735 ; CHECK-NEXT:    vssub.vx v8, v9, a0, v0.t
1736 ; CHECK-NEXT:    ret
1737 entry:
1738   %a = call <vscale x 2 x i32> @llvm.riscv.vssub.mask.nxv2i32.i32(
1739     <vscale x 2 x i32> %0,
1740     <vscale x 2 x i32> %1,
1741     i32 %2,
1742     <vscale x 2 x i1> %3,
1743     i32 %4, i32 1)
1745   ret <vscale x 2 x i32> %a
1748 declare <vscale x 4 x i32> @llvm.riscv.vssub.nxv4i32.i32(
1749   <vscale x 4 x i32>,
1750   <vscale x 4 x i32>,
1751   i32,
1752   i32);
1754 define <vscale x 4 x i32> @intrinsic_vssub_vx_nxv4i32_nxv4i32_i32(<vscale x 4 x i32> %0, i32 %1, i32 %2) nounwind {
1755 ; CHECK-LABEL: intrinsic_vssub_vx_nxv4i32_nxv4i32_i32:
1756 ; CHECK:       # %bb.0: # %entry
1757 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1758 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1759 ; CHECK-NEXT:    ret
1760 entry:
1761   %a = call <vscale x 4 x i32> @llvm.riscv.vssub.nxv4i32.i32(
1762     <vscale x 4 x i32> undef,
1763     <vscale x 4 x i32> %0,
1764     i32 %1,
1765     i32 %2)
1767   ret <vscale x 4 x i32> %a
1770 declare <vscale x 4 x i32> @llvm.riscv.vssub.mask.nxv4i32.i32(
1771   <vscale x 4 x i32>,
1772   <vscale x 4 x i32>,
1773   i32,
1774   <vscale x 4 x i1>,
1775   i32,
1776   i32);
1778 define <vscale x 4 x i32> @intrinsic_vssub_mask_vx_nxv4i32_nxv4i32_i32(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, i32 %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
1779 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv4i32_nxv4i32_i32:
1780 ; CHECK:       # %bb.0: # %entry
1781 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, mu
1782 ; CHECK-NEXT:    vssub.vx v8, v10, a0, v0.t
1783 ; CHECK-NEXT:    ret
1784 entry:
1785   %a = call <vscale x 4 x i32> @llvm.riscv.vssub.mask.nxv4i32.i32(
1786     <vscale x 4 x i32> %0,
1787     <vscale x 4 x i32> %1,
1788     i32 %2,
1789     <vscale x 4 x i1> %3,
1790     i32 %4, i32 1)
1792   ret <vscale x 4 x i32> %a
1795 declare <vscale x 8 x i32> @llvm.riscv.vssub.nxv8i32.i32(
1796   <vscale x 8 x i32>,
1797   <vscale x 8 x i32>,
1798   i32,
1799   i32);
1801 define <vscale x 8 x i32> @intrinsic_vssub_vx_nxv8i32_nxv8i32_i32(<vscale x 8 x i32> %0, i32 %1, i32 %2) nounwind {
1802 ; CHECK-LABEL: intrinsic_vssub_vx_nxv8i32_nxv8i32_i32:
1803 ; CHECK:       # %bb.0: # %entry
1804 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1805 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1806 ; CHECK-NEXT:    ret
1807 entry:
1808   %a = call <vscale x 8 x i32> @llvm.riscv.vssub.nxv8i32.i32(
1809     <vscale x 8 x i32> undef,
1810     <vscale x 8 x i32> %0,
1811     i32 %1,
1812     i32 %2)
1814   ret <vscale x 8 x i32> %a
1817 declare <vscale x 8 x i32> @llvm.riscv.vssub.mask.nxv8i32.i32(
1818   <vscale x 8 x i32>,
1819   <vscale x 8 x i32>,
1820   i32,
1821   <vscale x 8 x i1>,
1822   i32,
1823   i32);
1825 define <vscale x 8 x i32> @intrinsic_vssub_mask_vx_nxv8i32_nxv8i32_i32(<vscale x 8 x i32> %0, <vscale x 8 x i32> %1, i32 %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
1826 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv8i32_nxv8i32_i32:
1827 ; CHECK:       # %bb.0: # %entry
1828 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, mu
1829 ; CHECK-NEXT:    vssub.vx v8, v12, a0, v0.t
1830 ; CHECK-NEXT:    ret
1831 entry:
1832   %a = call <vscale x 8 x i32> @llvm.riscv.vssub.mask.nxv8i32.i32(
1833     <vscale x 8 x i32> %0,
1834     <vscale x 8 x i32> %1,
1835     i32 %2,
1836     <vscale x 8 x i1> %3,
1837     i32 %4, i32 1)
1839   ret <vscale x 8 x i32> %a
1842 declare <vscale x 16 x i32> @llvm.riscv.vssub.nxv16i32.i32(
1843   <vscale x 16 x i32>,
1844   <vscale x 16 x i32>,
1845   i32,
1846   i32);
1848 define <vscale x 16 x i32> @intrinsic_vssub_vx_nxv16i32_nxv16i32_i32(<vscale x 16 x i32> %0, i32 %1, i32 %2) nounwind {
1849 ; CHECK-LABEL: intrinsic_vssub_vx_nxv16i32_nxv16i32_i32:
1850 ; CHECK:       # %bb.0: # %entry
1851 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1852 ; CHECK-NEXT:    vssub.vx v8, v8, a0
1853 ; CHECK-NEXT:    ret
1854 entry:
1855   %a = call <vscale x 16 x i32> @llvm.riscv.vssub.nxv16i32.i32(
1856     <vscale x 16 x i32> undef,
1857     <vscale x 16 x i32> %0,
1858     i32 %1,
1859     i32 %2)
1861   ret <vscale x 16 x i32> %a
1864 declare <vscale x 16 x i32> @llvm.riscv.vssub.mask.nxv16i32.i32(
1865   <vscale x 16 x i32>,
1866   <vscale x 16 x i32>,
1867   i32,
1868   <vscale x 16 x i1>,
1869   i32,
1870   i32);
1872 define <vscale x 16 x i32> @intrinsic_vssub_mask_vx_nxv16i32_nxv16i32_i32(<vscale x 16 x i32> %0, <vscale x 16 x i32> %1, i32 %2, <vscale x 16 x i1> %3, i32 %4) nounwind {
1873 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv16i32_nxv16i32_i32:
1874 ; CHECK:       # %bb.0: # %entry
1875 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
1876 ; CHECK-NEXT:    vssub.vx v8, v16, a0, v0.t
1877 ; CHECK-NEXT:    ret
1878 entry:
1879   %a = call <vscale x 16 x i32> @llvm.riscv.vssub.mask.nxv16i32.i32(
1880     <vscale x 16 x i32> %0,
1881     <vscale x 16 x i32> %1,
1882     i32 %2,
1883     <vscale x 16 x i1> %3,
1884     i32 %4, i32 1)
1886   ret <vscale x 16 x i32> %a
1889 declare <vscale x 1 x i64> @llvm.riscv.vssub.nxv1i64.i64(
1890   <vscale x 1 x i64>,
1891   <vscale x 1 x i64>,
1892   i64,
1893   i32);
1895 define <vscale x 1 x i64> @intrinsic_vssub_vx_nxv1i64_nxv1i64_i64(<vscale x 1 x i64> %0, i64 %1, i32 %2) nounwind {
1896 ; CHECK-LABEL: intrinsic_vssub_vx_nxv1i64_nxv1i64_i64:
1897 ; CHECK:       # %bb.0: # %entry
1898 ; CHECK-NEXT:    addi sp, sp, -16
1899 ; CHECK-NEXT:    sw a1, 12(sp)
1900 ; CHECK-NEXT:    sw a0, 8(sp)
1901 ; CHECK-NEXT:    addi a0, sp, 8
1902 ; CHECK-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1903 ; CHECK-NEXT:    vlse64.v v9, (a0), zero
1904 ; CHECK-NEXT:    vssub.vv v8, v8, v9
1905 ; CHECK-NEXT:    addi sp, sp, 16
1906 ; CHECK-NEXT:    ret
1907 entry:
1908   %a = call <vscale x 1 x i64> @llvm.riscv.vssub.nxv1i64.i64(
1909     <vscale x 1 x i64> undef,
1910     <vscale x 1 x i64> %0,
1911     i64 %1,
1912     i32 %2)
1914   ret <vscale x 1 x i64> %a
1917 declare <vscale x 1 x i64> @llvm.riscv.vssub.mask.nxv1i64.i64(
1918   <vscale x 1 x i64>,
1919   <vscale x 1 x i64>,
1920   i64,
1921   <vscale x 1 x i1>,
1922   i32,
1923   i32);
1925 define <vscale x 1 x i64> @intrinsic_vssub_mask_vx_nxv1i64_nxv1i64_i64(<vscale x 1 x i64> %0, <vscale x 1 x i64> %1, i64 %2, <vscale x 1 x i1> %3, i32 %4) nounwind {
1926 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv1i64_nxv1i64_i64:
1927 ; CHECK:       # %bb.0: # %entry
1928 ; CHECK-NEXT:    addi sp, sp, -16
1929 ; CHECK-NEXT:    sw a1, 12(sp)
1930 ; CHECK-NEXT:    sw a0, 8(sp)
1931 ; CHECK-NEXT:    addi a0, sp, 8
1932 ; CHECK-NEXT:    vsetvli zero, a2, e64, m1, ta, mu
1933 ; CHECK-NEXT:    vlse64.v v10, (a0), zero
1934 ; CHECK-NEXT:    vssub.vv v8, v9, v10, v0.t
1935 ; CHECK-NEXT:    addi sp, sp, 16
1936 ; CHECK-NEXT:    ret
1937 entry:
1938   %a = call <vscale x 1 x i64> @llvm.riscv.vssub.mask.nxv1i64.i64(
1939     <vscale x 1 x i64> %0,
1940     <vscale x 1 x i64> %1,
1941     i64 %2,
1942     <vscale x 1 x i1> %3,
1943     i32 %4, i32 1)
1945   ret <vscale x 1 x i64> %a
1948 declare <vscale x 2 x i64> @llvm.riscv.vssub.nxv2i64.i64(
1949   <vscale x 2 x i64>,
1950   <vscale x 2 x i64>,
1951   i64,
1952   i32);
1954 define <vscale x 2 x i64> @intrinsic_vssub_vx_nxv2i64_nxv2i64_i64(<vscale x 2 x i64> %0, i64 %1, i32 %2) nounwind {
1955 ; CHECK-LABEL: intrinsic_vssub_vx_nxv2i64_nxv2i64_i64:
1956 ; CHECK:       # %bb.0: # %entry
1957 ; CHECK-NEXT:    addi sp, sp, -16
1958 ; CHECK-NEXT:    sw a1, 12(sp)
1959 ; CHECK-NEXT:    sw a0, 8(sp)
1960 ; CHECK-NEXT:    addi a0, sp, 8
1961 ; CHECK-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1962 ; CHECK-NEXT:    vlse64.v v10, (a0), zero
1963 ; CHECK-NEXT:    vssub.vv v8, v8, v10
1964 ; CHECK-NEXT:    addi sp, sp, 16
1965 ; CHECK-NEXT:    ret
1966 entry:
1967   %a = call <vscale x 2 x i64> @llvm.riscv.vssub.nxv2i64.i64(
1968     <vscale x 2 x i64> undef,
1969     <vscale x 2 x i64> %0,
1970     i64 %1,
1971     i32 %2)
1973   ret <vscale x 2 x i64> %a
1976 declare <vscale x 2 x i64> @llvm.riscv.vssub.mask.nxv2i64.i64(
1977   <vscale x 2 x i64>,
1978   <vscale x 2 x i64>,
1979   i64,
1980   <vscale x 2 x i1>,
1981   i32,
1982   i32);
1984 define <vscale x 2 x i64> @intrinsic_vssub_mask_vx_nxv2i64_nxv2i64_i64(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, i64 %2, <vscale x 2 x i1> %3, i32 %4) nounwind {
1985 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv2i64_nxv2i64_i64:
1986 ; CHECK:       # %bb.0: # %entry
1987 ; CHECK-NEXT:    addi sp, sp, -16
1988 ; CHECK-NEXT:    sw a1, 12(sp)
1989 ; CHECK-NEXT:    sw a0, 8(sp)
1990 ; CHECK-NEXT:    addi a0, sp, 8
1991 ; CHECK-NEXT:    vsetvli zero, a2, e64, m2, ta, mu
1992 ; CHECK-NEXT:    vlse64.v v12, (a0), zero
1993 ; CHECK-NEXT:    vssub.vv v8, v10, v12, v0.t
1994 ; CHECK-NEXT:    addi sp, sp, 16
1995 ; CHECK-NEXT:    ret
1996 entry:
1997   %a = call <vscale x 2 x i64> @llvm.riscv.vssub.mask.nxv2i64.i64(
1998     <vscale x 2 x i64> %0,
1999     <vscale x 2 x i64> %1,
2000     i64 %2,
2001     <vscale x 2 x i1> %3,
2002     i32 %4, i32 1)
2004   ret <vscale x 2 x i64> %a
2007 declare <vscale x 4 x i64> @llvm.riscv.vssub.nxv4i64.i64(
2008   <vscale x 4 x i64>,
2009   <vscale x 4 x i64>,
2010   i64,
2011   i32);
2013 define <vscale x 4 x i64> @intrinsic_vssub_vx_nxv4i64_nxv4i64_i64(<vscale x 4 x i64> %0, i64 %1, i32 %2) nounwind {
2014 ; CHECK-LABEL: intrinsic_vssub_vx_nxv4i64_nxv4i64_i64:
2015 ; CHECK:       # %bb.0: # %entry
2016 ; CHECK-NEXT:    addi sp, sp, -16
2017 ; CHECK-NEXT:    sw a1, 12(sp)
2018 ; CHECK-NEXT:    sw a0, 8(sp)
2019 ; CHECK-NEXT:    addi a0, sp, 8
2020 ; CHECK-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
2021 ; CHECK-NEXT:    vlse64.v v12, (a0), zero
2022 ; CHECK-NEXT:    vssub.vv v8, v8, v12
2023 ; CHECK-NEXT:    addi sp, sp, 16
2024 ; CHECK-NEXT:    ret
2025 entry:
2026   %a = call <vscale x 4 x i64> @llvm.riscv.vssub.nxv4i64.i64(
2027     <vscale x 4 x i64> undef,
2028     <vscale x 4 x i64> %0,
2029     i64 %1,
2030     i32 %2)
2032   ret <vscale x 4 x i64> %a
2035 declare <vscale x 4 x i64> @llvm.riscv.vssub.mask.nxv4i64.i64(
2036   <vscale x 4 x i64>,
2037   <vscale x 4 x i64>,
2038   i64,
2039   <vscale x 4 x i1>,
2040   i32,
2041   i32);
2043 define <vscale x 4 x i64> @intrinsic_vssub_mask_vx_nxv4i64_nxv4i64_i64(<vscale x 4 x i64> %0, <vscale x 4 x i64> %1, i64 %2, <vscale x 4 x i1> %3, i32 %4) nounwind {
2044 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv4i64_nxv4i64_i64:
2045 ; CHECK:       # %bb.0: # %entry
2046 ; CHECK-NEXT:    addi sp, sp, -16
2047 ; CHECK-NEXT:    sw a1, 12(sp)
2048 ; CHECK-NEXT:    sw a0, 8(sp)
2049 ; CHECK-NEXT:    addi a0, sp, 8
2050 ; CHECK-NEXT:    vsetvli zero, a2, e64, m4, ta, mu
2051 ; CHECK-NEXT:    vlse64.v v16, (a0), zero
2052 ; CHECK-NEXT:    vssub.vv v8, v12, v16, v0.t
2053 ; CHECK-NEXT:    addi sp, sp, 16
2054 ; CHECK-NEXT:    ret
2055 entry:
2056   %a = call <vscale x 4 x i64> @llvm.riscv.vssub.mask.nxv4i64.i64(
2057     <vscale x 4 x i64> %0,
2058     <vscale x 4 x i64> %1,
2059     i64 %2,
2060     <vscale x 4 x i1> %3,
2061     i32 %4, i32 1)
2063   ret <vscale x 4 x i64> %a
2066 declare <vscale x 8 x i64> @llvm.riscv.vssub.nxv8i64.i64(
2067   <vscale x 8 x i64>,
2068   <vscale x 8 x i64>,
2069   i64,
2070   i32);
2072 define <vscale x 8 x i64> @intrinsic_vssub_vx_nxv8i64_nxv8i64_i64(<vscale x 8 x i64> %0, i64 %1, i32 %2) nounwind {
2073 ; CHECK-LABEL: intrinsic_vssub_vx_nxv8i64_nxv8i64_i64:
2074 ; CHECK:       # %bb.0: # %entry
2075 ; CHECK-NEXT:    addi sp, sp, -16
2076 ; CHECK-NEXT:    sw a1, 12(sp)
2077 ; CHECK-NEXT:    sw a0, 8(sp)
2078 ; CHECK-NEXT:    addi a0, sp, 8
2079 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
2080 ; CHECK-NEXT:    vlse64.v v16, (a0), zero
2081 ; CHECK-NEXT:    vssub.vv v8, v8, v16
2082 ; CHECK-NEXT:    addi sp, sp, 16
2083 ; CHECK-NEXT:    ret
2084 entry:
2085   %a = call <vscale x 8 x i64> @llvm.riscv.vssub.nxv8i64.i64(
2086     <vscale x 8 x i64> undef,
2087     <vscale x 8 x i64> %0,
2088     i64 %1,
2089     i32 %2)
2091   ret <vscale x 8 x i64> %a
2094 declare <vscale x 8 x i64> @llvm.riscv.vssub.mask.nxv8i64.i64(
2095   <vscale x 8 x i64>,
2096   <vscale x 8 x i64>,
2097   i64,
2098   <vscale x 8 x i1>,
2099   i32,
2100   i32);
2102 define <vscale x 8 x i64> @intrinsic_vssub_mask_vx_nxv8i64_nxv8i64_i64(<vscale x 8 x i64> %0, <vscale x 8 x i64> %1, i64 %2, <vscale x 8 x i1> %3, i32 %4) nounwind {
2103 ; CHECK-LABEL: intrinsic_vssub_mask_vx_nxv8i64_nxv8i64_i64:
2104 ; CHECK:       # %bb.0: # %entry
2105 ; CHECK-NEXT:    addi sp, sp, -16
2106 ; CHECK-NEXT:    sw a1, 12(sp)
2107 ; CHECK-NEXT:    sw a0, 8(sp)
2108 ; CHECK-NEXT:    addi a0, sp, 8
2109 ; CHECK-NEXT:    vsetvli zero, a2, e64, m8, ta, mu
2110 ; CHECK-NEXT:    vlse64.v v24, (a0), zero
2111 ; CHECK-NEXT:    vssub.vv v8, v16, v24, v0.t
2112 ; CHECK-NEXT:    addi sp, sp, 16
2113 ; CHECK-NEXT:    ret
2114 entry:
2115   %a = call <vscale x 8 x i64> @llvm.riscv.vssub.mask.nxv8i64.i64(
2116     <vscale x 8 x i64> %0,
2117     <vscale x 8 x i64> %1,
2118     i64 %2,
2119     <vscale x 8 x i1> %3,
2120     i32 %4, i32 1)
2122   ret <vscale x 8 x i64> %a