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