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 <8 x i7> @llvm.vp.uadd.sat.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32)
9 define <8 x i7> @vsaddu_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsaddu_vv_v8i7:
12 ; CHECK-NEXT: li a1, 127
13 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
14 ; CHECK-NEXT: vand.vx v9, v9, a1
15 ; CHECK-NEXT: vand.vx v8, v8, a1
16 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
17 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
18 ; CHECK-NEXT: vminu.vx v8, v8, a1, v0.t
20 %v = call <8 x i7> @llvm.vp.uadd.sat.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
24 declare <2 x i8> @llvm.vp.uadd.sat.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
26 define <2 x i8> @vsaddu_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
27 ; CHECK-LABEL: vsaddu_vv_v2i8:
29 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
30 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
32 %v = call <2 x i8> @llvm.vp.uadd.sat.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
36 define <2 x i8> @vsaddu_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
37 ; CHECK-LABEL: vsaddu_vv_v2i8_unmasked:
39 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
40 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
42 %v = call <2 x i8> @llvm.vp.uadd.sat.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> splat (i1 true), i32 %evl)
46 define <2 x i8> @vsaddu_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
47 ; CHECK-LABEL: vsaddu_vx_v2i8:
49 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
50 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
52 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
53 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
54 %v = call <2 x i8> @llvm.vp.uadd.sat.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
58 define <2 x i8> @vsaddu_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
59 ; CHECK-LABEL: vsaddu_vx_v2i8_unmasked:
61 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
62 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
64 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
65 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
66 %v = call <2 x i8> @llvm.vp.uadd.sat.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> splat (i1 true), i32 %evl)
70 define <2 x i8> @vsaddu_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
71 ; CHECK-LABEL: vsaddu_vi_v2i8:
73 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
74 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
76 %v = call <2 x i8> @llvm.vp.uadd.sat.v2i8(<2 x i8> %va, <2 x i8> splat (i8 -1), <2 x i1> %m, i32 %evl)
80 define <2 x i8> @vsaddu_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
81 ; CHECK-LABEL: vsaddu_vi_v2i8_unmasked:
83 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
84 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
86 %v = call <2 x i8> @llvm.vp.uadd.sat.v2i8(<2 x i8> %va, <2 x i8> splat (i8 -1), <2 x i1> splat (i1 true), i32 %evl)
90 declare <4 x i8> @llvm.vp.uadd.sat.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
92 define <4 x i8> @vsaddu_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
93 ; CHECK-LABEL: vsaddu_vv_v4i8:
95 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
96 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
98 %v = call <4 x i8> @llvm.vp.uadd.sat.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
102 define <4 x i8> @vsaddu_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
103 ; CHECK-LABEL: vsaddu_vv_v4i8_unmasked:
105 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
106 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
108 %v = call <4 x i8> @llvm.vp.uadd.sat.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> splat (i1 true), i32 %evl)
112 define <4 x i8> @vsaddu_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
113 ; CHECK-LABEL: vsaddu_vx_v4i8:
115 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
116 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
118 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
119 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
120 %v = call <4 x i8> @llvm.vp.uadd.sat.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
124 define <4 x i8> @vsaddu_vx_v4i8_commute(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
125 ; CHECK-LABEL: vsaddu_vx_v4i8_commute:
127 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
128 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
130 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
131 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
132 %v = call <4 x i8> @llvm.vp.uadd.sat.v4i8(<4 x i8> %vb, <4 x i8> %va, <4 x i1> %m, i32 %evl)
136 define <4 x i8> @vsaddu_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
137 ; CHECK-LABEL: vsaddu_vx_v4i8_unmasked:
139 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
140 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
142 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
143 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
144 %v = call <4 x i8> @llvm.vp.uadd.sat.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> splat (i1 true), i32 %evl)
148 define <4 x i8> @vsaddu_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
149 ; CHECK-LABEL: vsaddu_vi_v4i8:
151 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
152 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
154 %v = call <4 x i8> @llvm.vp.uadd.sat.v4i8(<4 x i8> %va, <4 x i8> splat (i8 -1), <4 x i1> %m, i32 %evl)
158 define <4 x i8> @vsaddu_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
159 ; CHECK-LABEL: vsaddu_vi_v4i8_unmasked:
161 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
162 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
164 %v = call <4 x i8> @llvm.vp.uadd.sat.v4i8(<4 x i8> %va, <4 x i8> splat (i8 -1), <4 x i1> splat (i1 true), i32 %evl)
168 declare <5 x i8> @llvm.vp.uadd.sat.v5i8(<5 x i8>, <5 x i8>, <5 x i1>, i32)
170 define <5 x i8> @vsaddu_vv_v5i8(<5 x i8> %va, <5 x i8> %b, <5 x i1> %m, i32 zeroext %evl) {
171 ; CHECK-LABEL: vsaddu_vv_v5i8:
173 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
174 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
176 %v = call <5 x i8> @llvm.vp.uadd.sat.v5i8(<5 x i8> %va, <5 x i8> %b, <5 x i1> %m, i32 %evl)
180 define <5 x i8> @vsaddu_vv_v5i8_unmasked(<5 x i8> %va, <5 x i8> %b, i32 zeroext %evl) {
181 ; CHECK-LABEL: vsaddu_vv_v5i8_unmasked:
183 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
184 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
186 %v = call <5 x i8> @llvm.vp.uadd.sat.v5i8(<5 x i8> %va, <5 x i8> %b, <5 x i1> splat (i1 true), i32 %evl)
190 define <5 x i8> @vsaddu_vx_v5i8(<5 x i8> %va, i8 %b, <5 x i1> %m, i32 zeroext %evl) {
191 ; CHECK-LABEL: vsaddu_vx_v5i8:
193 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
194 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
196 %elt.head = insertelement <5 x i8> poison, i8 %b, i32 0
197 %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer
198 %v = call <5 x i8> @llvm.vp.uadd.sat.v5i8(<5 x i8> %va, <5 x i8> %vb, <5 x i1> %m, i32 %evl)
202 define <5 x i8> @vsaddu_vx_v5i8_unmasked(<5 x i8> %va, i8 %b, i32 zeroext %evl) {
203 ; CHECK-LABEL: vsaddu_vx_v5i8_unmasked:
205 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
206 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
208 %elt.head = insertelement <5 x i8> poison, i8 %b, i32 0
209 %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer
210 %v = call <5 x i8> @llvm.vp.uadd.sat.v5i8(<5 x i8> %va, <5 x i8> %vb, <5 x i1> splat (i1 true), i32 %evl)
214 define <5 x i8> @vsaddu_vi_v5i8(<5 x i8> %va, <5 x i1> %m, i32 zeroext %evl) {
215 ; CHECK-LABEL: vsaddu_vi_v5i8:
217 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
218 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
220 %v = call <5 x i8> @llvm.vp.uadd.sat.v5i8(<5 x i8> %va, <5 x i8> splat (i8 -1), <5 x i1> %m, i32 %evl)
224 define <5 x i8> @vsaddu_vi_v5i8_unmasked(<5 x i8> %va, i32 zeroext %evl) {
225 ; CHECK-LABEL: vsaddu_vi_v5i8_unmasked:
227 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
228 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
230 %v = call <5 x i8> @llvm.vp.uadd.sat.v5i8(<5 x i8> %va, <5 x i8> splat (i8 -1), <5 x i1> splat (i1 true), i32 %evl)
234 declare <8 x i8> @llvm.vp.uadd.sat.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
236 define <8 x i8> @vsaddu_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
237 ; CHECK-LABEL: vsaddu_vv_v8i8:
239 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
240 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
242 %v = call <8 x i8> @llvm.vp.uadd.sat.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
246 define <8 x i8> @vsaddu_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
247 ; CHECK-LABEL: vsaddu_vv_v8i8_unmasked:
249 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
250 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
252 %v = call <8 x i8> @llvm.vp.uadd.sat.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 %evl)
256 define <8 x i8> @vsaddu_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
257 ; CHECK-LABEL: vsaddu_vx_v8i8:
259 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
260 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
262 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
263 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
264 %v = call <8 x i8> @llvm.vp.uadd.sat.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
268 define <8 x i8> @vsaddu_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
269 ; CHECK-LABEL: vsaddu_vx_v8i8_unmasked:
271 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
272 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
274 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
275 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
276 %v = call <8 x i8> @llvm.vp.uadd.sat.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> splat (i1 true), i32 %evl)
280 define <8 x i8> @vsaddu_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
281 ; CHECK-LABEL: vsaddu_vi_v8i8:
283 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
284 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
286 %v = call <8 x i8> @llvm.vp.uadd.sat.v8i8(<8 x i8> %va, <8 x i8> splat (i8 -1), <8 x i1> %m, i32 %evl)
290 define <8 x i8> @vsaddu_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
291 ; CHECK-LABEL: vsaddu_vi_v8i8_unmasked:
293 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
294 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
296 %v = call <8 x i8> @llvm.vp.uadd.sat.v8i8(<8 x i8> %va, <8 x i8> splat (i8 -1), <8 x i1> splat (i1 true), i32 %evl)
300 declare <16 x i8> @llvm.vp.uadd.sat.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
302 define <16 x i8> @vsaddu_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
303 ; CHECK-LABEL: vsaddu_vv_v16i8:
305 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
306 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
308 %v = call <16 x i8> @llvm.vp.uadd.sat.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
312 define <16 x i8> @vsaddu_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
313 ; CHECK-LABEL: vsaddu_vv_v16i8_unmasked:
315 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
316 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
318 %v = call <16 x i8> @llvm.vp.uadd.sat.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> splat (i1 true), i32 %evl)
322 define <16 x i8> @vsaddu_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
323 ; CHECK-LABEL: vsaddu_vx_v16i8:
325 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
326 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
328 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
329 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
330 %v = call <16 x i8> @llvm.vp.uadd.sat.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
334 define <16 x i8> @vsaddu_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
335 ; CHECK-LABEL: vsaddu_vx_v16i8_unmasked:
337 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
338 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
340 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
341 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
342 %v = call <16 x i8> @llvm.vp.uadd.sat.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> splat (i1 true), i32 %evl)
346 define <16 x i8> @vsaddu_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
347 ; CHECK-LABEL: vsaddu_vi_v16i8:
349 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
350 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
352 %v = call <16 x i8> @llvm.vp.uadd.sat.v16i8(<16 x i8> %va, <16 x i8> splat (i8 -1), <16 x i1> %m, i32 %evl)
356 define <16 x i8> @vsaddu_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
357 ; CHECK-LABEL: vsaddu_vi_v16i8_unmasked:
359 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
360 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
362 %v = call <16 x i8> @llvm.vp.uadd.sat.v16i8(<16 x i8> %va, <16 x i8> splat (i8 -1), <16 x i1> splat (i1 true), i32 %evl)
366 declare <256 x i8> @llvm.vp.uadd.sat.v258i8(<256 x i8>, <256 x i8>, <256 x i1>, i32)
368 define <256 x i8> @vsaddu_vi_v258i8(<256 x i8> %va, <256 x i1> %m, i32 zeroext %evl) {
369 ; CHECK-LABEL: vsaddu_vi_v258i8:
371 ; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma
372 ; CHECK-NEXT: vmv1r.v v24, v0
373 ; CHECK-NEXT: li a2, 128
374 ; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma
375 ; CHECK-NEXT: vlm.v v0, (a0)
376 ; CHECK-NEXT: addi a0, a1, -128
377 ; CHECK-NEXT: sltu a3, a1, a0
378 ; CHECK-NEXT: addi a3, a3, -1
379 ; CHECK-NEXT: and a0, a3, a0
380 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
381 ; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t
382 ; CHECK-NEXT: bltu a1, a2, .LBB32_2
383 ; CHECK-NEXT: # %bb.1:
384 ; CHECK-NEXT: li a1, 128
385 ; CHECK-NEXT: .LBB32_2:
386 ; CHECK-NEXT: vmv1r.v v0, v24
387 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
388 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
390 %v = call <256 x i8> @llvm.vp.uadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> %m, i32 %evl)
394 define <256 x i8> @vsaddu_vi_v258i8_unmasked(<256 x i8> %va, i32 zeroext %evl) {
395 ; CHECK-LABEL: vsaddu_vi_v258i8_unmasked:
397 ; CHECK-NEXT: li a2, 128
398 ; CHECK-NEXT: mv a1, a0
399 ; CHECK-NEXT: bltu a0, a2, .LBB33_2
400 ; CHECK-NEXT: # %bb.1:
401 ; CHECK-NEXT: li a1, 128
402 ; CHECK-NEXT: .LBB33_2:
403 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
404 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
405 ; CHECK-NEXT: addi a1, a0, -128
406 ; CHECK-NEXT: sltu a0, a0, a1
407 ; CHECK-NEXT: addi a0, a0, -1
408 ; CHECK-NEXT: and a0, a0, a1
409 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
410 ; CHECK-NEXT: vsaddu.vi v16, v16, -1
412 %v = call <256 x i8> @llvm.vp.uadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> splat (i1 true), i32 %evl)
416 ; Test splitting when the %evl is a known constant.
418 define <256 x i8> @vsaddu_vi_v258i8_evl129(<256 x i8> %va, <256 x i1> %m) {
419 ; CHECK-LABEL: vsaddu_vi_v258i8_evl129:
421 ; CHECK-NEXT: li a1, 128
422 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
423 ; CHECK-NEXT: vlm.v v24, (a0)
424 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
425 ; CHECK-NEXT: vmv1r.v v0, v24
426 ; CHECK-NEXT: vsetivli zero, 1, e8, m8, ta, ma
427 ; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t
429 %v = call <256 x i8> @llvm.vp.uadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> %m, i32 129)
433 ; FIXME: The upper half is doing nothing.
435 define <256 x i8> @vsaddu_vi_v258i8_evl128(<256 x i8> %va, <256 x i1> %m) {
436 ; CHECK-LABEL: vsaddu_vi_v258i8_evl128:
438 ; CHECK-NEXT: li a1, 128
439 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
440 ; CHECK-NEXT: vlm.v v24, (a0)
441 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
442 ; CHECK-NEXT: vmv1r.v v0, v24
443 ; CHECK-NEXT: vsetivli zero, 0, e8, m8, ta, ma
444 ; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t
446 %v = call <256 x i8> @llvm.vp.uadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> %m, i32 128)
450 declare <2 x i16> @llvm.vp.uadd.sat.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
452 define <2 x i16> @vsaddu_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
453 ; CHECK-LABEL: vsaddu_vv_v2i16:
455 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
456 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
458 %v = call <2 x i16> @llvm.vp.uadd.sat.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
462 define <2 x i16> @vsaddu_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
463 ; CHECK-LABEL: vsaddu_vv_v2i16_unmasked:
465 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
466 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
468 %v = call <2 x i16> @llvm.vp.uadd.sat.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> splat (i1 true), i32 %evl)
472 define <2 x i16> @vsaddu_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
473 ; CHECK-LABEL: vsaddu_vx_v2i16:
475 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
476 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
478 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
479 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
480 %v = call <2 x i16> @llvm.vp.uadd.sat.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
484 define <2 x i16> @vsaddu_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
485 ; CHECK-LABEL: vsaddu_vx_v2i16_unmasked:
487 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
488 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
490 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
491 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
492 %v = call <2 x i16> @llvm.vp.uadd.sat.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> splat (i1 true), i32 %evl)
496 define <2 x i16> @vsaddu_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
497 ; CHECK-LABEL: vsaddu_vi_v2i16:
499 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
500 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
502 %v = call <2 x i16> @llvm.vp.uadd.sat.v2i16(<2 x i16> %va, <2 x i16> splat (i16 -1), <2 x i1> %m, i32 %evl)
506 define <2 x i16> @vsaddu_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
507 ; CHECK-LABEL: vsaddu_vi_v2i16_unmasked:
509 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
510 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
512 %v = call <2 x i16> @llvm.vp.uadd.sat.v2i16(<2 x i16> %va, <2 x i16> splat (i16 -1), <2 x i1> splat (i1 true), i32 %evl)
516 declare <4 x i16> @llvm.vp.uadd.sat.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
518 define <4 x i16> @vsaddu_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
519 ; CHECK-LABEL: vsaddu_vv_v4i16:
521 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
522 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
524 %v = call <4 x i16> @llvm.vp.uadd.sat.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
528 define <4 x i16> @vsaddu_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
529 ; CHECK-LABEL: vsaddu_vv_v4i16_unmasked:
531 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
532 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
534 %v = call <4 x i16> @llvm.vp.uadd.sat.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> splat (i1 true), i32 %evl)
538 define <4 x i16> @vsaddu_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
539 ; CHECK-LABEL: vsaddu_vx_v4i16:
541 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
542 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
544 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
545 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
546 %v = call <4 x i16> @llvm.vp.uadd.sat.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
550 define <4 x i16> @vsaddu_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
551 ; CHECK-LABEL: vsaddu_vx_v4i16_unmasked:
553 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
554 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
556 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
557 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
558 %v = call <4 x i16> @llvm.vp.uadd.sat.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> splat (i1 true), i32 %evl)
562 define <4 x i16> @vsaddu_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
563 ; CHECK-LABEL: vsaddu_vi_v4i16:
565 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
566 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
568 %v = call <4 x i16> @llvm.vp.uadd.sat.v4i16(<4 x i16> %va, <4 x i16> splat (i16 -1), <4 x i1> %m, i32 %evl)
572 define <4 x i16> @vsaddu_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
573 ; CHECK-LABEL: vsaddu_vi_v4i16_unmasked:
575 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
576 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
578 %v = call <4 x i16> @llvm.vp.uadd.sat.v4i16(<4 x i16> %va, <4 x i16> splat (i16 -1), <4 x i1> splat (i1 true), i32 %evl)
582 declare <8 x i16> @llvm.vp.uadd.sat.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
584 define <8 x i16> @vsaddu_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
585 ; CHECK-LABEL: vsaddu_vv_v8i16:
587 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
588 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
590 %v = call <8 x i16> @llvm.vp.uadd.sat.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
594 define <8 x i16> @vsaddu_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
595 ; CHECK-LABEL: vsaddu_vv_v8i16_unmasked:
597 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
598 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
600 %v = call <8 x i16> @llvm.vp.uadd.sat.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> splat (i1 true), i32 %evl)
604 define <8 x i16> @vsaddu_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
605 ; CHECK-LABEL: vsaddu_vx_v8i16:
607 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
608 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
610 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
611 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
612 %v = call <8 x i16> @llvm.vp.uadd.sat.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
616 define <8 x i16> @vsaddu_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
617 ; CHECK-LABEL: vsaddu_vx_v8i16_unmasked:
619 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
620 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
622 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
623 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
624 %v = call <8 x i16> @llvm.vp.uadd.sat.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> splat (i1 true), i32 %evl)
628 define <8 x i16> @vsaddu_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
629 ; CHECK-LABEL: vsaddu_vi_v8i16:
631 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
632 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
634 %v = call <8 x i16> @llvm.vp.uadd.sat.v8i16(<8 x i16> %va, <8 x i16> splat (i16 -1), <8 x i1> %m, i32 %evl)
638 define <8 x i16> @vsaddu_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
639 ; CHECK-LABEL: vsaddu_vi_v8i16_unmasked:
641 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
642 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
644 %v = call <8 x i16> @llvm.vp.uadd.sat.v8i16(<8 x i16> %va, <8 x i16> splat (i16 -1), <8 x i1> splat (i1 true), i32 %evl)
648 declare <16 x i16> @llvm.vp.uadd.sat.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
650 define <16 x i16> @vsaddu_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
651 ; CHECK-LABEL: vsaddu_vv_v16i16:
653 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
654 ; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t
656 %v = call <16 x i16> @llvm.vp.uadd.sat.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
660 define <16 x i16> @vsaddu_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
661 ; CHECK-LABEL: vsaddu_vv_v16i16_unmasked:
663 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
664 ; CHECK-NEXT: vsaddu.vv v8, v8, v10
666 %v = call <16 x i16> @llvm.vp.uadd.sat.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> splat (i1 true), i32 %evl)
670 define <16 x i16> @vsaddu_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
671 ; CHECK-LABEL: vsaddu_vx_v16i16:
673 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
674 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
676 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
677 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
678 %v = call <16 x i16> @llvm.vp.uadd.sat.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
682 define <16 x i16> @vsaddu_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
683 ; CHECK-LABEL: vsaddu_vx_v16i16_unmasked:
685 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
686 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
688 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
689 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
690 %v = call <16 x i16> @llvm.vp.uadd.sat.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> splat (i1 true), i32 %evl)
694 define <16 x i16> @vsaddu_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
695 ; CHECK-LABEL: vsaddu_vi_v16i16:
697 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
698 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
700 %v = call <16 x i16> @llvm.vp.uadd.sat.v16i16(<16 x i16> %va, <16 x i16> splat (i16 -1), <16 x i1> %m, i32 %evl)
704 define <16 x i16> @vsaddu_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
705 ; CHECK-LABEL: vsaddu_vi_v16i16_unmasked:
707 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
708 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
710 %v = call <16 x i16> @llvm.vp.uadd.sat.v16i16(<16 x i16> %va, <16 x i16> splat (i16 -1), <16 x i1> splat (i1 true), i32 %evl)
714 declare <2 x i32> @llvm.vp.uadd.sat.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
716 define <2 x i32> @vsaddu_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
717 ; CHECK-LABEL: vsaddu_vv_v2i32:
719 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
720 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
722 %v = call <2 x i32> @llvm.vp.uadd.sat.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
726 define <2 x i32> @vsaddu_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
727 ; CHECK-LABEL: vsaddu_vv_v2i32_unmasked:
729 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
730 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
732 %v = call <2 x i32> @llvm.vp.uadd.sat.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> splat (i1 true), i32 %evl)
736 define <2 x i32> @vsaddu_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
737 ; CHECK-LABEL: vsaddu_vx_v2i32:
739 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
740 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
742 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
743 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
744 %v = call <2 x i32> @llvm.vp.uadd.sat.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
748 define <2 x i32> @vsaddu_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
749 ; CHECK-LABEL: vsaddu_vx_v2i32_unmasked:
751 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
752 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
754 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
755 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
756 %v = call <2 x i32> @llvm.vp.uadd.sat.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> splat (i1 true), i32 %evl)
760 define <2 x i32> @vsaddu_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
761 ; CHECK-LABEL: vsaddu_vi_v2i32:
763 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
764 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
766 %v = call <2 x i32> @llvm.vp.uadd.sat.v2i32(<2 x i32> %va, <2 x i32> splat (i32 -1), <2 x i1> %m, i32 %evl)
770 define <2 x i32> @vsaddu_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
771 ; CHECK-LABEL: vsaddu_vi_v2i32_unmasked:
773 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
774 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
776 %v = call <2 x i32> @llvm.vp.uadd.sat.v2i32(<2 x i32> %va, <2 x i32> splat (i32 -1), <2 x i1> splat (i1 true), i32 %evl)
780 declare <4 x i32> @llvm.vp.uadd.sat.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
782 define <4 x i32> @vsaddu_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
783 ; CHECK-LABEL: vsaddu_vv_v4i32:
785 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
786 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
788 %v = call <4 x i32> @llvm.vp.uadd.sat.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
792 define <4 x i32> @vsaddu_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
793 ; CHECK-LABEL: vsaddu_vv_v4i32_unmasked:
795 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
796 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
798 %v = call <4 x i32> @llvm.vp.uadd.sat.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> splat (i1 true), i32 %evl)
802 define <4 x i32> @vsaddu_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
803 ; CHECK-LABEL: vsaddu_vx_v4i32:
805 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
806 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
808 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
809 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
810 %v = call <4 x i32> @llvm.vp.uadd.sat.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
814 define <4 x i32> @vsaddu_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
815 ; CHECK-LABEL: vsaddu_vx_v4i32_unmasked:
817 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
818 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
820 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
821 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
822 %v = call <4 x i32> @llvm.vp.uadd.sat.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> splat (i1 true), i32 %evl)
826 define <4 x i32> @vsaddu_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
827 ; CHECK-LABEL: vsaddu_vi_v4i32:
829 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
830 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
832 %v = call <4 x i32> @llvm.vp.uadd.sat.v4i32(<4 x i32> %va, <4 x i32> splat (i32 -1), <4 x i1> %m, i32 %evl)
836 define <4 x i32> @vsaddu_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
837 ; CHECK-LABEL: vsaddu_vi_v4i32_unmasked:
839 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
840 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
842 %v = call <4 x i32> @llvm.vp.uadd.sat.v4i32(<4 x i32> %va, <4 x i32> splat (i32 -1), <4 x i1> splat (i1 true), i32 %evl)
846 declare <8 x i32> @llvm.vp.uadd.sat.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
848 define <8 x i32> @vsaddu_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
849 ; CHECK-LABEL: vsaddu_vv_v8i32:
851 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
852 ; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t
854 %v = call <8 x i32> @llvm.vp.uadd.sat.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
858 define <8 x i32> @vsaddu_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
859 ; CHECK-LABEL: vsaddu_vv_v8i32_unmasked:
861 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
862 ; CHECK-NEXT: vsaddu.vv v8, v8, v10
864 %v = call <8 x i32> @llvm.vp.uadd.sat.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> splat (i1 true), i32 %evl)
868 define <8 x i32> @vsaddu_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
869 ; CHECK-LABEL: vsaddu_vx_v8i32:
871 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
872 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
874 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
875 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
876 %v = call <8 x i32> @llvm.vp.uadd.sat.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
880 define <8 x i32> @vsaddu_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
881 ; CHECK-LABEL: vsaddu_vx_v8i32_unmasked:
883 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
884 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
886 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
887 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
888 %v = call <8 x i32> @llvm.vp.uadd.sat.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> splat (i1 true), i32 %evl)
892 define <8 x i32> @vsaddu_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
893 ; CHECK-LABEL: vsaddu_vi_v8i32:
895 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
896 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
898 %v = call <8 x i32> @llvm.vp.uadd.sat.v8i32(<8 x i32> %va, <8 x i32> splat (i32 -1), <8 x i1> %m, i32 %evl)
902 define <8 x i32> @vsaddu_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
903 ; CHECK-LABEL: vsaddu_vi_v8i32_unmasked:
905 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
906 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
908 %v = call <8 x i32> @llvm.vp.uadd.sat.v8i32(<8 x i32> %va, <8 x i32> splat (i32 -1), <8 x i1> splat (i1 true), i32 %evl)
912 declare <16 x i32> @llvm.vp.uadd.sat.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
914 define <16 x i32> @vsaddu_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
915 ; CHECK-LABEL: vsaddu_vv_v16i32:
917 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
918 ; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t
920 %v = call <16 x i32> @llvm.vp.uadd.sat.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
924 define <16 x i32> @vsaddu_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
925 ; CHECK-LABEL: vsaddu_vv_v16i32_unmasked:
927 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
928 ; CHECK-NEXT: vsaddu.vv v8, v8, v12
930 %v = call <16 x i32> @llvm.vp.uadd.sat.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> splat (i1 true), i32 %evl)
934 define <16 x i32> @vsaddu_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
935 ; CHECK-LABEL: vsaddu_vx_v16i32:
937 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
938 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
940 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
941 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
942 %v = call <16 x i32> @llvm.vp.uadd.sat.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
946 define <16 x i32> @vsaddu_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
947 ; CHECK-LABEL: vsaddu_vx_v16i32_unmasked:
949 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
950 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
952 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
953 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
954 %v = call <16 x i32> @llvm.vp.uadd.sat.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> splat (i1 true), i32 %evl)
958 define <16 x i32> @vsaddu_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
959 ; CHECK-LABEL: vsaddu_vi_v16i32:
961 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
962 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
964 %v = call <16 x i32> @llvm.vp.uadd.sat.v16i32(<16 x i32> %va, <16 x i32> splat (i32 -1), <16 x i1> %m, i32 %evl)
968 define <16 x i32> @vsaddu_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
969 ; CHECK-LABEL: vsaddu_vi_v16i32_unmasked:
971 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
972 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
974 %v = call <16 x i32> @llvm.vp.uadd.sat.v16i32(<16 x i32> %va, <16 x i32> splat (i32 -1), <16 x i1> splat (i1 true), i32 %evl)
978 declare <2 x i64> @llvm.vp.uadd.sat.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
980 define <2 x i64> @vsaddu_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
981 ; CHECK-LABEL: vsaddu_vv_v2i64:
983 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
984 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
986 %v = call <2 x i64> @llvm.vp.uadd.sat.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
990 define <2 x i64> @vsaddu_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
991 ; CHECK-LABEL: vsaddu_vv_v2i64_unmasked:
993 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
994 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
996 %v = call <2 x i64> @llvm.vp.uadd.sat.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> splat (i1 true), i32 %evl)
1000 define <2 x i64> @vsaddu_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
1001 ; RV32-LABEL: vsaddu_vx_v2i64:
1003 ; RV32-NEXT: addi sp, sp, -16
1004 ; RV32-NEXT: .cfi_def_cfa_offset 16
1005 ; RV32-NEXT: sw a0, 8(sp)
1006 ; RV32-NEXT: sw a1, 12(sp)
1007 ; RV32-NEXT: addi a0, sp, 8
1008 ; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
1009 ; RV32-NEXT: vlse64.v v9, (a0), zero
1010 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1011 ; RV32-NEXT: vsaddu.vv v8, v8, v9, v0.t
1012 ; RV32-NEXT: addi sp, sp, 16
1013 ; RV32-NEXT: .cfi_def_cfa_offset 0
1016 ; RV64-LABEL: vsaddu_vx_v2i64:
1018 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1019 ; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t
1021 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1022 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1023 %v = call <2 x i64> @llvm.vp.uadd.sat.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1027 define <2 x i64> @vsaddu_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
1028 ; RV32-LABEL: vsaddu_vx_v2i64_unmasked:
1030 ; RV32-NEXT: addi sp, sp, -16
1031 ; RV32-NEXT: .cfi_def_cfa_offset 16
1032 ; RV32-NEXT: sw a0, 8(sp)
1033 ; RV32-NEXT: sw a1, 12(sp)
1034 ; RV32-NEXT: addi a0, sp, 8
1035 ; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
1036 ; RV32-NEXT: vlse64.v v9, (a0), zero
1037 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1038 ; RV32-NEXT: vsaddu.vv v8, v8, v9
1039 ; RV32-NEXT: addi sp, sp, 16
1040 ; RV32-NEXT: .cfi_def_cfa_offset 0
1043 ; RV64-LABEL: vsaddu_vx_v2i64_unmasked:
1045 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1046 ; RV64-NEXT: vsaddu.vx v8, v8, a0
1048 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1049 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1050 %v = call <2 x i64> @llvm.vp.uadd.sat.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> splat (i1 true), i32 %evl)
1054 define <2 x i64> @vsaddu_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
1055 ; CHECK-LABEL: vsaddu_vi_v2i64:
1057 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1058 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1060 %v = call <2 x i64> @llvm.vp.uadd.sat.v2i64(<2 x i64> %va, <2 x i64> splat (i64 -1), <2 x i1> %m, i32 %evl)
1064 define <2 x i64> @vsaddu_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
1065 ; CHECK-LABEL: vsaddu_vi_v2i64_unmasked:
1067 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1068 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1070 %v = call <2 x i64> @llvm.vp.uadd.sat.v2i64(<2 x i64> %va, <2 x i64> splat (i64 -1), <2 x i1> splat (i1 true), i32 %evl)
1074 declare <4 x i64> @llvm.vp.uadd.sat.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
1076 define <4 x i64> @vsaddu_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
1077 ; CHECK-LABEL: vsaddu_vv_v4i64:
1079 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1080 ; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t
1082 %v = call <4 x i64> @llvm.vp.uadd.sat.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
1086 define <4 x i64> @vsaddu_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
1087 ; CHECK-LABEL: vsaddu_vv_v4i64_unmasked:
1089 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1090 ; CHECK-NEXT: vsaddu.vv v8, v8, v10
1092 %v = call <4 x i64> @llvm.vp.uadd.sat.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> splat (i1 true), i32 %evl)
1096 define <4 x i64> @vsaddu_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
1097 ; RV32-LABEL: vsaddu_vx_v4i64:
1099 ; RV32-NEXT: addi sp, sp, -16
1100 ; RV32-NEXT: .cfi_def_cfa_offset 16
1101 ; RV32-NEXT: sw a0, 8(sp)
1102 ; RV32-NEXT: sw a1, 12(sp)
1103 ; RV32-NEXT: addi a0, sp, 8
1104 ; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
1105 ; RV32-NEXT: vlse64.v v10, (a0), zero
1106 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1107 ; RV32-NEXT: vsaddu.vv v8, v8, v10, v0.t
1108 ; RV32-NEXT: addi sp, sp, 16
1109 ; RV32-NEXT: .cfi_def_cfa_offset 0
1112 ; RV64-LABEL: vsaddu_vx_v4i64:
1114 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1115 ; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t
1117 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1118 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1119 %v = call <4 x i64> @llvm.vp.uadd.sat.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1123 define <4 x i64> @vsaddu_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
1124 ; RV32-LABEL: vsaddu_vx_v4i64_unmasked:
1126 ; RV32-NEXT: addi sp, sp, -16
1127 ; RV32-NEXT: .cfi_def_cfa_offset 16
1128 ; RV32-NEXT: sw a0, 8(sp)
1129 ; RV32-NEXT: sw a1, 12(sp)
1130 ; RV32-NEXT: addi a0, sp, 8
1131 ; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
1132 ; RV32-NEXT: vlse64.v v10, (a0), zero
1133 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1134 ; RV32-NEXT: vsaddu.vv v8, v8, v10
1135 ; RV32-NEXT: addi sp, sp, 16
1136 ; RV32-NEXT: .cfi_def_cfa_offset 0
1139 ; RV64-LABEL: vsaddu_vx_v4i64_unmasked:
1141 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1142 ; RV64-NEXT: vsaddu.vx v8, v8, a0
1144 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1145 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1146 %v = call <4 x i64> @llvm.vp.uadd.sat.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> splat (i1 true), i32 %evl)
1150 define <4 x i64> @vsaddu_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
1151 ; CHECK-LABEL: vsaddu_vi_v4i64:
1153 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1154 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1156 %v = call <4 x i64> @llvm.vp.uadd.sat.v4i64(<4 x i64> %va, <4 x i64> splat (i64 -1), <4 x i1> %m, i32 %evl)
1160 define <4 x i64> @vsaddu_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1161 ; CHECK-LABEL: vsaddu_vi_v4i64_unmasked:
1163 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1164 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1166 %v = call <4 x i64> @llvm.vp.uadd.sat.v4i64(<4 x i64> %va, <4 x i64> splat (i64 -1), <4 x i1> splat (i1 true), i32 %evl)
1170 declare <8 x i64> @llvm.vp.uadd.sat.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
1172 define <8 x i64> @vsaddu_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
1173 ; CHECK-LABEL: vsaddu_vv_v8i64:
1175 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1176 ; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t
1178 %v = call <8 x i64> @llvm.vp.uadd.sat.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1182 define <8 x i64> @vsaddu_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
1183 ; CHECK-LABEL: vsaddu_vv_v8i64_unmasked:
1185 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1186 ; CHECK-NEXT: vsaddu.vv v8, v8, v12
1188 %v = call <8 x i64> @llvm.vp.uadd.sat.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> splat (i1 true), i32 %evl)
1192 define <8 x i64> @vsaddu_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
1193 ; RV32-LABEL: vsaddu_vx_v8i64:
1195 ; RV32-NEXT: addi sp, sp, -16
1196 ; RV32-NEXT: .cfi_def_cfa_offset 16
1197 ; RV32-NEXT: sw a0, 8(sp)
1198 ; RV32-NEXT: sw a1, 12(sp)
1199 ; RV32-NEXT: addi a0, sp, 8
1200 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
1201 ; RV32-NEXT: vlse64.v v12, (a0), zero
1202 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1203 ; RV32-NEXT: vsaddu.vv v8, v8, v12, v0.t
1204 ; RV32-NEXT: addi sp, sp, 16
1205 ; RV32-NEXT: .cfi_def_cfa_offset 0
1208 ; RV64-LABEL: vsaddu_vx_v8i64:
1210 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1211 ; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t
1213 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1214 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1215 %v = call <8 x i64> @llvm.vp.uadd.sat.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1219 define <8 x i64> @vsaddu_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
1220 ; RV32-LABEL: vsaddu_vx_v8i64_unmasked:
1222 ; RV32-NEXT: addi sp, sp, -16
1223 ; RV32-NEXT: .cfi_def_cfa_offset 16
1224 ; RV32-NEXT: sw a0, 8(sp)
1225 ; RV32-NEXT: sw a1, 12(sp)
1226 ; RV32-NEXT: addi a0, sp, 8
1227 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
1228 ; RV32-NEXT: vlse64.v v12, (a0), zero
1229 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1230 ; RV32-NEXT: vsaddu.vv v8, v8, v12
1231 ; RV32-NEXT: addi sp, sp, 16
1232 ; RV32-NEXT: .cfi_def_cfa_offset 0
1235 ; RV64-LABEL: vsaddu_vx_v8i64_unmasked:
1237 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1238 ; RV64-NEXT: vsaddu.vx v8, v8, a0
1240 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1241 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1242 %v = call <8 x i64> @llvm.vp.uadd.sat.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> splat (i1 true), i32 %evl)
1246 define <8 x i64> @vsaddu_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1247 ; CHECK-LABEL: vsaddu_vi_v8i64:
1249 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1250 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1252 %v = call <8 x i64> @llvm.vp.uadd.sat.v8i64(<8 x i64> %va, <8 x i64> splat (i64 -1), <8 x i1> %m, i32 %evl)
1256 define <8 x i64> @vsaddu_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1257 ; CHECK-LABEL: vsaddu_vi_v8i64_unmasked:
1259 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1260 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1262 %v = call <8 x i64> @llvm.vp.uadd.sat.v8i64(<8 x i64> %va, <8 x i64> splat (i64 -1), <8 x i1> splat (i1 true), i32 %evl)
1266 declare <16 x i64> @llvm.vp.uadd.sat.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
1268 define <16 x i64> @vsaddu_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
1269 ; CHECK-LABEL: vsaddu_vv_v16i64:
1271 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1272 ; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t
1274 %v = call <16 x i64> @llvm.vp.uadd.sat.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1278 define <16 x i64> @vsaddu_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
1279 ; CHECK-LABEL: vsaddu_vv_v16i64_unmasked:
1281 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1282 ; CHECK-NEXT: vsaddu.vv v8, v8, v16
1284 %v = call <16 x i64> @llvm.vp.uadd.sat.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> splat (i1 true), i32 %evl)
1288 define <16 x i64> @vsaddu_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
1289 ; RV32-LABEL: vsaddu_vx_v16i64:
1291 ; RV32-NEXT: addi sp, sp, -16
1292 ; RV32-NEXT: .cfi_def_cfa_offset 16
1293 ; RV32-NEXT: sw a0, 8(sp)
1294 ; RV32-NEXT: sw a1, 12(sp)
1295 ; RV32-NEXT: addi a0, sp, 8
1296 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1297 ; RV32-NEXT: vlse64.v v16, (a0), zero
1298 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1299 ; RV32-NEXT: vsaddu.vv v8, v8, v16, v0.t
1300 ; RV32-NEXT: addi sp, sp, 16
1301 ; RV32-NEXT: .cfi_def_cfa_offset 0
1304 ; RV64-LABEL: vsaddu_vx_v16i64:
1306 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1307 ; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t
1309 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1310 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1311 %v = call <16 x i64> @llvm.vp.uadd.sat.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1315 define <16 x i64> @vsaddu_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
1316 ; RV32-LABEL: vsaddu_vx_v16i64_unmasked:
1318 ; RV32-NEXT: addi sp, sp, -16
1319 ; RV32-NEXT: .cfi_def_cfa_offset 16
1320 ; RV32-NEXT: sw a0, 8(sp)
1321 ; RV32-NEXT: sw a1, 12(sp)
1322 ; RV32-NEXT: addi a0, sp, 8
1323 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1324 ; RV32-NEXT: vlse64.v v16, (a0), zero
1325 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1326 ; RV32-NEXT: vsaddu.vv v8, v8, v16
1327 ; RV32-NEXT: addi sp, sp, 16
1328 ; RV32-NEXT: .cfi_def_cfa_offset 0
1331 ; RV64-LABEL: vsaddu_vx_v16i64_unmasked:
1333 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1334 ; RV64-NEXT: vsaddu.vx v8, v8, a0
1336 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1337 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1338 %v = call <16 x i64> @llvm.vp.uadd.sat.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> splat (i1 true), i32 %evl)
1342 define <16 x i64> @vsaddu_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1343 ; CHECK-LABEL: vsaddu_vi_v16i64:
1345 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1346 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1348 %v = call <16 x i64> @llvm.vp.uadd.sat.v16i64(<16 x i64> %va, <16 x i64> splat (i64 -1), <16 x i1> %m, i32 %evl)
1352 define <16 x i64> @vsaddu_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1353 ; CHECK-LABEL: vsaddu_vi_v16i64_unmasked:
1355 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1356 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1358 %v = call <16 x i64> @llvm.vp.uadd.sat.v16i64(<16 x i64> %va, <16 x i64> splat (i64 -1), <16 x i1> splat (i1 true), i32 %evl)
1362 ; Test that split-legalization works as expected.
1364 declare <32 x i64> @llvm.vp.uadd.sat.v32i64(<32 x i64>, <32 x i64>, <32 x i1>, i32)
1366 define <32 x i64> @vsaddu_vx_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) {
1367 ; CHECK-LABEL: vsaddu_vx_v32i64:
1369 ; CHECK-NEXT: li a2, 16
1370 ; CHECK-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
1371 ; CHECK-NEXT: vslidedown.vi v24, v0, 2
1372 ; CHECK-NEXT: mv a1, a0
1373 ; CHECK-NEXT: bltu a0, a2, .LBB108_2
1374 ; CHECK-NEXT: # %bb.1:
1375 ; CHECK-NEXT: li a1, 16
1376 ; CHECK-NEXT: .LBB108_2:
1377 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1378 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1379 ; CHECK-NEXT: addi a1, a0, -16
1380 ; CHECK-NEXT: sltu a0, a0, a1
1381 ; CHECK-NEXT: addi a0, a0, -1
1382 ; CHECK-NEXT: and a0, a0, a1
1383 ; CHECK-NEXT: vmv1r.v v0, v24
1384 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1385 ; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t
1387 %v = call <32 x i64> @llvm.vp.uadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> %m, i32 %evl)
1391 define <32 x i64> @vsaddu_vi_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
1392 ; CHECK-LABEL: vsaddu_vi_v32i64_unmasked:
1394 ; CHECK-NEXT: li a2, 16
1395 ; CHECK-NEXT: mv a1, a0
1396 ; CHECK-NEXT: bltu a0, a2, .LBB109_2
1397 ; CHECK-NEXT: # %bb.1:
1398 ; CHECK-NEXT: li a1, 16
1399 ; CHECK-NEXT: .LBB109_2:
1400 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1401 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1402 ; CHECK-NEXT: addi a1, a0, -16
1403 ; CHECK-NEXT: sltu a0, a0, a1
1404 ; CHECK-NEXT: addi a0, a0, -1
1405 ; CHECK-NEXT: and a0, a0, a1
1406 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1407 ; CHECK-NEXT: vsaddu.vi v16, v16, -1
1409 %v = call <32 x i64> @llvm.vp.uadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> splat (i1 true), i32 %evl)
1413 define <32 x i64> @vsaddu_vx_v32i64_evl12(<32 x i64> %va, <32 x i1> %m) {
1414 ; CHECK-LABEL: vsaddu_vx_v32i64_evl12:
1416 ; CHECK-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
1417 ; CHECK-NEXT: vslidedown.vi v24, v0, 2
1418 ; CHECK-NEXT: vsetivli zero, 12, e64, m8, ta, ma
1419 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1420 ; CHECK-NEXT: vmv1r.v v0, v24
1421 ; CHECK-NEXT: vsetivli zero, 0, e64, m8, ta, ma
1422 ; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t
1424 %v = call <32 x i64> @llvm.vp.uadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> %m, i32 12)
1428 define <32 x i64> @vsaddu_vx_v32i64_evl27(<32 x i64> %va, <32 x i1> %m) {
1429 ; CHECK-LABEL: vsaddu_vx_v32i64_evl27:
1431 ; CHECK-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
1432 ; CHECK-NEXT: vslidedown.vi v24, v0, 2
1433 ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1434 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1435 ; CHECK-NEXT: vmv1r.v v0, v24
1436 ; CHECK-NEXT: vsetivli zero, 11, e64, m8, ta, ma
1437 ; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t
1439 %v = call <32 x i64> @llvm.vp.uadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> %m, i32 27)