[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vsaddu-vp.ll
blobf61b112fd80243fd414155d576b54c3ab71c2d45
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:
11 ; CHECK:       # %bb.0:
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
19 ; CHECK-NEXT:    ret
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)
21   ret <8 x i7> %v
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:
28 ; CHECK:       # %bb.0:
29 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
30 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
31 ; CHECK-NEXT:    ret
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)
33   ret <2 x i8> %v
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:
38 ; CHECK:       # %bb.0:
39 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
40 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
41 ; CHECK-NEXT:    ret
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)
43   ret <2 x i8> %v
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:
48 ; CHECK:       # %bb.0:
49 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
50 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
51 ; CHECK-NEXT:    ret
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)
55   ret <2 x i8> %v
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:
60 ; CHECK:       # %bb.0:
61 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
62 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
63 ; CHECK-NEXT:    ret
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)
67   ret <2 x i8> %v
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:
72 ; CHECK:       # %bb.0:
73 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
74 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
75 ; CHECK-NEXT:    ret
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)
77   ret <2 x i8> %v
80 define <2 x i8> @vsaddu_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
81 ; CHECK-LABEL: vsaddu_vi_v2i8_unmasked:
82 ; CHECK:       # %bb.0:
83 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
84 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
85 ; CHECK-NEXT:    ret
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)
87   ret <2 x i8> %v
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:
94 ; CHECK:       # %bb.0:
95 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
96 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
97 ; CHECK-NEXT:    ret
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)
99   ret <4 x i8> %v
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:
104 ; CHECK:       # %bb.0:
105 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
106 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
107 ; CHECK-NEXT:    ret
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)
109   ret <4 x i8> %v
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:
114 ; CHECK:       # %bb.0:
115 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
116 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
117 ; CHECK-NEXT:    ret
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)
121   ret <4 x i8> %v
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:
126 ; CHECK:       # %bb.0:
127 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
128 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
129 ; CHECK-NEXT:    ret
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)
133   ret <4 x i8> %v
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:
138 ; CHECK:       # %bb.0:
139 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
140 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
141 ; CHECK-NEXT:    ret
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)
145   ret <4 x i8> %v
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:
150 ; CHECK:       # %bb.0:
151 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
152 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
153 ; CHECK-NEXT:    ret
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)
155   ret <4 x i8> %v
158 define <4 x i8> @vsaddu_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
159 ; CHECK-LABEL: vsaddu_vi_v4i8_unmasked:
160 ; CHECK:       # %bb.0:
161 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
162 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
163 ; CHECK-NEXT:    ret
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)
165   ret <4 x i8> %v
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:
172 ; CHECK:       # %bb.0:
173 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
174 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
175 ; CHECK-NEXT:    ret
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)
177   ret <5 x i8> %v
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:
182 ; CHECK:       # %bb.0:
183 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
184 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
185 ; CHECK-NEXT:    ret
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)
187   ret <5 x i8> %v
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:
192 ; CHECK:       # %bb.0:
193 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
194 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
195 ; CHECK-NEXT:    ret
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)
199   ret <5 x i8> %v
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:
204 ; CHECK:       # %bb.0:
205 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
206 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
207 ; CHECK-NEXT:    ret
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)
211   ret <5 x i8> %v
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:
216 ; CHECK:       # %bb.0:
217 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
218 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
219 ; CHECK-NEXT:    ret
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)
221   ret <5 x i8> %v
224 define <5 x i8> @vsaddu_vi_v5i8_unmasked(<5 x i8> %va, i32 zeroext %evl) {
225 ; CHECK-LABEL: vsaddu_vi_v5i8_unmasked:
226 ; CHECK:       # %bb.0:
227 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
228 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
229 ; CHECK-NEXT:    ret
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)
231   ret <5 x i8> %v
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:
238 ; CHECK:       # %bb.0:
239 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
240 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
241 ; CHECK-NEXT:    ret
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)
243   ret <8 x i8> %v
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:
248 ; CHECK:       # %bb.0:
249 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
250 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
251 ; CHECK-NEXT:    ret
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)
253   ret <8 x i8> %v
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:
258 ; CHECK:       # %bb.0:
259 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
260 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
261 ; CHECK-NEXT:    ret
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)
265   ret <8 x i8> %v
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:
270 ; CHECK:       # %bb.0:
271 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
272 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
273 ; CHECK-NEXT:    ret
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)
277   ret <8 x i8> %v
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:
282 ; CHECK:       # %bb.0:
283 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
284 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
285 ; CHECK-NEXT:    ret
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)
287   ret <8 x i8> %v
290 define <8 x i8> @vsaddu_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
291 ; CHECK-LABEL: vsaddu_vi_v8i8_unmasked:
292 ; CHECK:       # %bb.0:
293 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
294 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
295 ; CHECK-NEXT:    ret
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)
297   ret <8 x i8> %v
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:
304 ; CHECK:       # %bb.0:
305 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
306 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
307 ; CHECK-NEXT:    ret
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)
309   ret <16 x i8> %v
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:
314 ; CHECK:       # %bb.0:
315 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
316 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
317 ; CHECK-NEXT:    ret
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)
319   ret <16 x i8> %v
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:
324 ; CHECK:       # %bb.0:
325 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
326 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
327 ; CHECK-NEXT:    ret
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)
331   ret <16 x i8> %v
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:
336 ; CHECK:       # %bb.0:
337 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
338 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
339 ; CHECK-NEXT:    ret
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)
343   ret <16 x i8> %v
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:
348 ; CHECK:       # %bb.0:
349 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
350 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
351 ; CHECK-NEXT:    ret
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)
353   ret <16 x i8> %v
356 define <16 x i8> @vsaddu_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
357 ; CHECK-LABEL: vsaddu_vi_v16i8_unmasked:
358 ; CHECK:       # %bb.0:
359 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
360 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
361 ; CHECK-NEXT:    ret
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)
363   ret <16 x i8> %v
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:
370 ; CHECK:       # %bb.0:
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
389 ; CHECK-NEXT:    ret
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)
391   ret <256 x i8> %v
394 define <256 x i8> @vsaddu_vi_v258i8_unmasked(<256 x i8> %va, i32 zeroext %evl) {
395 ; CHECK-LABEL: vsaddu_vi_v258i8_unmasked:
396 ; CHECK:       # %bb.0:
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
411 ; CHECK-NEXT:    ret
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)
413   ret <256 x i8> %v
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:
420 ; CHECK:       # %bb.0:
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
428 ; CHECK-NEXT:    ret
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)
430   ret <256 x i8> %v
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:
437 ; CHECK:       # %bb.0:
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
445 ; CHECK-NEXT:    ret
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)
447   ret <256 x i8> %v
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:
454 ; CHECK:       # %bb.0:
455 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
456 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
457 ; CHECK-NEXT:    ret
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)
459   ret <2 x i16> %v
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:
464 ; CHECK:       # %bb.0:
465 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
466 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
467 ; CHECK-NEXT:    ret
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)
469   ret <2 x i16> %v
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:
474 ; CHECK:       # %bb.0:
475 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
476 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
477 ; CHECK-NEXT:    ret
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)
481   ret <2 x i16> %v
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:
486 ; CHECK:       # %bb.0:
487 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
488 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
489 ; CHECK-NEXT:    ret
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)
493   ret <2 x i16> %v
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:
498 ; CHECK:       # %bb.0:
499 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
500 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
501 ; CHECK-NEXT:    ret
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)
503   ret <2 x i16> %v
506 define <2 x i16> @vsaddu_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
507 ; CHECK-LABEL: vsaddu_vi_v2i16_unmasked:
508 ; CHECK:       # %bb.0:
509 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
510 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
511 ; CHECK-NEXT:    ret
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)
513   ret <2 x i16> %v
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:
520 ; CHECK:       # %bb.0:
521 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
522 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
523 ; CHECK-NEXT:    ret
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)
525   ret <4 x i16> %v
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:
530 ; CHECK:       # %bb.0:
531 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
532 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
533 ; CHECK-NEXT:    ret
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)
535   ret <4 x i16> %v
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:
540 ; CHECK:       # %bb.0:
541 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
542 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
543 ; CHECK-NEXT:    ret
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)
547   ret <4 x i16> %v
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:
552 ; CHECK:       # %bb.0:
553 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
554 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
555 ; CHECK-NEXT:    ret
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)
559   ret <4 x i16> %v
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:
564 ; CHECK:       # %bb.0:
565 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
566 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
567 ; CHECK-NEXT:    ret
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)
569   ret <4 x i16> %v
572 define <4 x i16> @vsaddu_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
573 ; CHECK-LABEL: vsaddu_vi_v4i16_unmasked:
574 ; CHECK:       # %bb.0:
575 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
576 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
577 ; CHECK-NEXT:    ret
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)
579   ret <4 x i16> %v
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:
586 ; CHECK:       # %bb.0:
587 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
588 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
589 ; CHECK-NEXT:    ret
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)
591   ret <8 x i16> %v
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:
596 ; CHECK:       # %bb.0:
597 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
598 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
599 ; CHECK-NEXT:    ret
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)
601   ret <8 x i16> %v
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:
606 ; CHECK:       # %bb.0:
607 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
608 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
609 ; CHECK-NEXT:    ret
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)
613   ret <8 x i16> %v
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:
618 ; CHECK:       # %bb.0:
619 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
620 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
621 ; CHECK-NEXT:    ret
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)
625   ret <8 x i16> %v
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:
630 ; CHECK:       # %bb.0:
631 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
632 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
633 ; CHECK-NEXT:    ret
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)
635   ret <8 x i16> %v
638 define <8 x i16> @vsaddu_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
639 ; CHECK-LABEL: vsaddu_vi_v8i16_unmasked:
640 ; CHECK:       # %bb.0:
641 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
642 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
643 ; CHECK-NEXT:    ret
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)
645   ret <8 x i16> %v
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:
652 ; CHECK:       # %bb.0:
653 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
654 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10, v0.t
655 ; CHECK-NEXT:    ret
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)
657   ret <16 x i16> %v
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:
662 ; CHECK:       # %bb.0:
663 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
664 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
665 ; CHECK-NEXT:    ret
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)
667   ret <16 x i16> %v
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:
672 ; CHECK:       # %bb.0:
673 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
674 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
675 ; CHECK-NEXT:    ret
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)
679   ret <16 x i16> %v
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:
684 ; CHECK:       # %bb.0:
685 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
686 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
687 ; CHECK-NEXT:    ret
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)
691   ret <16 x i16> %v
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:
696 ; CHECK:       # %bb.0:
697 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
698 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
699 ; CHECK-NEXT:    ret
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)
701   ret <16 x i16> %v
704 define <16 x i16> @vsaddu_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
705 ; CHECK-LABEL: vsaddu_vi_v16i16_unmasked:
706 ; CHECK:       # %bb.0:
707 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
708 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
709 ; CHECK-NEXT:    ret
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)
711   ret <16 x i16> %v
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:
718 ; CHECK:       # %bb.0:
719 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
720 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
721 ; CHECK-NEXT:    ret
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)
723   ret <2 x i32> %v
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:
728 ; CHECK:       # %bb.0:
729 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
730 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
731 ; CHECK-NEXT:    ret
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)
733   ret <2 x i32> %v
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:
738 ; CHECK:       # %bb.0:
739 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
740 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
741 ; CHECK-NEXT:    ret
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)
745   ret <2 x i32> %v
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:
750 ; CHECK:       # %bb.0:
751 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
752 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
753 ; CHECK-NEXT:    ret
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)
757   ret <2 x i32> %v
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:
762 ; CHECK:       # %bb.0:
763 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
764 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
765 ; CHECK-NEXT:    ret
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)
767   ret <2 x i32> %v
770 define <2 x i32> @vsaddu_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
771 ; CHECK-LABEL: vsaddu_vi_v2i32_unmasked:
772 ; CHECK:       # %bb.0:
773 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
774 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
775 ; CHECK-NEXT:    ret
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)
777   ret <2 x i32> %v
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:
784 ; CHECK:       # %bb.0:
785 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
786 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
787 ; CHECK-NEXT:    ret
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)
789   ret <4 x i32> %v
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:
794 ; CHECK:       # %bb.0:
795 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
796 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
797 ; CHECK-NEXT:    ret
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)
799   ret <4 x i32> %v
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:
804 ; CHECK:       # %bb.0:
805 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
806 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
807 ; CHECK-NEXT:    ret
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)
811   ret <4 x i32> %v
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:
816 ; CHECK:       # %bb.0:
817 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
818 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
819 ; CHECK-NEXT:    ret
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)
823   ret <4 x i32> %v
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:
828 ; CHECK:       # %bb.0:
829 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
830 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
831 ; CHECK-NEXT:    ret
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)
833   ret <4 x i32> %v
836 define <4 x i32> @vsaddu_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
837 ; CHECK-LABEL: vsaddu_vi_v4i32_unmasked:
838 ; CHECK:       # %bb.0:
839 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
840 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
841 ; CHECK-NEXT:    ret
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)
843   ret <4 x i32> %v
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:
850 ; CHECK:       # %bb.0:
851 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
852 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10, v0.t
853 ; CHECK-NEXT:    ret
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)
855   ret <8 x i32> %v
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:
860 ; CHECK:       # %bb.0:
861 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
862 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
863 ; CHECK-NEXT:    ret
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)
865   ret <8 x i32> %v
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:
870 ; CHECK:       # %bb.0:
871 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
872 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
873 ; CHECK-NEXT:    ret
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)
877   ret <8 x i32> %v
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:
882 ; CHECK:       # %bb.0:
883 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
884 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
885 ; CHECK-NEXT:    ret
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)
889   ret <8 x i32> %v
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:
894 ; CHECK:       # %bb.0:
895 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
896 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
897 ; CHECK-NEXT:    ret
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)
899   ret <8 x i32> %v
902 define <8 x i32> @vsaddu_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
903 ; CHECK-LABEL: vsaddu_vi_v8i32_unmasked:
904 ; CHECK:       # %bb.0:
905 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
906 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
907 ; CHECK-NEXT:    ret
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)
909   ret <8 x i32> %v
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:
916 ; CHECK:       # %bb.0:
917 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
918 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12, v0.t
919 ; CHECK-NEXT:    ret
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)
921   ret <16 x i32> %v
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:
926 ; CHECK:       # %bb.0:
927 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
928 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12
929 ; CHECK-NEXT:    ret
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)
931   ret <16 x i32> %v
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:
936 ; CHECK:       # %bb.0:
937 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
938 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
939 ; CHECK-NEXT:    ret
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)
943   ret <16 x i32> %v
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:
948 ; CHECK:       # %bb.0:
949 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
950 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
951 ; CHECK-NEXT:    ret
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)
955   ret <16 x i32> %v
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:
960 ; CHECK:       # %bb.0:
961 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
962 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
963 ; CHECK-NEXT:    ret
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)
965   ret <16 x i32> %v
968 define <16 x i32> @vsaddu_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
969 ; CHECK-LABEL: vsaddu_vi_v16i32_unmasked:
970 ; CHECK:       # %bb.0:
971 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
972 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
973 ; CHECK-NEXT:    ret
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)
975   ret <16 x i32> %v
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:
982 ; CHECK:       # %bb.0:
983 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
984 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
985 ; CHECK-NEXT:    ret
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)
987   ret <2 x i64> %v
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:
992 ; CHECK:       # %bb.0:
993 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
994 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
995 ; CHECK-NEXT:    ret
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)
997   ret <2 x i64> %v
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:
1002 ; RV32:       # %bb.0:
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
1014 ; RV32-NEXT:    ret
1016 ; RV64-LABEL: vsaddu_vx_v2i64:
1017 ; RV64:       # %bb.0:
1018 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1019 ; RV64-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1020 ; RV64-NEXT:    ret
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)
1024   ret <2 x i64> %v
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:
1029 ; RV32:       # %bb.0:
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
1041 ; RV32-NEXT:    ret
1043 ; RV64-LABEL: vsaddu_vx_v2i64_unmasked:
1044 ; RV64:       # %bb.0:
1045 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1046 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
1047 ; RV64-NEXT:    ret
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)
1051   ret <2 x i64> %v
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:
1056 ; CHECK:       # %bb.0:
1057 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1058 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1059 ; CHECK-NEXT:    ret
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)
1061   ret <2 x i64> %v
1064 define <2 x i64> @vsaddu_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
1065 ; CHECK-LABEL: vsaddu_vi_v2i64_unmasked:
1066 ; CHECK:       # %bb.0:
1067 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1068 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1069 ; CHECK-NEXT:    ret
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)
1071   ret <2 x i64> %v
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:
1078 ; CHECK:       # %bb.0:
1079 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1080 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10, v0.t
1081 ; CHECK-NEXT:    ret
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)
1083   ret <4 x i64> %v
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:
1088 ; CHECK:       # %bb.0:
1089 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1090 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
1091 ; CHECK-NEXT:    ret
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)
1093   ret <4 x i64> %v
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:
1098 ; RV32:       # %bb.0:
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
1110 ; RV32-NEXT:    ret
1112 ; RV64-LABEL: vsaddu_vx_v4i64:
1113 ; RV64:       # %bb.0:
1114 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1115 ; RV64-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1116 ; RV64-NEXT:    ret
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)
1120   ret <4 x i64> %v
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:
1125 ; RV32:       # %bb.0:
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
1137 ; RV32-NEXT:    ret
1139 ; RV64-LABEL: vsaddu_vx_v4i64_unmasked:
1140 ; RV64:       # %bb.0:
1141 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1142 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
1143 ; RV64-NEXT:    ret
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)
1147   ret <4 x i64> %v
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:
1152 ; CHECK:       # %bb.0:
1153 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1154 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1155 ; CHECK-NEXT:    ret
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)
1157   ret <4 x i64> %v
1160 define <4 x i64> @vsaddu_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1161 ; CHECK-LABEL: vsaddu_vi_v4i64_unmasked:
1162 ; CHECK:       # %bb.0:
1163 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1164 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1165 ; CHECK-NEXT:    ret
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)
1167   ret <4 x i64> %v
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:
1174 ; CHECK:       # %bb.0:
1175 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1176 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12, v0.t
1177 ; CHECK-NEXT:    ret
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)
1179   ret <8 x i64> %v
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:
1184 ; CHECK:       # %bb.0:
1185 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1186 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12
1187 ; CHECK-NEXT:    ret
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)
1189   ret <8 x i64> %v
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:
1194 ; RV32:       # %bb.0:
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
1206 ; RV32-NEXT:    ret
1208 ; RV64-LABEL: vsaddu_vx_v8i64:
1209 ; RV64:       # %bb.0:
1210 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1211 ; RV64-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1212 ; RV64-NEXT:    ret
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)
1216   ret <8 x i64> %v
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:
1221 ; RV32:       # %bb.0:
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
1233 ; RV32-NEXT:    ret
1235 ; RV64-LABEL: vsaddu_vx_v8i64_unmasked:
1236 ; RV64:       # %bb.0:
1237 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1238 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
1239 ; RV64-NEXT:    ret
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)
1243   ret <8 x i64> %v
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:
1248 ; CHECK:       # %bb.0:
1249 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1250 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1251 ; CHECK-NEXT:    ret
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)
1253   ret <8 x i64> %v
1256 define <8 x i64> @vsaddu_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1257 ; CHECK-LABEL: vsaddu_vi_v8i64_unmasked:
1258 ; CHECK:       # %bb.0:
1259 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1260 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1261 ; CHECK-NEXT:    ret
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)
1263   ret <8 x i64> %v
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:
1270 ; CHECK:       # %bb.0:
1271 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1272 ; CHECK-NEXT:    vsaddu.vv v8, v8, v16, v0.t
1273 ; CHECK-NEXT:    ret
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)
1275   ret <16 x i64> %v
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:
1280 ; CHECK:       # %bb.0:
1281 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1282 ; CHECK-NEXT:    vsaddu.vv v8, v8, v16
1283 ; CHECK-NEXT:    ret
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)
1285   ret <16 x i64> %v
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:
1290 ; RV32:       # %bb.0:
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
1302 ; RV32-NEXT:    ret
1304 ; RV64-LABEL: vsaddu_vx_v16i64:
1305 ; RV64:       # %bb.0:
1306 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1307 ; RV64-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1308 ; RV64-NEXT:    ret
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)
1312   ret <16 x i64> %v
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:
1317 ; RV32:       # %bb.0:
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
1329 ; RV32-NEXT:    ret
1331 ; RV64-LABEL: vsaddu_vx_v16i64_unmasked:
1332 ; RV64:       # %bb.0:
1333 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1334 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
1335 ; RV64-NEXT:    ret
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)
1339   ret <16 x i64> %v
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:
1344 ; CHECK:       # %bb.0:
1345 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1346 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1347 ; CHECK-NEXT:    ret
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)
1349   ret <16 x i64> %v
1352 define <16 x i64> @vsaddu_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1353 ; CHECK-LABEL: vsaddu_vi_v16i64_unmasked:
1354 ; CHECK:       # %bb.0:
1355 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1356 ; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1357 ; CHECK-NEXT:    ret
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)
1359   ret <16 x i64> %v
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:
1368 ; CHECK:       # %bb.0:
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
1386 ; CHECK-NEXT:    ret
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)
1388   ret <32 x i64> %v
1391 define <32 x i64> @vsaddu_vi_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
1392 ; CHECK-LABEL: vsaddu_vi_v32i64_unmasked:
1393 ; CHECK:       # %bb.0:
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
1408 ; CHECK-NEXT:    ret
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)
1410   ret <32 x i64> %v
1413 define <32 x i64> @vsaddu_vx_v32i64_evl12(<32 x i64> %va, <32 x i1> %m) {
1414 ; CHECK-LABEL: vsaddu_vx_v32i64_evl12:
1415 ; CHECK:       # %bb.0:
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
1423 ; CHECK-NEXT:    ret
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)
1425   ret <32 x i64> %v
1428 define <32 x i64> @vsaddu_vx_v32i64_evl27(<32 x i64> %va, <32 x i1> %m) {
1429 ; CHECK-LABEL: vsaddu_vx_v32i64_evl27:
1430 ; CHECK:       # %bb.0:
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
1438 ; CHECK-NEXT:    ret
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)
1440   ret <32 x i64> %v