[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vsaddu.ll
blob7b2cab294aa4965d439f528b9d93e6c70d9b8c1a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8>, <2 x i8>)
9 define <2 x i8> @uadd_v2i8_vv(<2 x i8> %va, <2 x i8> %b) {
10 ; CHECK-LABEL: uadd_v2i8_vv:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
13 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
14 ; CHECK-NEXT:    ret
15   %v = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> %va, <2 x i8> %b)
16   ret <2 x i8> %v
19 define <2 x i8> @uadd_v2i8_vx(<2 x i8> %va, i8 %b) {
20 ; CHECK-LABEL: uadd_v2i8_vx:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
23 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
24 ; CHECK-NEXT:    ret
25   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
26   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
27   %v = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> %va, <2 x i8> %vb)
28   ret <2 x i8> %v
31 define <2 x i8> @uadd_v2i8_vi(<2 x i8> %va) {
32 ; CHECK-LABEL: uadd_v2i8_vi:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma
35 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
36 ; CHECK-NEXT:    ret
37   %v = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> %va, <2 x i8> splat (i8 8))
38   ret <2 x i8> %v
41 declare <4 x i8> @llvm.uadd.sat.v4i8(<4 x i8>, <4 x i8>)
43 define <4 x i8> @uadd_v4i8_vv(<4 x i8> %va, <4 x i8> %b) {
44 ; CHECK-LABEL: uadd_v4i8_vv:
45 ; CHECK:       # %bb.0:
46 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
47 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
48 ; CHECK-NEXT:    ret
49   %v = call <4 x i8> @llvm.uadd.sat.v4i8(<4 x i8> %va, <4 x i8> %b)
50   ret <4 x i8> %v
53 define <4 x i8> @uadd_v4i8_vx(<4 x i8> %va, i8 %b) {
54 ; CHECK-LABEL: uadd_v4i8_vx:
55 ; CHECK:       # %bb.0:
56 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
57 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
58 ; CHECK-NEXT:    ret
59   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
60   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
61   %v = call <4 x i8> @llvm.uadd.sat.v4i8(<4 x i8> %va, <4 x i8> %vb)
62   ret <4 x i8> %v
65 define <4 x i8> @uadd_v4i8_vi(<4 x i8> %va) {
66 ; CHECK-LABEL: uadd_v4i8_vi:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
69 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
70 ; CHECK-NEXT:    ret
71   %v = call <4 x i8> @llvm.uadd.sat.v4i8(<4 x i8> %va, <4 x i8> splat (i8 8))
72   ret <4 x i8> %v
75 declare <8 x i8> @llvm.uadd.sat.v8i8(<8 x i8>, <8 x i8>)
77 define <8 x i8> @uadd_v8i8_vv(<8 x i8> %va, <8 x i8> %b) {
78 ; CHECK-LABEL: uadd_v8i8_vv:
79 ; CHECK:       # %bb.0:
80 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
81 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
82 ; CHECK-NEXT:    ret
83   %v = call <8 x i8> @llvm.uadd.sat.v8i8(<8 x i8> %va, <8 x i8> %b)
84   ret <8 x i8> %v
87 define <8 x i8> @uadd_v8i8_vx(<8 x i8> %va, i8 %b) {
88 ; CHECK-LABEL: uadd_v8i8_vx:
89 ; CHECK:       # %bb.0:
90 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
91 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
92 ; CHECK-NEXT:    ret
93   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
94   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
95   %v = call <8 x i8> @llvm.uadd.sat.v8i8(<8 x i8> %va, <8 x i8> %vb)
96   ret <8 x i8> %v
99 define <8 x i8> @uadd_v8i8_vi(<8 x i8> %va) {
100 ; CHECK-LABEL: uadd_v8i8_vi:
101 ; CHECK:       # %bb.0:
102 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
103 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
104 ; CHECK-NEXT:    ret
105   %v = call <8 x i8> @llvm.uadd.sat.v8i8(<8 x i8> %va, <8 x i8> splat (i8 8))
106   ret <8 x i8> %v
109 declare <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8>, <16 x i8>)
111 define <16 x i8> @uadd_v16i8_vv(<16 x i8> %va, <16 x i8> %b) {
112 ; CHECK-LABEL: uadd_v16i8_vv:
113 ; CHECK:       # %bb.0:
114 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
115 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
116 ; CHECK-NEXT:    ret
117   %v = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %va, <16 x i8> %b)
118   ret <16 x i8> %v
121 define <16 x i8> @uadd_v16i8_vx(<16 x i8> %va, i8 %b) {
122 ; CHECK-LABEL: uadd_v16i8_vx:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
125 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
126 ; CHECK-NEXT:    ret
127   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
128   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
129   %v = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %va, <16 x i8> %vb)
130   ret <16 x i8> %v
133 define <16 x i8> @uadd_v16i8_vi(<16 x i8> %va) {
134 ; CHECK-LABEL: uadd_v16i8_vi:
135 ; CHECK:       # %bb.0:
136 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
137 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
138 ; CHECK-NEXT:    ret
139   %v = call <16 x i8> @llvm.uadd.sat.v16i8(<16 x i8> %va, <16 x i8> splat (i8 8))
140   ret <16 x i8> %v
143 declare <2 x i16> @llvm.uadd.sat.v2i16(<2 x i16>, <2 x i16>)
145 define <2 x i16> @uadd_v2i16_vv(<2 x i16> %va, <2 x i16> %b) {
146 ; CHECK-LABEL: uadd_v2i16_vv:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
149 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
150 ; CHECK-NEXT:    ret
151   %v = call <2 x i16> @llvm.uadd.sat.v2i16(<2 x i16> %va, <2 x i16> %b)
152   ret <2 x i16> %v
155 define <2 x i16> @uadd_v2i16_vx(<2 x i16> %va, i16 %b) {
156 ; CHECK-LABEL: uadd_v2i16_vx:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
159 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
160 ; CHECK-NEXT:    ret
161   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
162   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
163   %v = call <2 x i16> @llvm.uadd.sat.v2i16(<2 x i16> %va, <2 x i16> %vb)
164   ret <2 x i16> %v
167 define <2 x i16> @uadd_v2i16_vi(<2 x i16> %va) {
168 ; CHECK-LABEL: uadd_v2i16_vi:
169 ; CHECK:       # %bb.0:
170 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
171 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
172 ; CHECK-NEXT:    ret
173   %v = call <2 x i16> @llvm.uadd.sat.v2i16(<2 x i16> %va, <2 x i16> splat (i16 8))
174   ret <2 x i16> %v
177 declare <4 x i16> @llvm.uadd.sat.v4i16(<4 x i16>, <4 x i16>)
179 define <4 x i16> @uadd_v4i16_vv(<4 x i16> %va, <4 x i16> %b) {
180 ; CHECK-LABEL: uadd_v4i16_vv:
181 ; CHECK:       # %bb.0:
182 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
183 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
184 ; CHECK-NEXT:    ret
185   %v = call <4 x i16> @llvm.uadd.sat.v4i16(<4 x i16> %va, <4 x i16> %b)
186   ret <4 x i16> %v
189 define <4 x i16> @uadd_v4i16_vx(<4 x i16> %va, i16 %b) {
190 ; CHECK-LABEL: uadd_v4i16_vx:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
193 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
194 ; CHECK-NEXT:    ret
195   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
196   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
197   %v = call <4 x i16> @llvm.uadd.sat.v4i16(<4 x i16> %va, <4 x i16> %vb)
198   ret <4 x i16> %v
201 define <4 x i16> @uadd_v4i16_vi(<4 x i16> %va) {
202 ; CHECK-LABEL: uadd_v4i16_vi:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
205 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
206 ; CHECK-NEXT:    ret
207   %v = call <4 x i16> @llvm.uadd.sat.v4i16(<4 x i16> %va, <4 x i16> splat (i16 8))
208   ret <4 x i16> %v
211 declare <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16>, <8 x i16>)
213 define <8 x i16> @uadd_v8i16_vv(<8 x i16> %va, <8 x i16> %b) {
214 ; CHECK-LABEL: uadd_v8i16_vv:
215 ; CHECK:       # %bb.0:
216 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
217 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
218 ; CHECK-NEXT:    ret
219   %v = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %va, <8 x i16> %b)
220   ret <8 x i16> %v
223 define <8 x i16> @uadd_v8i16_vx(<8 x i16> %va, i16 %b) {
224 ; CHECK-LABEL: uadd_v8i16_vx:
225 ; CHECK:       # %bb.0:
226 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
227 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
228 ; CHECK-NEXT:    ret
229   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
230   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
231   %v = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %va, <8 x i16> %vb)
232   ret <8 x i16> %v
235 define <8 x i16> @uadd_v8i16_vi(<8 x i16> %va) {
236 ; CHECK-LABEL: uadd_v8i16_vi:
237 ; CHECK:       # %bb.0:
238 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
239 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
240 ; CHECK-NEXT:    ret
241   %v = call <8 x i16> @llvm.uadd.sat.v8i16(<8 x i16> %va, <8 x i16> splat (i16 8))
242   ret <8 x i16> %v
245 declare <16 x i16> @llvm.uadd.sat.v16i16(<16 x i16>, <16 x i16>)
247 define <16 x i16> @uadd_v16i16_vv(<16 x i16> %va, <16 x i16> %b) {
248 ; CHECK-LABEL: uadd_v16i16_vv:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
251 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
252 ; CHECK-NEXT:    ret
253   %v = call <16 x i16> @llvm.uadd.sat.v16i16(<16 x i16> %va, <16 x i16> %b)
254   ret <16 x i16> %v
257 define <16 x i16> @uadd_v16i16_vx(<16 x i16> %va, i16 %b) {
258 ; CHECK-LABEL: uadd_v16i16_vx:
259 ; CHECK:       # %bb.0:
260 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
261 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
262 ; CHECK-NEXT:    ret
263   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
264   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
265   %v = call <16 x i16> @llvm.uadd.sat.v16i16(<16 x i16> %va, <16 x i16> %vb)
266   ret <16 x i16> %v
269 define <16 x i16> @uadd_v16i16_vi(<16 x i16> %va) {
270 ; CHECK-LABEL: uadd_v16i16_vi:
271 ; CHECK:       # %bb.0:
272 ; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
273 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
274 ; CHECK-NEXT:    ret
275   %v = call <16 x i16> @llvm.uadd.sat.v16i16(<16 x i16> %va, <16 x i16> splat (i16 8))
276   ret <16 x i16> %v
279 declare <2 x i32> @llvm.uadd.sat.v2i32(<2 x i32>, <2 x i32>)
281 define <2 x i32> @uadd_v2i32_vv(<2 x i32> %va, <2 x i32> %b) {
282 ; CHECK-LABEL: uadd_v2i32_vv:
283 ; CHECK:       # %bb.0:
284 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
285 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
286 ; CHECK-NEXT:    ret
287   %v = call <2 x i32> @llvm.uadd.sat.v2i32(<2 x i32> %va, <2 x i32> %b)
288   ret <2 x i32> %v
291 define <2 x i32> @uadd_v2i32_vx(<2 x i32> %va, i32 %b) {
292 ; CHECK-LABEL: uadd_v2i32_vx:
293 ; CHECK:       # %bb.0:
294 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
295 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
296 ; CHECK-NEXT:    ret
297   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
298   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
299   %v = call <2 x i32> @llvm.uadd.sat.v2i32(<2 x i32> %va, <2 x i32> %vb)
300   ret <2 x i32> %v
303 define <2 x i32> @uadd_v2i32_vx_commute(<2 x i32> %va, i32 %b) {
304 ; CHECK-LABEL: uadd_v2i32_vx_commute:
305 ; CHECK:       # %bb.0:
306 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
307 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
308 ; CHECK-NEXT:    ret
309   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
310   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
311   %v = call <2 x i32> @llvm.uadd.sat.v2i32(<2 x i32> %vb, <2 x i32> %va)
312   ret <2 x i32> %v
315 define <2 x i32> @uadd_v2i32_vi(<2 x i32> %va) {
316 ; CHECK-LABEL: uadd_v2i32_vi:
317 ; CHECK:       # %bb.0:
318 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
319 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
320 ; CHECK-NEXT:    ret
321   %v = call <2 x i32> @llvm.uadd.sat.v2i32(<2 x i32> %va, <2 x i32> splat (i32 8))
322   ret <2 x i32> %v
325 declare <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32>, <4 x i32>)
327 define <4 x i32> @uadd_v4i32_vv(<4 x i32> %va, <4 x i32> %b) {
328 ; CHECK-LABEL: uadd_v4i32_vv:
329 ; CHECK:       # %bb.0:
330 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
331 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
332 ; CHECK-NEXT:    ret
333   %v = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %va, <4 x i32> %b)
334   ret <4 x i32> %v
337 define <4 x i32> @uadd_v4i32_vx(<4 x i32> %va, i32 %b) {
338 ; CHECK-LABEL: uadd_v4i32_vx:
339 ; CHECK:       # %bb.0:
340 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
341 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
342 ; CHECK-NEXT:    ret
343   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
344   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
345   %v = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %va, <4 x i32> %vb)
346   ret <4 x i32> %v
349 define <4 x i32> @uadd_v4i32_vi(<4 x i32> %va) {
350 ; CHECK-LABEL: uadd_v4i32_vi:
351 ; CHECK:       # %bb.0:
352 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
353 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
354 ; CHECK-NEXT:    ret
355   %v = call <4 x i32> @llvm.uadd.sat.v4i32(<4 x i32> %va, <4 x i32> splat (i32 8))
356   ret <4 x i32> %v
359 declare <8 x i32> @llvm.uadd.sat.v8i32(<8 x i32>, <8 x i32>)
361 define <8 x i32> @uadd_v8i32_vv(<8 x i32> %va, <8 x i32> %b) {
362 ; CHECK-LABEL: uadd_v8i32_vv:
363 ; CHECK:       # %bb.0:
364 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
365 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
366 ; CHECK-NEXT:    ret
367   %v = call <8 x i32> @llvm.uadd.sat.v8i32(<8 x i32> %va, <8 x i32> %b)
368   ret <8 x i32> %v
371 define <8 x i32> @uadd_v8i32_vx(<8 x i32> %va, i32 %b) {
372 ; CHECK-LABEL: uadd_v8i32_vx:
373 ; CHECK:       # %bb.0:
374 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
375 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
376 ; CHECK-NEXT:    ret
377   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
378   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
379   %v = call <8 x i32> @llvm.uadd.sat.v8i32(<8 x i32> %va, <8 x i32> %vb)
380   ret <8 x i32> %v
383 define <8 x i32> @uadd_v8i32_vi(<8 x i32> %va) {
384 ; CHECK-LABEL: uadd_v8i32_vi:
385 ; CHECK:       # %bb.0:
386 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
387 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
388 ; CHECK-NEXT:    ret
389   %v = call <8 x i32> @llvm.uadd.sat.v8i32(<8 x i32> %va, <8 x i32> splat (i32 8))
390   ret <8 x i32> %v
393 declare <16 x i32> @llvm.uadd.sat.v16i32(<16 x i32>, <16 x i32>)
395 define <16 x i32> @uadd_v16i32_vv(<16 x i32> %va, <16 x i32> %b) {
396 ; CHECK-LABEL: uadd_v16i32_vv:
397 ; CHECK:       # %bb.0:
398 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
399 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12
400 ; CHECK-NEXT:    ret
401   %v = call <16 x i32> @llvm.uadd.sat.v16i32(<16 x i32> %va, <16 x i32> %b)
402   ret <16 x i32> %v
405 define <16 x i32> @uadd_v16i32_vx(<16 x i32> %va, i32 %b) {
406 ; CHECK-LABEL: uadd_v16i32_vx:
407 ; CHECK:       # %bb.0:
408 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
409 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
410 ; CHECK-NEXT:    ret
411   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
412   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
413   %v = call <16 x i32> @llvm.uadd.sat.v16i32(<16 x i32> %va, <16 x i32> %vb)
414   ret <16 x i32> %v
417 define <16 x i32> @uadd_v16i32_vi(<16 x i32> %va) {
418 ; CHECK-LABEL: uadd_v16i32_vi:
419 ; CHECK:       # %bb.0:
420 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
421 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
422 ; CHECK-NEXT:    ret
423   %v = call <16 x i32> @llvm.uadd.sat.v16i32(<16 x i32> %va, <16 x i32> splat (i32 8))
424   ret <16 x i32> %v
427 declare <2 x i64> @llvm.uadd.sat.v2i64(<2 x i64>, <2 x i64>)
429 define <2 x i64> @uadd_v2i64_vv(<2 x i64> %va, <2 x i64> %b) {
430 ; CHECK-LABEL: uadd_v2i64_vv:
431 ; CHECK:       # %bb.0:
432 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
433 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
434 ; CHECK-NEXT:    ret
435   %v = call <2 x i64> @llvm.uadd.sat.v2i64(<2 x i64> %va, <2 x i64> %b)
436   ret <2 x i64> %v
439 define <2 x i64> @uadd_v2i64_vx(<2 x i64> %va, i64 %b) {
440 ; RV32-LABEL: uadd_v2i64_vx:
441 ; RV32:       # %bb.0:
442 ; RV32-NEXT:    addi sp, sp, -16
443 ; RV32-NEXT:    .cfi_def_cfa_offset 16
444 ; RV32-NEXT:    sw a1, 12(sp)
445 ; RV32-NEXT:    sw a0, 8(sp)
446 ; RV32-NEXT:    addi a0, sp, 8
447 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
448 ; RV32-NEXT:    vlse64.v v9, (a0), zero
449 ; RV32-NEXT:    vsaddu.vv v8, v8, v9
450 ; RV32-NEXT:    addi sp, sp, 16
451 ; RV32-NEXT:    ret
453 ; RV64-LABEL: uadd_v2i64_vx:
454 ; RV64:       # %bb.0:
455 ; RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
456 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
457 ; RV64-NEXT:    ret
458   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
459   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
460   %v = call <2 x i64> @llvm.uadd.sat.v2i64(<2 x i64> %va, <2 x i64> %vb)
461   ret <2 x i64> %v
464 define <2 x i64> @uadd_v2i64_vi(<2 x i64> %va) {
465 ; CHECK-LABEL: uadd_v2i64_vi:
466 ; CHECK:       # %bb.0:
467 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
468 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
469 ; CHECK-NEXT:    ret
470   %v = call <2 x i64> @llvm.uadd.sat.v2i64(<2 x i64> %va, <2 x i64> splat (i64 8))
471   ret <2 x i64> %v
474 declare <4 x i64> @llvm.uadd.sat.v4i64(<4 x i64>, <4 x i64>)
476 define <4 x i64> @uadd_v4i64_vv(<4 x i64> %va, <4 x i64> %b) {
477 ; CHECK-LABEL: uadd_v4i64_vv:
478 ; CHECK:       # %bb.0:
479 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
480 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
481 ; CHECK-NEXT:    ret
482   %v = call <4 x i64> @llvm.uadd.sat.v4i64(<4 x i64> %va, <4 x i64> %b)
483   ret <4 x i64> %v
486 define <4 x i64> @uadd_v4i64_vx(<4 x i64> %va, i64 %b) {
487 ; RV32-LABEL: uadd_v4i64_vx:
488 ; RV32:       # %bb.0:
489 ; RV32-NEXT:    addi sp, sp, -16
490 ; RV32-NEXT:    .cfi_def_cfa_offset 16
491 ; RV32-NEXT:    sw a1, 12(sp)
492 ; RV32-NEXT:    sw a0, 8(sp)
493 ; RV32-NEXT:    addi a0, sp, 8
494 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
495 ; RV32-NEXT:    vlse64.v v10, (a0), zero
496 ; RV32-NEXT:    vsaddu.vv v8, v8, v10
497 ; RV32-NEXT:    addi sp, sp, 16
498 ; RV32-NEXT:    ret
500 ; RV64-LABEL: uadd_v4i64_vx:
501 ; RV64:       # %bb.0:
502 ; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
503 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
504 ; RV64-NEXT:    ret
505   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
506   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
507   %v = call <4 x i64> @llvm.uadd.sat.v4i64(<4 x i64> %va, <4 x i64> %vb)
508   ret <4 x i64> %v
511 define <4 x i64> @uadd_v4i64_vi(<4 x i64> %va) {
512 ; CHECK-LABEL: uadd_v4i64_vi:
513 ; CHECK:       # %bb.0:
514 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
515 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
516 ; CHECK-NEXT:    ret
517   %v = call <4 x i64> @llvm.uadd.sat.v4i64(<4 x i64> %va, <4 x i64> splat (i64 8))
518   ret <4 x i64> %v
521 declare <8 x i64> @llvm.uadd.sat.v8i64(<8 x i64>, <8 x i64>)
523 define <8 x i64> @uadd_v8i64_vv(<8 x i64> %va, <8 x i64> %b) {
524 ; CHECK-LABEL: uadd_v8i64_vv:
525 ; CHECK:       # %bb.0:
526 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
527 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12
528 ; CHECK-NEXT:    ret
529   %v = call <8 x i64> @llvm.uadd.sat.v8i64(<8 x i64> %va, <8 x i64> %b)
530   ret <8 x i64> %v
533 define <8 x i64> @uadd_v8i64_vx(<8 x i64> %va, i64 %b) {
534 ; RV32-LABEL: uadd_v8i64_vx:
535 ; RV32:       # %bb.0:
536 ; RV32-NEXT:    addi sp, sp, -16
537 ; RV32-NEXT:    .cfi_def_cfa_offset 16
538 ; RV32-NEXT:    sw a1, 12(sp)
539 ; RV32-NEXT:    sw a0, 8(sp)
540 ; RV32-NEXT:    addi a0, sp, 8
541 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
542 ; RV32-NEXT:    vlse64.v v12, (a0), zero
543 ; RV32-NEXT:    vsaddu.vv v8, v8, v12
544 ; RV32-NEXT:    addi sp, sp, 16
545 ; RV32-NEXT:    ret
547 ; RV64-LABEL: uadd_v8i64_vx:
548 ; RV64:       # %bb.0:
549 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
550 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
551 ; RV64-NEXT:    ret
552   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
553   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
554   %v = call <8 x i64> @llvm.uadd.sat.v8i64(<8 x i64> %va, <8 x i64> %vb)
555   ret <8 x i64> %v
558 define <8 x i64> @uadd_v8i64_vi(<8 x i64> %va) {
559 ; CHECK-LABEL: uadd_v8i64_vi:
560 ; CHECK:       # %bb.0:
561 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
562 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
563 ; CHECK-NEXT:    ret
564   %v = call <8 x i64> @llvm.uadd.sat.v8i64(<8 x i64> %va, <8 x i64> splat (i64 8))
565   ret <8 x i64> %v
568 declare <16 x i64> @llvm.uadd.sat.v16i64(<16 x i64>, <16 x i64>)
570 define <16 x i64> @uadd_v16i64_vv(<16 x i64> %va, <16 x i64> %b) {
571 ; CHECK-LABEL: uadd_v16i64_vv:
572 ; CHECK:       # %bb.0:
573 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
574 ; CHECK-NEXT:    vsaddu.vv v8, v8, v16
575 ; CHECK-NEXT:    ret
576   %v = call <16 x i64> @llvm.uadd.sat.v16i64(<16 x i64> %va, <16 x i64> %b)
577   ret <16 x i64> %v
580 define <16 x i64> @uadd_v16i64_vx(<16 x i64> %va, i64 %b) {
581 ; RV32-LABEL: uadd_v16i64_vx:
582 ; RV32:       # %bb.0:
583 ; RV32-NEXT:    addi sp, sp, -16
584 ; RV32-NEXT:    .cfi_def_cfa_offset 16
585 ; RV32-NEXT:    sw a1, 12(sp)
586 ; RV32-NEXT:    sw a0, 8(sp)
587 ; RV32-NEXT:    addi a0, sp, 8
588 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
589 ; RV32-NEXT:    vlse64.v v16, (a0), zero
590 ; RV32-NEXT:    vsaddu.vv v8, v8, v16
591 ; RV32-NEXT:    addi sp, sp, 16
592 ; RV32-NEXT:    ret
594 ; RV64-LABEL: uadd_v16i64_vx:
595 ; RV64:       # %bb.0:
596 ; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
597 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
598 ; RV64-NEXT:    ret
599   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
600   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
601   %v = call <16 x i64> @llvm.uadd.sat.v16i64(<16 x i64> %va, <16 x i64> %vb)
602   ret <16 x i64> %v
605 define <16 x i64> @uadd_v16i64_vi(<16 x i64> %va) {
606 ; CHECK-LABEL: uadd_v16i64_vi:
607 ; CHECK:       # %bb.0:
608 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
609 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
610 ; CHECK-NEXT:    ret
611   %v = call <16 x i64> @llvm.uadd.sat.v16i64(<16 x i64> %va, <16 x i64> splat (i64 8))
612   ret <16 x i64> %v