xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vsaddu-vp.ll (revision 36e4176f1d83d04cdebb4e1870561099b2478d80)
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
6
7declare <vscale x 8 x i7> @llvm.vp.uadd.sat.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
8
9define <vscale x 8 x i7> @vsaddu_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
10; CHECK-LABEL: vsaddu_vx_nxv8i7:
11; CHECK:       # %bb.0:
12; CHECK-NEXT:    li a2, 127
13; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
14; CHECK-NEXT:    vmv.v.x v9, a0
15; CHECK-NEXT:    vand.vx v8, v8, a2
16; CHECK-NEXT:    vand.vx v9, v9, a2
17; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t
18; CHECK-NEXT:    vminu.vx v8, v8, a2, v0.t
19; CHECK-NEXT:    ret
20  %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
21  %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
22  %v = call <vscale x 8 x i7> @llvm.vp.uadd.sat.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
23  ret <vscale x 8 x i7> %v
24}
25
26declare <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
27
28define <vscale x 1 x i8> @vsaddu_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
29; CHECK-LABEL: vsaddu_vv_nxv1i8:
30; CHECK:       # %bb.0:
31; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
32; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
33; CHECK-NEXT:    ret
34  %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
35  ret <vscale x 1 x i8> %v
36}
37
38define <vscale x 1 x i8> @vsaddu_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
39; CHECK-LABEL: vsaddu_vv_nxv1i8_unmasked:
40; CHECK:       # %bb.0:
41; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
42; CHECK-NEXT:    vsaddu.vv v8, v8, v9
43; CHECK-NEXT:    ret
44  %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
45  ret <vscale x 1 x i8> %v
46}
47
48define <vscale x 1 x i8> @vsaddu_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
49; CHECK-LABEL: vsaddu_vx_nxv1i8:
50; CHECK:       # %bb.0:
51; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
52; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
53; CHECK-NEXT:    ret
54  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
55  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
56  %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
57  ret <vscale x 1 x i8> %v
58}
59
60define <vscale x 1 x i8> @vsaddu_vx_nxv1i8_commute(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
61; CHECK-LABEL: vsaddu_vx_nxv1i8_commute:
62; CHECK:       # %bb.0:
63; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
64; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
65; CHECK-NEXT:    ret
66  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
67  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
68  %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 %evl)
69  ret <vscale x 1 x i8> %v
70}
71
72define <vscale x 1 x i8> @vsaddu_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
73; CHECK-LABEL: vsaddu_vx_nxv1i8_unmasked:
74; CHECK:       # %bb.0:
75; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
76; CHECK-NEXT:    vsaddu.vx v8, v8, a0
77; CHECK-NEXT:    ret
78  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
79  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
80  %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
81  ret <vscale x 1 x i8> %v
82}
83
84define <vscale x 1 x i8> @vsaddu_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
85; CHECK-LABEL: vsaddu_vi_nxv1i8:
86; CHECK:       # %bb.0:
87; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
88; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
89; CHECK-NEXT:    ret
90  %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> %m, i32 %evl)
91  ret <vscale x 1 x i8> %v
92}
93
94define <vscale x 1 x i8> @vsaddu_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
95; CHECK-LABEL: vsaddu_vi_nxv1i8_unmasked:
96; CHECK:       # %bb.0:
97; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
98; CHECK-NEXT:    vsaddu.vi v8, v8, -1
99; CHECK-NEXT:    ret
100  %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)
101  ret <vscale x 1 x i8> %v
102}
103
104declare <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
105
106define <vscale x 2 x i8> @vsaddu_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
107; CHECK-LABEL: vsaddu_vv_nxv2i8:
108; CHECK:       # %bb.0:
109; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
110; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
111; CHECK-NEXT:    ret
112  %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
113  ret <vscale x 2 x i8> %v
114}
115
116define <vscale x 2 x i8> @vsaddu_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
117; CHECK-LABEL: vsaddu_vv_nxv2i8_unmasked:
118; CHECK:       # %bb.0:
119; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
120; CHECK-NEXT:    vsaddu.vv v8, v8, v9
121; CHECK-NEXT:    ret
122  %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
123  ret <vscale x 2 x i8> %v
124}
125
126define <vscale x 2 x i8> @vsaddu_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
127; CHECK-LABEL: vsaddu_vx_nxv2i8:
128; CHECK:       # %bb.0:
129; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
130; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
131; CHECK-NEXT:    ret
132  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
133  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
134  %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
135  ret <vscale x 2 x i8> %v
136}
137
138define <vscale x 2 x i8> @vsaddu_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
139; CHECK-LABEL: vsaddu_vx_nxv2i8_unmasked:
140; CHECK:       # %bb.0:
141; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
142; CHECK-NEXT:    vsaddu.vx v8, v8, a0
143; CHECK-NEXT:    ret
144  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
145  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
146  %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
147  ret <vscale x 2 x i8> %v
148}
149
150define <vscale x 2 x i8> @vsaddu_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
151; CHECK-LABEL: vsaddu_vi_nxv2i8:
152; CHECK:       # %bb.0:
153; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
154; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
155; CHECK-NEXT:    ret
156  %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> %m, i32 %evl)
157  ret <vscale x 2 x i8> %v
158}
159
160define <vscale x 2 x i8> @vsaddu_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
161; CHECK-LABEL: vsaddu_vi_nxv2i8_unmasked:
162; CHECK:       # %bb.0:
163; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
164; CHECK-NEXT:    vsaddu.vi v8, v8, -1
165; CHECK-NEXT:    ret
166  %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)
167  ret <vscale x 2 x i8> %v
168}
169
170declare <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8>, <vscale x 3 x i8>, <vscale x 3 x i1>, i32)
171
172define <vscale x 3 x i8> @vsaddu_vv_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {
173; CHECK-LABEL: vsaddu_vv_nxv3i8:
174; CHECK:       # %bb.0:
175; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
176; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
177; CHECK-NEXT:    ret
178  %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 %evl)
179  ret <vscale x 3 x i8> %v
180}
181
182define <vscale x 3 x i8> @vsaddu_vv_nxv3i8_unmasked(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, i32 zeroext %evl) {
183; CHECK-LABEL: vsaddu_vv_nxv3i8_unmasked:
184; CHECK:       # %bb.0:
185; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
186; CHECK-NEXT:    vsaddu.vv v8, v8, v9
187; CHECK-NEXT:    ret
188  %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> splat (i1 true), i32 %evl)
189  ret <vscale x 3 x i8> %v
190}
191
192define <vscale x 3 x i8> @vsaddu_vx_nxv3i8(<vscale x 3 x i8> %va, i8 %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {
193; CHECK-LABEL: vsaddu_vx_nxv3i8:
194; CHECK:       # %bb.0:
195; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
196; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
197; CHECK-NEXT:    ret
198  %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0
199  %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer
200  %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 %evl)
201  ret <vscale x 3 x i8> %v
202}
203
204define <vscale x 3 x i8> @vsaddu_vx_nxv3i8_unmasked(<vscale x 3 x i8> %va, i8 %b, i32 zeroext %evl) {
205; CHECK-LABEL: vsaddu_vx_nxv3i8_unmasked:
206; CHECK:       # %bb.0:
207; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
208; CHECK-NEXT:    vsaddu.vx v8, v8, a0
209; CHECK-NEXT:    ret
210  %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0
211  %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer
212  %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> splat (i1 true), i32 %evl)
213  ret <vscale x 3 x i8> %v
214}
215
216define <vscale x 3 x i8> @vsaddu_vi_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i1> %m, i32 zeroext %evl) {
217; CHECK-LABEL: vsaddu_vi_nxv3i8:
218; CHECK:       # %bb.0:
219; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
220; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
221; CHECK-NEXT:    ret
222  %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> %m, i32 %evl)
223  ret <vscale x 3 x i8> %v
224}
225
226define <vscale x 3 x i8> @vsaddu_vi_nxv3i8_unmasked(<vscale x 3 x i8> %va, i32 zeroext %evl) {
227; CHECK-LABEL: vsaddu_vi_nxv3i8_unmasked:
228; CHECK:       # %bb.0:
229; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
230; CHECK-NEXT:    vsaddu.vi v8, v8, -1
231; CHECK-NEXT:    ret
232  %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> splat (i1 true), i32 %evl)
233  ret <vscale x 3 x i8> %v
234}
235
236declare <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
237
238define <vscale x 4 x i8> @vsaddu_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
239; CHECK-LABEL: vsaddu_vv_nxv4i8:
240; CHECK:       # %bb.0:
241; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
242; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
243; CHECK-NEXT:    ret
244  %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
245  ret <vscale x 4 x i8> %v
246}
247
248define <vscale x 4 x i8> @vsaddu_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
249; CHECK-LABEL: vsaddu_vv_nxv4i8_unmasked:
250; CHECK:       # %bb.0:
251; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
252; CHECK-NEXT:    vsaddu.vv v8, v8, v9
253; CHECK-NEXT:    ret
254  %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
255  ret <vscale x 4 x i8> %v
256}
257
258define <vscale x 4 x i8> @vsaddu_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
259; CHECK-LABEL: vsaddu_vx_nxv4i8:
260; CHECK:       # %bb.0:
261; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
262; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
263; CHECK-NEXT:    ret
264  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
265  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
266  %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
267  ret <vscale x 4 x i8> %v
268}
269
270define <vscale x 4 x i8> @vsaddu_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
271; CHECK-LABEL: vsaddu_vx_nxv4i8_unmasked:
272; CHECK:       # %bb.0:
273; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
274; CHECK-NEXT:    vsaddu.vx v8, v8, a0
275; CHECK-NEXT:    ret
276  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
277  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
278  %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
279  ret <vscale x 4 x i8> %v
280}
281
282define <vscale x 4 x i8> @vsaddu_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
283; CHECK-LABEL: vsaddu_vi_nxv4i8:
284; CHECK:       # %bb.0:
285; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
286; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
287; CHECK-NEXT:    ret
288  %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> %m, i32 %evl)
289  ret <vscale x 4 x i8> %v
290}
291
292define <vscale x 4 x i8> @vsaddu_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
293; CHECK-LABEL: vsaddu_vi_nxv4i8_unmasked:
294; CHECK:       # %bb.0:
295; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
296; CHECK-NEXT:    vsaddu.vi v8, v8, -1
297; CHECK-NEXT:    ret
298  %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)
299  ret <vscale x 4 x i8> %v
300}
301
302declare <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
303
304define <vscale x 8 x i8> @vsaddu_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
305; CHECK-LABEL: vsaddu_vv_nxv8i8:
306; CHECK:       # %bb.0:
307; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
308; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
309; CHECK-NEXT:    ret
310  %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
311  ret <vscale x 8 x i8> %v
312}
313
314define <vscale x 8 x i8> @vsaddu_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
315; CHECK-LABEL: vsaddu_vv_nxv8i8_unmasked:
316; CHECK:       # %bb.0:
317; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
318; CHECK-NEXT:    vsaddu.vv v8, v8, v9
319; CHECK-NEXT:    ret
320  %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
321  ret <vscale x 8 x i8> %v
322}
323
324define <vscale x 8 x i8> @vsaddu_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
325; CHECK-LABEL: vsaddu_vx_nxv8i8:
326; CHECK:       # %bb.0:
327; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
328; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
329; CHECK-NEXT:    ret
330  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
331  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
332  %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
333  ret <vscale x 8 x i8> %v
334}
335
336define <vscale x 8 x i8> @vsaddu_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
337; CHECK-LABEL: vsaddu_vx_nxv8i8_unmasked:
338; CHECK:       # %bb.0:
339; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
340; CHECK-NEXT:    vsaddu.vx v8, v8, a0
341; CHECK-NEXT:    ret
342  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
343  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
344  %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
345  ret <vscale x 8 x i8> %v
346}
347
348define <vscale x 8 x i8> @vsaddu_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
349; CHECK-LABEL: vsaddu_vi_nxv8i8:
350; CHECK:       # %bb.0:
351; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
352; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
353; CHECK-NEXT:    ret
354  %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> %m, i32 %evl)
355  ret <vscale x 8 x i8> %v
356}
357
358define <vscale x 8 x i8> @vsaddu_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
359; CHECK-LABEL: vsaddu_vi_nxv8i8_unmasked:
360; CHECK:       # %bb.0:
361; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
362; CHECK-NEXT:    vsaddu.vi v8, v8, -1
363; CHECK-NEXT:    ret
364  %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)
365  ret <vscale x 8 x i8> %v
366}
367
368declare <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
369
370define <vscale x 16 x i8> @vsaddu_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
371; CHECK-LABEL: vsaddu_vv_nxv16i8:
372; CHECK:       # %bb.0:
373; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
374; CHECK-NEXT:    vsaddu.vv v8, v8, v10, v0.t
375; CHECK-NEXT:    ret
376  %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
377  ret <vscale x 16 x i8> %v
378}
379
380define <vscale x 16 x i8> @vsaddu_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
381; CHECK-LABEL: vsaddu_vv_nxv16i8_unmasked:
382; CHECK:       # %bb.0:
383; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
384; CHECK-NEXT:    vsaddu.vv v8, v8, v10
385; CHECK-NEXT:    ret
386  %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
387  ret <vscale x 16 x i8> %v
388}
389
390define <vscale x 16 x i8> @vsaddu_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
391; CHECK-LABEL: vsaddu_vx_nxv16i8:
392; CHECK:       # %bb.0:
393; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
394; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
395; CHECK-NEXT:    ret
396  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
397  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
398  %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
399  ret <vscale x 16 x i8> %v
400}
401
402define <vscale x 16 x i8> @vsaddu_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
403; CHECK-LABEL: vsaddu_vx_nxv16i8_unmasked:
404; CHECK:       # %bb.0:
405; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
406; CHECK-NEXT:    vsaddu.vx v8, v8, a0
407; CHECK-NEXT:    ret
408  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
409  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
410  %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
411  ret <vscale x 16 x i8> %v
412}
413
414define <vscale x 16 x i8> @vsaddu_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
415; CHECK-LABEL: vsaddu_vi_nxv16i8:
416; CHECK:       # %bb.0:
417; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
418; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
419; CHECK-NEXT:    ret
420  %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> %m, i32 %evl)
421  ret <vscale x 16 x i8> %v
422}
423
424define <vscale x 16 x i8> @vsaddu_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
425; CHECK-LABEL: vsaddu_vi_nxv16i8_unmasked:
426; CHECK:       # %bb.0:
427; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
428; CHECK-NEXT:    vsaddu.vi v8, v8, -1
429; CHECK-NEXT:    ret
430  %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)
431  ret <vscale x 16 x i8> %v
432}
433
434declare <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
435
436define <vscale x 32 x i8> @vsaddu_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
437; CHECK-LABEL: vsaddu_vv_nxv32i8:
438; CHECK:       # %bb.0:
439; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
440; CHECK-NEXT:    vsaddu.vv v8, v8, v12, v0.t
441; CHECK-NEXT:    ret
442  %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
443  ret <vscale x 32 x i8> %v
444}
445
446define <vscale x 32 x i8> @vsaddu_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
447; CHECK-LABEL: vsaddu_vv_nxv32i8_unmasked:
448; CHECK:       # %bb.0:
449; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
450; CHECK-NEXT:    vsaddu.vv v8, v8, v12
451; CHECK-NEXT:    ret
452  %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
453  ret <vscale x 32 x i8> %v
454}
455
456define <vscale x 32 x i8> @vsaddu_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
457; CHECK-LABEL: vsaddu_vx_nxv32i8:
458; CHECK:       # %bb.0:
459; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
460; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
461; CHECK-NEXT:    ret
462  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
463  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
464  %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
465  ret <vscale x 32 x i8> %v
466}
467
468define <vscale x 32 x i8> @vsaddu_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
469; CHECK-LABEL: vsaddu_vx_nxv32i8_unmasked:
470; CHECK:       # %bb.0:
471; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
472; CHECK-NEXT:    vsaddu.vx v8, v8, a0
473; CHECK-NEXT:    ret
474  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
475  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
476  %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
477  ret <vscale x 32 x i8> %v
478}
479
480define <vscale x 32 x i8> @vsaddu_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
481; CHECK-LABEL: vsaddu_vi_nxv32i8:
482; CHECK:       # %bb.0:
483; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
484; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
485; CHECK-NEXT:    ret
486  %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> %m, i32 %evl)
487  ret <vscale x 32 x i8> %v
488}
489
490define <vscale x 32 x i8> @vsaddu_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
491; CHECK-LABEL: vsaddu_vi_nxv32i8_unmasked:
492; CHECK:       # %bb.0:
493; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
494; CHECK-NEXT:    vsaddu.vi v8, v8, -1
495; CHECK-NEXT:    ret
496  %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)
497  ret <vscale x 32 x i8> %v
498}
499
500declare <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
501
502define <vscale x 64 x i8> @vsaddu_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
503; CHECK-LABEL: vsaddu_vv_nxv64i8:
504; CHECK:       # %bb.0:
505; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
506; CHECK-NEXT:    vsaddu.vv v8, v8, v16, v0.t
507; CHECK-NEXT:    ret
508  %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
509  ret <vscale x 64 x i8> %v
510}
511
512define <vscale x 64 x i8> @vsaddu_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
513; CHECK-LABEL: vsaddu_vv_nxv64i8_unmasked:
514; CHECK:       # %bb.0:
515; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
516; CHECK-NEXT:    vsaddu.vv v8, v8, v16
517; CHECK-NEXT:    ret
518  %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)
519  ret <vscale x 64 x i8> %v
520}
521
522define <vscale x 64 x i8> @vsaddu_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
523; CHECK-LABEL: vsaddu_vx_nxv64i8:
524; CHECK:       # %bb.0:
525; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
526; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
527; CHECK-NEXT:    ret
528  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
529  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
530  %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
531  ret <vscale x 64 x i8> %v
532}
533
534define <vscale x 64 x i8> @vsaddu_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
535; CHECK-LABEL: vsaddu_vx_nxv64i8_unmasked:
536; CHECK:       # %bb.0:
537; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
538; CHECK-NEXT:    vsaddu.vx v8, v8, a0
539; CHECK-NEXT:    ret
540  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
541  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
542  %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)
543  ret <vscale x 64 x i8> %v
544}
545
546define <vscale x 64 x i8> @vsaddu_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
547; CHECK-LABEL: vsaddu_vi_nxv64i8:
548; CHECK:       # %bb.0:
549; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
550; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
551; CHECK-NEXT:    ret
552  %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> %m, i32 %evl)
553  ret <vscale x 64 x i8> %v
554}
555
556define <vscale x 64 x i8> @vsaddu_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
557; CHECK-LABEL: vsaddu_vi_nxv64i8_unmasked:
558; CHECK:       # %bb.0:
559; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
560; CHECK-NEXT:    vsaddu.vi v8, v8, -1
561; CHECK-NEXT:    ret
562  %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> splat (i1 true), i32 %evl)
563  ret <vscale x 64 x i8> %v
564}
565
566; Test that split-legalization works when the mask itself needs splitting.
567
568declare <vscale x 128 x i8> @llvm.vp.uadd.sat.nxv128i8(<vscale x 128 x i8>, <vscale x 128 x i8>, <vscale x 128 x i1>, i32)
569
570define <vscale x 128 x i8> @vsaddu_vi_nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i1> %m, i32 zeroext %evl) {
571; CHECK-LABEL: vsaddu_vi_nxv128i8:
572; CHECK:       # %bb.0:
573; CHECK-NEXT:    vsetvli a2, zero, e8, m8, ta, ma
574; CHECK-NEXT:    vmv1r.v v24, v0
575; CHECK-NEXT:    vlm.v v0, (a0)
576; CHECK-NEXT:    csrr a0, vlenb
577; CHECK-NEXT:    slli a0, a0, 3
578; CHECK-NEXT:    sub a2, a1, a0
579; CHECK-NEXT:    sltu a3, a1, a2
580; CHECK-NEXT:    addi a3, a3, -1
581; CHECK-NEXT:    and a2, a3, a2
582; CHECK-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
583; CHECK-NEXT:    vsaddu.vi v16, v16, -1, v0.t
584; CHECK-NEXT:    bltu a1, a0, .LBB50_2
585; CHECK-NEXT:  # %bb.1:
586; CHECK-NEXT:    mv a1, a0
587; CHECK-NEXT:  .LBB50_2:
588; CHECK-NEXT:    vmv1r.v v0, v24
589; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
590; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
591; CHECK-NEXT:    ret
592  %v = call <vscale x 128 x i8> @llvm.vp.uadd.sat.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> %m, i32 %evl)
593  ret <vscale x 128 x i8> %v
594}
595
596define <vscale x 128 x i8> @vsaddu_vi_nxv128i8_unmasked(<vscale x 128 x i8> %va, i32 zeroext %evl) {
597; CHECK-LABEL: vsaddu_vi_nxv128i8_unmasked:
598; CHECK:       # %bb.0:
599; CHECK-NEXT:    csrr a1, vlenb
600; CHECK-NEXT:    slli a1, a1, 3
601; CHECK-NEXT:    sub a2, a0, a1
602; CHECK-NEXT:    sltu a3, a0, a2
603; CHECK-NEXT:    addi a3, a3, -1
604; CHECK-NEXT:    and a2, a3, a2
605; CHECK-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
606; CHECK-NEXT:    vsaddu.vi v16, v16, -1
607; CHECK-NEXT:    bltu a0, a1, .LBB51_2
608; CHECK-NEXT:  # %bb.1:
609; CHECK-NEXT:    mv a0, a1
610; CHECK-NEXT:  .LBB51_2:
611; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
612; CHECK-NEXT:    vsaddu.vi v8, v8, -1
613; CHECK-NEXT:    ret
614  %v = call <vscale x 128 x i8> @llvm.vp.uadd.sat.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> splat (i1 true), i32 %evl)
615  ret <vscale x 128 x i8> %v
616}
617
618declare <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
619
620define <vscale x 1 x i16> @vsaddu_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
621; CHECK-LABEL: vsaddu_vv_nxv1i16:
622; CHECK:       # %bb.0:
623; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
624; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
625; CHECK-NEXT:    ret
626  %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
627  ret <vscale x 1 x i16> %v
628}
629
630define <vscale x 1 x i16> @vsaddu_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
631; CHECK-LABEL: vsaddu_vv_nxv1i16_unmasked:
632; CHECK:       # %bb.0:
633; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
634; CHECK-NEXT:    vsaddu.vv v8, v8, v9
635; CHECK-NEXT:    ret
636  %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
637  ret <vscale x 1 x i16> %v
638}
639
640define <vscale x 1 x i16> @vsaddu_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
641; CHECK-LABEL: vsaddu_vx_nxv1i16:
642; CHECK:       # %bb.0:
643; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
644; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
645; CHECK-NEXT:    ret
646  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
647  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
648  %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
649  ret <vscale x 1 x i16> %v
650}
651
652define <vscale x 1 x i16> @vsaddu_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
653; CHECK-LABEL: vsaddu_vx_nxv1i16_unmasked:
654; CHECK:       # %bb.0:
655; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
656; CHECK-NEXT:    vsaddu.vx v8, v8, a0
657; CHECK-NEXT:    ret
658  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
659  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
660  %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
661  ret <vscale x 1 x i16> %v
662}
663
664define <vscale x 1 x i16> @vsaddu_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
665; CHECK-LABEL: vsaddu_vi_nxv1i16:
666; CHECK:       # %bb.0:
667; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
668; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
669; CHECK-NEXT:    ret
670  %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> %m, i32 %evl)
671  ret <vscale x 1 x i16> %v
672}
673
674define <vscale x 1 x i16> @vsaddu_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
675; CHECK-LABEL: vsaddu_vi_nxv1i16_unmasked:
676; CHECK:       # %bb.0:
677; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
678; CHECK-NEXT:    vsaddu.vi v8, v8, -1
679; CHECK-NEXT:    ret
680  %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)
681  ret <vscale x 1 x i16> %v
682}
683
684declare <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
685
686define <vscale x 2 x i16> @vsaddu_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
687; CHECK-LABEL: vsaddu_vv_nxv2i16:
688; CHECK:       # %bb.0:
689; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
690; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
691; CHECK-NEXT:    ret
692  %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
693  ret <vscale x 2 x i16> %v
694}
695
696define <vscale x 2 x i16> @vsaddu_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
697; CHECK-LABEL: vsaddu_vv_nxv2i16_unmasked:
698; CHECK:       # %bb.0:
699; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
700; CHECK-NEXT:    vsaddu.vv v8, v8, v9
701; CHECK-NEXT:    ret
702  %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
703  ret <vscale x 2 x i16> %v
704}
705
706define <vscale x 2 x i16> @vsaddu_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
707; CHECK-LABEL: vsaddu_vx_nxv2i16:
708; CHECK:       # %bb.0:
709; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
710; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
711; CHECK-NEXT:    ret
712  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
713  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
714  %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
715  ret <vscale x 2 x i16> %v
716}
717
718define <vscale x 2 x i16> @vsaddu_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
719; CHECK-LABEL: vsaddu_vx_nxv2i16_unmasked:
720; CHECK:       # %bb.0:
721; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
722; CHECK-NEXT:    vsaddu.vx v8, v8, a0
723; CHECK-NEXT:    ret
724  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
725  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
726  %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
727  ret <vscale x 2 x i16> %v
728}
729
730define <vscale x 2 x i16> @vsaddu_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
731; CHECK-LABEL: vsaddu_vi_nxv2i16:
732; CHECK:       # %bb.0:
733; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
734; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
735; CHECK-NEXT:    ret
736  %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> %m, i32 %evl)
737  ret <vscale x 2 x i16> %v
738}
739
740define <vscale x 2 x i16> @vsaddu_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
741; CHECK-LABEL: vsaddu_vi_nxv2i16_unmasked:
742; CHECK:       # %bb.0:
743; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
744; CHECK-NEXT:    vsaddu.vi v8, v8, -1
745; CHECK-NEXT:    ret
746  %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)
747  ret <vscale x 2 x i16> %v
748}
749
750declare <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
751
752define <vscale x 4 x i16> @vsaddu_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
753; CHECK-LABEL: vsaddu_vv_nxv4i16:
754; CHECK:       # %bb.0:
755; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
756; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
757; CHECK-NEXT:    ret
758  %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
759  ret <vscale x 4 x i16> %v
760}
761
762define <vscale x 4 x i16> @vsaddu_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
763; CHECK-LABEL: vsaddu_vv_nxv4i16_unmasked:
764; CHECK:       # %bb.0:
765; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
766; CHECK-NEXT:    vsaddu.vv v8, v8, v9
767; CHECK-NEXT:    ret
768  %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
769  ret <vscale x 4 x i16> %v
770}
771
772define <vscale x 4 x i16> @vsaddu_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
773; CHECK-LABEL: vsaddu_vx_nxv4i16:
774; CHECK:       # %bb.0:
775; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
776; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
777; CHECK-NEXT:    ret
778  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
779  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
780  %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
781  ret <vscale x 4 x i16> %v
782}
783
784define <vscale x 4 x i16> @vsaddu_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
785; CHECK-LABEL: vsaddu_vx_nxv4i16_unmasked:
786; CHECK:       # %bb.0:
787; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
788; CHECK-NEXT:    vsaddu.vx v8, v8, a0
789; CHECK-NEXT:    ret
790  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
791  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
792  %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
793  ret <vscale x 4 x i16> %v
794}
795
796define <vscale x 4 x i16> @vsaddu_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
797; CHECK-LABEL: vsaddu_vi_nxv4i16:
798; CHECK:       # %bb.0:
799; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
800; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
801; CHECK-NEXT:    ret
802  %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> %m, i32 %evl)
803  ret <vscale x 4 x i16> %v
804}
805
806define <vscale x 4 x i16> @vsaddu_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
807; CHECK-LABEL: vsaddu_vi_nxv4i16_unmasked:
808; CHECK:       # %bb.0:
809; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
810; CHECK-NEXT:    vsaddu.vi v8, v8, -1
811; CHECK-NEXT:    ret
812  %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)
813  ret <vscale x 4 x i16> %v
814}
815
816declare <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
817
818define <vscale x 8 x i16> @vsaddu_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
819; CHECK-LABEL: vsaddu_vv_nxv8i16:
820; CHECK:       # %bb.0:
821; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
822; CHECK-NEXT:    vsaddu.vv v8, v8, v10, v0.t
823; CHECK-NEXT:    ret
824  %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
825  ret <vscale x 8 x i16> %v
826}
827
828define <vscale x 8 x i16> @vsaddu_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
829; CHECK-LABEL: vsaddu_vv_nxv8i16_unmasked:
830; CHECK:       # %bb.0:
831; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
832; CHECK-NEXT:    vsaddu.vv v8, v8, v10
833; CHECK-NEXT:    ret
834  %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
835  ret <vscale x 8 x i16> %v
836}
837
838define <vscale x 8 x i16> @vsaddu_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
839; CHECK-LABEL: vsaddu_vx_nxv8i16:
840; CHECK:       # %bb.0:
841; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
842; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
843; CHECK-NEXT:    ret
844  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
845  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
846  %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
847  ret <vscale x 8 x i16> %v
848}
849
850define <vscale x 8 x i16> @vsaddu_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
851; CHECK-LABEL: vsaddu_vx_nxv8i16_unmasked:
852; CHECK:       # %bb.0:
853; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
854; CHECK-NEXT:    vsaddu.vx v8, v8, a0
855; CHECK-NEXT:    ret
856  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
857  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
858  %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
859  ret <vscale x 8 x i16> %v
860}
861
862define <vscale x 8 x i16> @vsaddu_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
863; CHECK-LABEL: vsaddu_vi_nxv8i16:
864; CHECK:       # %bb.0:
865; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
866; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
867; CHECK-NEXT:    ret
868  %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> %m, i32 %evl)
869  ret <vscale x 8 x i16> %v
870}
871
872define <vscale x 8 x i16> @vsaddu_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
873; CHECK-LABEL: vsaddu_vi_nxv8i16_unmasked:
874; CHECK:       # %bb.0:
875; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
876; CHECK-NEXT:    vsaddu.vi v8, v8, -1
877; CHECK-NEXT:    ret
878  %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)
879  ret <vscale x 8 x i16> %v
880}
881
882declare <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
883
884define <vscale x 16 x i16> @vsaddu_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
885; CHECK-LABEL: vsaddu_vv_nxv16i16:
886; CHECK:       # %bb.0:
887; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
888; CHECK-NEXT:    vsaddu.vv v8, v8, v12, v0.t
889; CHECK-NEXT:    ret
890  %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
891  ret <vscale x 16 x i16> %v
892}
893
894define <vscale x 16 x i16> @vsaddu_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
895; CHECK-LABEL: vsaddu_vv_nxv16i16_unmasked:
896; CHECK:       # %bb.0:
897; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
898; CHECK-NEXT:    vsaddu.vv v8, v8, v12
899; CHECK-NEXT:    ret
900  %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
901  ret <vscale x 16 x i16> %v
902}
903
904define <vscale x 16 x i16> @vsaddu_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
905; CHECK-LABEL: vsaddu_vx_nxv16i16:
906; CHECK:       # %bb.0:
907; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
908; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
909; CHECK-NEXT:    ret
910  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
911  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
912  %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
913  ret <vscale x 16 x i16> %v
914}
915
916define <vscale x 16 x i16> @vsaddu_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
917; CHECK-LABEL: vsaddu_vx_nxv16i16_unmasked:
918; CHECK:       # %bb.0:
919; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
920; CHECK-NEXT:    vsaddu.vx v8, v8, a0
921; CHECK-NEXT:    ret
922  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
923  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
924  %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
925  ret <vscale x 16 x i16> %v
926}
927
928define <vscale x 16 x i16> @vsaddu_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
929; CHECK-LABEL: vsaddu_vi_nxv16i16:
930; CHECK:       # %bb.0:
931; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
932; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
933; CHECK-NEXT:    ret
934  %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> %m, i32 %evl)
935  ret <vscale x 16 x i16> %v
936}
937
938define <vscale x 16 x i16> @vsaddu_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
939; CHECK-LABEL: vsaddu_vi_nxv16i16_unmasked:
940; CHECK:       # %bb.0:
941; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
942; CHECK-NEXT:    vsaddu.vi v8, v8, -1
943; CHECK-NEXT:    ret
944  %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)
945  ret <vscale x 16 x i16> %v
946}
947
948declare <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
949
950define <vscale x 32 x i16> @vsaddu_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
951; CHECK-LABEL: vsaddu_vv_nxv32i16:
952; CHECK:       # %bb.0:
953; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
954; CHECK-NEXT:    vsaddu.vv v8, v8, v16, v0.t
955; CHECK-NEXT:    ret
956  %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
957  ret <vscale x 32 x i16> %v
958}
959
960define <vscale x 32 x i16> @vsaddu_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
961; CHECK-LABEL: vsaddu_vv_nxv32i16_unmasked:
962; CHECK:       # %bb.0:
963; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
964; CHECK-NEXT:    vsaddu.vv v8, v8, v16
965; CHECK-NEXT:    ret
966  %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
967  ret <vscale x 32 x i16> %v
968}
969
970define <vscale x 32 x i16> @vsaddu_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
971; CHECK-LABEL: vsaddu_vx_nxv32i16:
972; CHECK:       # %bb.0:
973; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
974; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
975; CHECK-NEXT:    ret
976  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
977  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
978  %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
979  ret <vscale x 32 x i16> %v
980}
981
982define <vscale x 32 x i16> @vsaddu_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
983; CHECK-LABEL: vsaddu_vx_nxv32i16_unmasked:
984; CHECK:       # %bb.0:
985; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
986; CHECK-NEXT:    vsaddu.vx v8, v8, a0
987; CHECK-NEXT:    ret
988  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
989  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
990  %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
991  ret <vscale x 32 x i16> %v
992}
993
994define <vscale x 32 x i16> @vsaddu_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
995; CHECK-LABEL: vsaddu_vi_nxv32i16:
996; CHECK:       # %bb.0:
997; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
998; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
999; CHECK-NEXT:    ret
1000  %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> %m, i32 %evl)
1001  ret <vscale x 32 x i16> %v
1002}
1003
1004define <vscale x 32 x i16> @vsaddu_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
1005; CHECK-LABEL: vsaddu_vi_nxv32i16_unmasked:
1006; CHECK:       # %bb.0:
1007; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1008; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1009; CHECK-NEXT:    ret
1010  %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)
1011  ret <vscale x 32 x i16> %v
1012}
1013
1014declare <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
1015
1016define <vscale x 1 x i32> @vsaddu_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1017; CHECK-LABEL: vsaddu_vv_nxv1i32:
1018; CHECK:       # %bb.0:
1019; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1020; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
1021; CHECK-NEXT:    ret
1022  %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
1023  ret <vscale x 1 x i32> %v
1024}
1025
1026define <vscale x 1 x i32> @vsaddu_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
1027; CHECK-LABEL: vsaddu_vv_nxv1i32_unmasked:
1028; CHECK:       # %bb.0:
1029; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1030; CHECK-NEXT:    vsaddu.vv v8, v8, v9
1031; CHECK-NEXT:    ret
1032  %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1033  ret <vscale x 1 x i32> %v
1034}
1035
1036define <vscale x 1 x i32> @vsaddu_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1037; CHECK-LABEL: vsaddu_vx_nxv1i32:
1038; CHECK:       # %bb.0:
1039; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
1040; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1041; CHECK-NEXT:    ret
1042  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1043  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1044  %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
1045  ret <vscale x 1 x i32> %v
1046}
1047
1048define <vscale x 1 x i32> @vsaddu_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
1049; CHECK-LABEL: vsaddu_vx_nxv1i32_unmasked:
1050; CHECK:       # %bb.0:
1051; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
1052; CHECK-NEXT:    vsaddu.vx v8, v8, a0
1053; CHECK-NEXT:    ret
1054  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1055  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1056  %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1057  ret <vscale x 1 x i32> %v
1058}
1059
1060define <vscale x 1 x i32> @vsaddu_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1061; CHECK-LABEL: vsaddu_vi_nxv1i32:
1062; CHECK:       # %bb.0:
1063; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1064; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1065; CHECK-NEXT:    ret
1066  %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> %m, i32 %evl)
1067  ret <vscale x 1 x i32> %v
1068}
1069
1070define <vscale x 1 x i32> @vsaddu_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
1071; CHECK-LABEL: vsaddu_vi_nxv1i32_unmasked:
1072; CHECK:       # %bb.0:
1073; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1074; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1075; CHECK-NEXT:    ret
1076  %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1077  ret <vscale x 1 x i32> %v
1078}
1079
1080declare <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
1081
1082define <vscale x 2 x i32> @vsaddu_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1083; CHECK-LABEL: vsaddu_vv_nxv2i32:
1084; CHECK:       # %bb.0:
1085; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1086; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
1087; CHECK-NEXT:    ret
1088  %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
1089  ret <vscale x 2 x i32> %v
1090}
1091
1092define <vscale x 2 x i32> @vsaddu_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
1093; CHECK-LABEL: vsaddu_vv_nxv2i32_unmasked:
1094; CHECK:       # %bb.0:
1095; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1096; CHECK-NEXT:    vsaddu.vv v8, v8, v9
1097; CHECK-NEXT:    ret
1098  %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1099  ret <vscale x 2 x i32> %v
1100}
1101
1102define <vscale x 2 x i32> @vsaddu_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1103; CHECK-LABEL: vsaddu_vx_nxv2i32:
1104; CHECK:       # %bb.0:
1105; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
1106; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1107; CHECK-NEXT:    ret
1108  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1109  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1110  %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
1111  ret <vscale x 2 x i32> %v
1112}
1113
1114define <vscale x 2 x i32> @vsaddu_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
1115; CHECK-LABEL: vsaddu_vx_nxv2i32_unmasked:
1116; CHECK:       # %bb.0:
1117; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
1118; CHECK-NEXT:    vsaddu.vx v8, v8, a0
1119; CHECK-NEXT:    ret
1120  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1121  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1122  %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1123  ret <vscale x 2 x i32> %v
1124}
1125
1126define <vscale x 2 x i32> @vsaddu_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1127; CHECK-LABEL: vsaddu_vi_nxv2i32:
1128; CHECK:       # %bb.0:
1129; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1130; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1131; CHECK-NEXT:    ret
1132  %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> %m, i32 %evl)
1133  ret <vscale x 2 x i32> %v
1134}
1135
1136define <vscale x 2 x i32> @vsaddu_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1137; CHECK-LABEL: vsaddu_vi_nxv2i32_unmasked:
1138; CHECK:       # %bb.0:
1139; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1140; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1141; CHECK-NEXT:    ret
1142  %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1143  ret <vscale x 2 x i32> %v
1144}
1145
1146declare <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1147
1148define <vscale x 4 x i32> @vsaddu_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1149; CHECK-LABEL: vsaddu_vv_nxv4i32:
1150; CHECK:       # %bb.0:
1151; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1152; CHECK-NEXT:    vsaddu.vv v8, v8, v10, v0.t
1153; CHECK-NEXT:    ret
1154  %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
1155  ret <vscale x 4 x i32> %v
1156}
1157
1158define <vscale x 4 x i32> @vsaddu_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
1159; CHECK-LABEL: vsaddu_vv_nxv4i32_unmasked:
1160; CHECK:       # %bb.0:
1161; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1162; CHECK-NEXT:    vsaddu.vv v8, v8, v10
1163; CHECK-NEXT:    ret
1164  %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1165  ret <vscale x 4 x i32> %v
1166}
1167
1168define <vscale x 4 x i32> @vsaddu_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1169; CHECK-LABEL: vsaddu_vx_nxv4i32:
1170; CHECK:       # %bb.0:
1171; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1172; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1173; CHECK-NEXT:    ret
1174  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1175  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1176  %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
1177  ret <vscale x 4 x i32> %v
1178}
1179
1180define <vscale x 4 x i32> @vsaddu_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1181; CHECK-LABEL: vsaddu_vx_nxv4i32_unmasked:
1182; CHECK:       # %bb.0:
1183; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1184; CHECK-NEXT:    vsaddu.vx v8, v8, a0
1185; CHECK-NEXT:    ret
1186  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1187  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1188  %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1189  ret <vscale x 4 x i32> %v
1190}
1191
1192define <vscale x 4 x i32> @vsaddu_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1193; CHECK-LABEL: vsaddu_vi_nxv4i32:
1194; CHECK:       # %bb.0:
1195; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1196; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1197; CHECK-NEXT:    ret
1198  %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> %m, i32 %evl)
1199  ret <vscale x 4 x i32> %v
1200}
1201
1202define <vscale x 4 x i32> @vsaddu_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1203; CHECK-LABEL: vsaddu_vi_nxv4i32_unmasked:
1204; CHECK:       # %bb.0:
1205; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1206; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1207; CHECK-NEXT:    ret
1208  %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1209  ret <vscale x 4 x i32> %v
1210}
1211
1212declare <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1213
1214define <vscale x 8 x i32> @vsaddu_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1215; CHECK-LABEL: vsaddu_vv_nxv8i32:
1216; CHECK:       # %bb.0:
1217; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1218; CHECK-NEXT:    vsaddu.vv v8, v8, v12, v0.t
1219; CHECK-NEXT:    ret
1220  %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
1221  ret <vscale x 8 x i32> %v
1222}
1223
1224define <vscale x 8 x i32> @vsaddu_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
1225; CHECK-LABEL: vsaddu_vv_nxv8i32_unmasked:
1226; CHECK:       # %bb.0:
1227; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1228; CHECK-NEXT:    vsaddu.vv v8, v8, v12
1229; CHECK-NEXT:    ret
1230  %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1231  ret <vscale x 8 x i32> %v
1232}
1233
1234define <vscale x 8 x i32> @vsaddu_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1235; CHECK-LABEL: vsaddu_vx_nxv8i32:
1236; CHECK:       # %bb.0:
1237; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1238; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1239; CHECK-NEXT:    ret
1240  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1241  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1242  %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
1243  ret <vscale x 8 x i32> %v
1244}
1245
1246define <vscale x 8 x i32> @vsaddu_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1247; CHECK-LABEL: vsaddu_vx_nxv8i32_unmasked:
1248; CHECK:       # %bb.0:
1249; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1250; CHECK-NEXT:    vsaddu.vx v8, v8, a0
1251; CHECK-NEXT:    ret
1252  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1253  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1254  %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1255  ret <vscale x 8 x i32> %v
1256}
1257
1258define <vscale x 8 x i32> @vsaddu_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1259; CHECK-LABEL: vsaddu_vi_nxv8i32:
1260; CHECK:       # %bb.0:
1261; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1262; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1263; CHECK-NEXT:    ret
1264  %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> %m, i32 %evl)
1265  ret <vscale x 8 x i32> %v
1266}
1267
1268define <vscale x 8 x i32> @vsaddu_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1269; CHECK-LABEL: vsaddu_vi_nxv8i32_unmasked:
1270; CHECK:       # %bb.0:
1271; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1272; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1273; CHECK-NEXT:    ret
1274  %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1275  ret <vscale x 8 x i32> %v
1276}
1277
1278declare <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1279
1280define <vscale x 16 x i32> @vsaddu_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1281; CHECK-LABEL: vsaddu_vv_nxv16i32:
1282; CHECK:       # %bb.0:
1283; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1284; CHECK-NEXT:    vsaddu.vv v8, v8, v16, v0.t
1285; CHECK-NEXT:    ret
1286  %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
1287  ret <vscale x 16 x i32> %v
1288}
1289
1290define <vscale x 16 x i32> @vsaddu_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
1291; CHECK-LABEL: vsaddu_vv_nxv16i32_unmasked:
1292; CHECK:       # %bb.0:
1293; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1294; CHECK-NEXT:    vsaddu.vv v8, v8, v16
1295; CHECK-NEXT:    ret
1296  %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1297  ret <vscale x 16 x i32> %v
1298}
1299
1300define <vscale x 16 x i32> @vsaddu_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1301; CHECK-LABEL: vsaddu_vx_nxv16i32:
1302; CHECK:       # %bb.0:
1303; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1304; CHECK-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1305; CHECK-NEXT:    ret
1306  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1307  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1308  %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
1309  ret <vscale x 16 x i32> %v
1310}
1311
1312define <vscale x 16 x i32> @vsaddu_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1313; CHECK-LABEL: vsaddu_vx_nxv16i32_unmasked:
1314; CHECK:       # %bb.0:
1315; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1316; CHECK-NEXT:    vsaddu.vx v8, v8, a0
1317; CHECK-NEXT:    ret
1318  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1319  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1320  %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1321  ret <vscale x 16 x i32> %v
1322}
1323
1324define <vscale x 16 x i32> @vsaddu_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1325; CHECK-LABEL: vsaddu_vi_nxv16i32:
1326; CHECK:       # %bb.0:
1327; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1328; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1329; CHECK-NEXT:    ret
1330  %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> %m, i32 %evl)
1331  ret <vscale x 16 x i32> %v
1332}
1333
1334define <vscale x 16 x i32> @vsaddu_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1335; CHECK-LABEL: vsaddu_vi_nxv16i32_unmasked:
1336; CHECK:       # %bb.0:
1337; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1338; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1339; CHECK-NEXT:    ret
1340  %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)
1341  ret <vscale x 16 x i32> %v
1342}
1343
1344; Test that split-legalization works then the mask needs manual splitting.
1345
1346declare <vscale x 32 x i32> @llvm.vp.uadd.sat.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i32>, <vscale x 32 x i1>, i32)
1347
1348define <vscale x 32 x i32> @vsaddu_vi_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
1349; CHECK-LABEL: vsaddu_vi_nxv32i32:
1350; CHECK:       # %bb.0:
1351; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
1352; CHECK-NEXT:    vmv1r.v v24, v0
1353; CHECK-NEXT:    csrr a1, vlenb
1354; CHECK-NEXT:    srli a2, a1, 2
1355; CHECK-NEXT:    slli a1, a1, 1
1356; CHECK-NEXT:    vslidedown.vx v0, v0, a2
1357; CHECK-NEXT:    sub a2, a0, a1
1358; CHECK-NEXT:    sltu a3, a0, a2
1359; CHECK-NEXT:    addi a3, a3, -1
1360; CHECK-NEXT:    and a2, a3, a2
1361; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
1362; CHECK-NEXT:    vsaddu.vi v16, v16, -1, v0.t
1363; CHECK-NEXT:    bltu a0, a1, .LBB118_2
1364; CHECK-NEXT:  # %bb.1:
1365; CHECK-NEXT:    mv a0, a1
1366; CHECK-NEXT:  .LBB118_2:
1367; CHECK-NEXT:    vmv1r.v v0, v24
1368; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1369; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1370; CHECK-NEXT:    ret
1371  %v = call <vscale x 32 x i32> @llvm.vp.uadd.sat.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> %m, i32 %evl)
1372  ret <vscale x 32 x i32> %v
1373}
1374
1375define <vscale x 32 x i32> @vsaddu_vi_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {
1376; CHECK-LABEL: vsaddu_vi_nxv32i32_unmasked:
1377; CHECK:       # %bb.0:
1378; CHECK-NEXT:    csrr a1, vlenb
1379; CHECK-NEXT:    slli a1, a1, 1
1380; CHECK-NEXT:    sub a2, a0, a1
1381; CHECK-NEXT:    sltu a3, a0, a2
1382; CHECK-NEXT:    addi a3, a3, -1
1383; CHECK-NEXT:    and a2, a3, a2
1384; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
1385; CHECK-NEXT:    vsaddu.vi v16, v16, -1
1386; CHECK-NEXT:    bltu a0, a1, .LBB119_2
1387; CHECK-NEXT:  # %bb.1:
1388; CHECK-NEXT:    mv a0, a1
1389; CHECK-NEXT:  .LBB119_2:
1390; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1391; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1392; CHECK-NEXT:    ret
1393  %v = call <vscale x 32 x i32> @llvm.vp.uadd.sat.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)
1394  ret <vscale x 32 x i32> %v
1395}
1396
1397declare <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1398
1399define <vscale x 1 x i64> @vsaddu_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1400; CHECK-LABEL: vsaddu_vv_nxv1i64:
1401; CHECK:       # %bb.0:
1402; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1403; CHECK-NEXT:    vsaddu.vv v8, v8, v9, v0.t
1404; CHECK-NEXT:    ret
1405  %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
1406  ret <vscale x 1 x i64> %v
1407}
1408
1409define <vscale x 1 x i64> @vsaddu_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
1410; CHECK-LABEL: vsaddu_vv_nxv1i64_unmasked:
1411; CHECK:       # %bb.0:
1412; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1413; CHECK-NEXT:    vsaddu.vv v8, v8, v9
1414; CHECK-NEXT:    ret
1415  %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1416  ret <vscale x 1 x i64> %v
1417}
1418
1419define <vscale x 1 x i64> @vsaddu_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1420; RV32-LABEL: vsaddu_vx_nxv1i64:
1421; RV32:       # %bb.0:
1422; RV32-NEXT:    addi sp, sp, -16
1423; RV32-NEXT:    .cfi_def_cfa_offset 16
1424; RV32-NEXT:    sw a0, 8(sp)
1425; RV32-NEXT:    sw a1, 12(sp)
1426; RV32-NEXT:    addi a0, sp, 8
1427; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1428; RV32-NEXT:    vlse64.v v9, (a0), zero
1429; RV32-NEXT:    vsaddu.vv v8, v8, v9, v0.t
1430; RV32-NEXT:    addi sp, sp, 16
1431; RV32-NEXT:    .cfi_def_cfa_offset 0
1432; RV32-NEXT:    ret
1433;
1434; RV64-LABEL: vsaddu_vx_nxv1i64:
1435; RV64:       # %bb.0:
1436; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1437; RV64-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1438; RV64-NEXT:    ret
1439  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1440  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1441  %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1442  ret <vscale x 1 x i64> %v
1443}
1444
1445define <vscale x 1 x i64> @vsaddu_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1446; RV32-LABEL: vsaddu_vx_nxv1i64_unmasked:
1447; RV32:       # %bb.0:
1448; RV32-NEXT:    addi sp, sp, -16
1449; RV32-NEXT:    .cfi_def_cfa_offset 16
1450; RV32-NEXT:    sw a0, 8(sp)
1451; RV32-NEXT:    sw a1, 12(sp)
1452; RV32-NEXT:    addi a0, sp, 8
1453; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1454; RV32-NEXT:    vlse64.v v9, (a0), zero
1455; RV32-NEXT:    vsaddu.vv v8, v8, v9
1456; RV32-NEXT:    addi sp, sp, 16
1457; RV32-NEXT:    .cfi_def_cfa_offset 0
1458; RV32-NEXT:    ret
1459;
1460; RV64-LABEL: vsaddu_vx_nxv1i64_unmasked:
1461; RV64:       # %bb.0:
1462; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1463; RV64-NEXT:    vsaddu.vx v8, v8, a0
1464; RV64-NEXT:    ret
1465  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1466  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1467  %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1468  ret <vscale x 1 x i64> %v
1469}
1470
1471define <vscale x 1 x i64> @vsaddu_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1472; CHECK-LABEL: vsaddu_vi_nxv1i64:
1473; CHECK:       # %bb.0:
1474; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1475; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1476; CHECK-NEXT:    ret
1477  %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> %m, i32 %evl)
1478  ret <vscale x 1 x i64> %v
1479}
1480
1481define <vscale x 1 x i64> @vsaddu_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1482; CHECK-LABEL: vsaddu_vi_nxv1i64_unmasked:
1483; CHECK:       # %bb.0:
1484; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1485; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1486; CHECK-NEXT:    ret
1487  %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1488  ret <vscale x 1 x i64> %v
1489}
1490
1491declare <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1492
1493define <vscale x 2 x i64> @vsaddu_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1494; CHECK-LABEL: vsaddu_vv_nxv2i64:
1495; CHECK:       # %bb.0:
1496; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1497; CHECK-NEXT:    vsaddu.vv v8, v8, v10, v0.t
1498; CHECK-NEXT:    ret
1499  %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1500  ret <vscale x 2 x i64> %v
1501}
1502
1503define <vscale x 2 x i64> @vsaddu_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1504; CHECK-LABEL: vsaddu_vv_nxv2i64_unmasked:
1505; CHECK:       # %bb.0:
1506; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1507; CHECK-NEXT:    vsaddu.vv v8, v8, v10
1508; CHECK-NEXT:    ret
1509  %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1510  ret <vscale x 2 x i64> %v
1511}
1512
1513define <vscale x 2 x i64> @vsaddu_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1514; RV32-LABEL: vsaddu_vx_nxv2i64:
1515; RV32:       # %bb.0:
1516; RV32-NEXT:    addi sp, sp, -16
1517; RV32-NEXT:    .cfi_def_cfa_offset 16
1518; RV32-NEXT:    sw a0, 8(sp)
1519; RV32-NEXT:    sw a1, 12(sp)
1520; RV32-NEXT:    addi a0, sp, 8
1521; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1522; RV32-NEXT:    vlse64.v v10, (a0), zero
1523; RV32-NEXT:    vsaddu.vv v8, v8, v10, v0.t
1524; RV32-NEXT:    addi sp, sp, 16
1525; RV32-NEXT:    .cfi_def_cfa_offset 0
1526; RV32-NEXT:    ret
1527;
1528; RV64-LABEL: vsaddu_vx_nxv2i64:
1529; RV64:       # %bb.0:
1530; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1531; RV64-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1532; RV64-NEXT:    ret
1533  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1534  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1535  %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1536  ret <vscale x 2 x i64> %v
1537}
1538
1539define <vscale x 2 x i64> @vsaddu_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1540; RV32-LABEL: vsaddu_vx_nxv2i64_unmasked:
1541; RV32:       # %bb.0:
1542; RV32-NEXT:    addi sp, sp, -16
1543; RV32-NEXT:    .cfi_def_cfa_offset 16
1544; RV32-NEXT:    sw a0, 8(sp)
1545; RV32-NEXT:    sw a1, 12(sp)
1546; RV32-NEXT:    addi a0, sp, 8
1547; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1548; RV32-NEXT:    vlse64.v v10, (a0), zero
1549; RV32-NEXT:    vsaddu.vv v8, v8, v10
1550; RV32-NEXT:    addi sp, sp, 16
1551; RV32-NEXT:    .cfi_def_cfa_offset 0
1552; RV32-NEXT:    ret
1553;
1554; RV64-LABEL: vsaddu_vx_nxv2i64_unmasked:
1555; RV64:       # %bb.0:
1556; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1557; RV64-NEXT:    vsaddu.vx v8, v8, a0
1558; RV64-NEXT:    ret
1559  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1560  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1561  %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1562  ret <vscale x 2 x i64> %v
1563}
1564
1565define <vscale x 2 x i64> @vsaddu_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1566; CHECK-LABEL: vsaddu_vi_nxv2i64:
1567; CHECK:       # %bb.0:
1568; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1569; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1570; CHECK-NEXT:    ret
1571  %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> %m, i32 %evl)
1572  ret <vscale x 2 x i64> %v
1573}
1574
1575define <vscale x 2 x i64> @vsaddu_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1576; CHECK-LABEL: vsaddu_vi_nxv2i64_unmasked:
1577; CHECK:       # %bb.0:
1578; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1579; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1580; CHECK-NEXT:    ret
1581  %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1582  ret <vscale x 2 x i64> %v
1583}
1584
1585declare <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1586
1587define <vscale x 4 x i64> @vsaddu_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1588; CHECK-LABEL: vsaddu_vv_nxv4i64:
1589; CHECK:       # %bb.0:
1590; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1591; CHECK-NEXT:    vsaddu.vv v8, v8, v12, v0.t
1592; CHECK-NEXT:    ret
1593  %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1594  ret <vscale x 4 x i64> %v
1595}
1596
1597define <vscale x 4 x i64> @vsaddu_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1598; CHECK-LABEL: vsaddu_vv_nxv4i64_unmasked:
1599; CHECK:       # %bb.0:
1600; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1601; CHECK-NEXT:    vsaddu.vv v8, v8, v12
1602; CHECK-NEXT:    ret
1603  %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1604  ret <vscale x 4 x i64> %v
1605}
1606
1607define <vscale x 4 x i64> @vsaddu_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1608; RV32-LABEL: vsaddu_vx_nxv4i64:
1609; RV32:       # %bb.0:
1610; RV32-NEXT:    addi sp, sp, -16
1611; RV32-NEXT:    .cfi_def_cfa_offset 16
1612; RV32-NEXT:    sw a0, 8(sp)
1613; RV32-NEXT:    sw a1, 12(sp)
1614; RV32-NEXT:    addi a0, sp, 8
1615; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1616; RV32-NEXT:    vlse64.v v12, (a0), zero
1617; RV32-NEXT:    vsaddu.vv v8, v8, v12, v0.t
1618; RV32-NEXT:    addi sp, sp, 16
1619; RV32-NEXT:    .cfi_def_cfa_offset 0
1620; RV32-NEXT:    ret
1621;
1622; RV64-LABEL: vsaddu_vx_nxv4i64:
1623; RV64:       # %bb.0:
1624; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1625; RV64-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1626; RV64-NEXT:    ret
1627  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1628  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1629  %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1630  ret <vscale x 4 x i64> %v
1631}
1632
1633define <vscale x 4 x i64> @vsaddu_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1634; RV32-LABEL: vsaddu_vx_nxv4i64_unmasked:
1635; RV32:       # %bb.0:
1636; RV32-NEXT:    addi sp, sp, -16
1637; RV32-NEXT:    .cfi_def_cfa_offset 16
1638; RV32-NEXT:    sw a0, 8(sp)
1639; RV32-NEXT:    sw a1, 12(sp)
1640; RV32-NEXT:    addi a0, sp, 8
1641; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1642; RV32-NEXT:    vlse64.v v12, (a0), zero
1643; RV32-NEXT:    vsaddu.vv v8, v8, v12
1644; RV32-NEXT:    addi sp, sp, 16
1645; RV32-NEXT:    .cfi_def_cfa_offset 0
1646; RV32-NEXT:    ret
1647;
1648; RV64-LABEL: vsaddu_vx_nxv4i64_unmasked:
1649; RV64:       # %bb.0:
1650; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1651; RV64-NEXT:    vsaddu.vx v8, v8, a0
1652; RV64-NEXT:    ret
1653  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1654  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1655  %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1656  ret <vscale x 4 x i64> %v
1657}
1658
1659define <vscale x 4 x i64> @vsaddu_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1660; CHECK-LABEL: vsaddu_vi_nxv4i64:
1661; CHECK:       # %bb.0:
1662; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1663; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1664; CHECK-NEXT:    ret
1665  %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> %m, i32 %evl)
1666  ret <vscale x 4 x i64> %v
1667}
1668
1669define <vscale x 4 x i64> @vsaddu_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1670; CHECK-LABEL: vsaddu_vi_nxv4i64_unmasked:
1671; CHECK:       # %bb.0:
1672; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1673; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1674; CHECK-NEXT:    ret
1675  %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1676  ret <vscale x 4 x i64> %v
1677}
1678
1679declare <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1680
1681define <vscale x 8 x i64> @vsaddu_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1682; CHECK-LABEL: vsaddu_vv_nxv8i64:
1683; CHECK:       # %bb.0:
1684; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1685; CHECK-NEXT:    vsaddu.vv v8, v8, v16, v0.t
1686; CHECK-NEXT:    ret
1687  %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1688  ret <vscale x 8 x i64> %v
1689}
1690
1691define <vscale x 8 x i64> @vsaddu_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1692; CHECK-LABEL: vsaddu_vv_nxv8i64_unmasked:
1693; CHECK:       # %bb.0:
1694; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1695; CHECK-NEXT:    vsaddu.vv v8, v8, v16
1696; CHECK-NEXT:    ret
1697  %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1698  ret <vscale x 8 x i64> %v
1699}
1700
1701define <vscale x 8 x i64> @vsaddu_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1702; RV32-LABEL: vsaddu_vx_nxv8i64:
1703; RV32:       # %bb.0:
1704; RV32-NEXT:    addi sp, sp, -16
1705; RV32-NEXT:    .cfi_def_cfa_offset 16
1706; RV32-NEXT:    sw a0, 8(sp)
1707; RV32-NEXT:    sw a1, 12(sp)
1708; RV32-NEXT:    addi a0, sp, 8
1709; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1710; RV32-NEXT:    vlse64.v v16, (a0), zero
1711; RV32-NEXT:    vsaddu.vv v8, v8, v16, v0.t
1712; RV32-NEXT:    addi sp, sp, 16
1713; RV32-NEXT:    .cfi_def_cfa_offset 0
1714; RV32-NEXT:    ret
1715;
1716; RV64-LABEL: vsaddu_vx_nxv8i64:
1717; RV64:       # %bb.0:
1718; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1719; RV64-NEXT:    vsaddu.vx v8, v8, a0, v0.t
1720; RV64-NEXT:    ret
1721  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1722  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1723  %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1724  ret <vscale x 8 x i64> %v
1725}
1726
1727define <vscale x 8 x i64> @vsaddu_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1728; RV32-LABEL: vsaddu_vx_nxv8i64_unmasked:
1729; RV32:       # %bb.0:
1730; RV32-NEXT:    addi sp, sp, -16
1731; RV32-NEXT:    .cfi_def_cfa_offset 16
1732; RV32-NEXT:    sw a0, 8(sp)
1733; RV32-NEXT:    sw a1, 12(sp)
1734; RV32-NEXT:    addi a0, sp, 8
1735; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1736; RV32-NEXT:    vlse64.v v16, (a0), zero
1737; RV32-NEXT:    vsaddu.vv v8, v8, v16
1738; RV32-NEXT:    addi sp, sp, 16
1739; RV32-NEXT:    .cfi_def_cfa_offset 0
1740; RV32-NEXT:    ret
1741;
1742; RV64-LABEL: vsaddu_vx_nxv8i64_unmasked:
1743; RV64:       # %bb.0:
1744; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1745; RV64-NEXT:    vsaddu.vx v8, v8, a0
1746; RV64-NEXT:    ret
1747  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1748  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1749  %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1750  ret <vscale x 8 x i64> %v
1751}
1752
1753define <vscale x 8 x i64> @vsaddu_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1754; CHECK-LABEL: vsaddu_vi_nxv8i64:
1755; CHECK:       # %bb.0:
1756; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1757; CHECK-NEXT:    vsaddu.vi v8, v8, -1, v0.t
1758; CHECK-NEXT:    ret
1759  %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> %m, i32 %evl)
1760  ret <vscale x 8 x i64> %v
1761}
1762
1763define <vscale x 8 x i64> @vsaddu_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1764; CHECK-LABEL: vsaddu_vi_nxv8i64_unmasked:
1765; CHECK:       # %bb.0:
1766; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1767; CHECK-NEXT:    vsaddu.vi v8, v8, -1
1768; CHECK-NEXT:    ret
1769  %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1770  ret <vscale x 8 x i64> %v
1771}
1772