[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsaddu-vp.ll
blobf76a2b4b78bcaca7f5aa7a5d4f41cdb8ea90246b
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 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
26 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)
28 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) {
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
38 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) {
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
48 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) {
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
60 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) {
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
72 define <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
84 define <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
94 define <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
104 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)
106 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) {
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
116 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) {
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
126 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) {
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
138 define <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
150 define <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
160 define <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
170 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)
172 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) {
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
182 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) {
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
192 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) {
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
204 define <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
216 define <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
226 define <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
236 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)
238 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) {
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
248 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) {
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
258 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) {
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
270 define <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
282 define <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
292 define <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
302 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)
304 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) {
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
314 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) {
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
324 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) {
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
336 define <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
348 define <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
358 define <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
368 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)
370 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) {
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
380 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) {
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
390 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) {
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
402 define <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
414 define <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
424 define <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
434 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)
436 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) {
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
446 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) {
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
456 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) {
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
468 define <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
480 define <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
490 define <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
500 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)
502 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) {
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
512 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) {
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
522 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) {
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
534 define <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
546 define <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
556 define <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
566 ; Test that split-legalization works when the mask itself needs splitting.
568 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)
570 define <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
596 define <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
618 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)
620 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) {
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
630 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) {
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
640 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) {
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
652 define <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
664 define <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
674 define <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
684 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)
686 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) {
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
696 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) {
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
706 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) {
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
718 define <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
730 define <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
740 define <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
750 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)
752 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) {
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
762 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) {
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
772 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) {
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
784 define <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
796 define <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
806 define <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
816 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)
818 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) {
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
828 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) {
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
838 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) {
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
850 define <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
862 define <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
872 define <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
882 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)
884 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) {
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
894 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) {
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
904 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) {
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
916 define <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
928 define <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
938 define <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
948 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)
950 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) {
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
960 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) {
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
970 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) {
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
982 define <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
994 define <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
1004 define <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
1014 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)
1016 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) {
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
1026 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) {
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
1036 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) {
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
1048 define <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
1060 define <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
1070 define <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
1080 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)
1082 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) {
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
1092 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) {
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
1102 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) {
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
1114 define <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
1126 define <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
1136 define <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
1146 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)
1148 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) {
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
1158 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) {
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
1168 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) {
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
1180 define <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
1192 define <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
1202 define <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
1212 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)
1214 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) {
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
1224 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) {
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
1234 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) {
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
1246 define <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
1258 define <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
1268 define <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
1278 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)
1280 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) {
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
1290 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) {
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
1300 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) {
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
1312 define <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
1324 define <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
1334 define <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
1344 ; Test that split-legalization works then the mask needs manual splitting.
1346 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)
1348 define <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
1375 define <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
1397 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)
1399 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) {
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
1409 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) {
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
1419 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) {
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
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
1445 define <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
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
1471 define <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
1481 define <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
1491 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)
1493 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) {
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
1503 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) {
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
1513 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) {
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
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
1539 define <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
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
1565 define <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
1575 define <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
1585 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)
1587 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) {
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
1597 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) {
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
1607 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) {
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
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
1633 define <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
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
1659 define <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
1669 define <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
1679 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)
1681 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) {
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
1691 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) {
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
1701 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) {
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
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
1727 define <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
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
1753 define <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
1763 define <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