[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsaddu-sdnode.ll
blobc146f61fbf976b610f90637b3d5e093a4e88fa26
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 1 x i8> @llvm.uadd.sat.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>)
9 define <vscale x 1 x i8> @uadd_nxv1i8_vv(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b) {
10 ; CHECK-LABEL: uadd_nxv1i8_vv:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
13 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
14 ; CHECK-NEXT:    ret
15   %v = call <vscale x 1 x i8> @llvm.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b)
16   ret <vscale x 1 x i8> %v
19 define <vscale x 1 x i8> @uadd_nxv1i8_vx(<vscale x 1 x i8> %va, i8 %b) {
20 ; CHECK-LABEL: uadd_nxv1i8_vx:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
23 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
24 ; CHECK-NEXT:    ret
25   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
26   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
27   %v = call <vscale x 1 x i8> @llvm.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb)
28   ret <vscale x 1 x i8> %v
31 define <vscale x 1 x i8> @uadd_nxv1i8_vi(<vscale x 1 x i8> %va) {
32 ; CHECK-LABEL: uadd_nxv1i8_vi:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
35 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
36 ; CHECK-NEXT:    ret
37   %v = call <vscale x 1 x i8> @llvm.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 8))
38   ret <vscale x 1 x i8> %v
41 declare <vscale x 2 x i8> @llvm.uadd.sat.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>)
43 define <vscale x 2 x i8> @uadd_nxv2i8_vv(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b) {
44 ; CHECK-LABEL: uadd_nxv2i8_vv:
45 ; CHECK:       # %bb.0:
46 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
47 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
48 ; CHECK-NEXT:    ret
49   %v = call <vscale x 2 x i8> @llvm.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b)
50   ret <vscale x 2 x i8> %v
53 define <vscale x 2 x i8> @uadd_nxv2i8_vx(<vscale x 2 x i8> %va, i8 %b) {
54 ; CHECK-LABEL: uadd_nxv2i8_vx:
55 ; CHECK:       # %bb.0:
56 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
57 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
58 ; CHECK-NEXT:    ret
59   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
60   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
61   %v = call <vscale x 2 x i8> @llvm.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb)
62   ret <vscale x 2 x i8> %v
65 define <vscale x 2 x i8> @uadd_nxv2i8_vi(<vscale x 2 x i8> %va) {
66 ; CHECK-LABEL: uadd_nxv2i8_vi:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
69 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
70 ; CHECK-NEXT:    ret
71   %v = call <vscale x 2 x i8> @llvm.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 8))
72   ret <vscale x 2 x i8> %v
75 declare <vscale x 4 x i8> @llvm.uadd.sat.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>)
77 define <vscale x 4 x i8> @uadd_nxv4i8_vv(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b) {
78 ; CHECK-LABEL: uadd_nxv4i8_vv:
79 ; CHECK:       # %bb.0:
80 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
81 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
82 ; CHECK-NEXT:    ret
83   %v = call <vscale x 4 x i8> @llvm.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b)
84   ret <vscale x 4 x i8> %v
87 define <vscale x 4 x i8> @uadd_nxv4i8_vx(<vscale x 4 x i8> %va, i8 %b) {
88 ; CHECK-LABEL: uadd_nxv4i8_vx:
89 ; CHECK:       # %bb.0:
90 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
91 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
92 ; CHECK-NEXT:    ret
93   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
94   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
95   %v = call <vscale x 4 x i8> @llvm.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb)
96   ret <vscale x 4 x i8> %v
99 define <vscale x 4 x i8> @uadd_nxv4i8_vi(<vscale x 4 x i8> %va) {
100 ; CHECK-LABEL: uadd_nxv4i8_vi:
101 ; CHECK:       # %bb.0:
102 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
103 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
104 ; CHECK-NEXT:    ret
105   %v = call <vscale x 4 x i8> @llvm.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 8))
106   ret <vscale x 4 x i8> %v
109 declare <vscale x 8 x i8> @llvm.uadd.sat.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>)
111 define <vscale x 8 x i8> @uadd_nxv8i8_vv(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b) {
112 ; CHECK-LABEL: uadd_nxv8i8_vv:
113 ; CHECK:       # %bb.0:
114 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
115 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
116 ; CHECK-NEXT:    ret
117   %v = call <vscale x 8 x i8> @llvm.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b)
118   ret <vscale x 8 x i8> %v
121 define <vscale x 8 x i8> @uadd_nxv8i8_vx(<vscale x 8 x i8> %va, i8 %b) {
122 ; CHECK-LABEL: uadd_nxv8i8_vx:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
125 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
126 ; CHECK-NEXT:    ret
127   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
128   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
129   %v = call <vscale x 8 x i8> @llvm.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb)
130   ret <vscale x 8 x i8> %v
133 define <vscale x 8 x i8> @uadd_nxv8i8_vi(<vscale x 8 x i8> %va) {
134 ; CHECK-LABEL: uadd_nxv8i8_vi:
135 ; CHECK:       # %bb.0:
136 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
137 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
138 ; CHECK-NEXT:    ret
139   %v = call <vscale x 8 x i8> @llvm.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 8))
140   ret <vscale x 8 x i8> %v
143 declare <vscale x 16 x i8> @llvm.uadd.sat.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
145 define <vscale x 16 x i8> @uadd_nxv16i8_vv(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b) {
146 ; CHECK-LABEL: uadd_nxv16i8_vv:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
149 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
150 ; CHECK-NEXT:    ret
151   %v = call <vscale x 16 x i8> @llvm.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b)
152   ret <vscale x 16 x i8> %v
155 define <vscale x 16 x i8> @uadd_nxv16i8_vx(<vscale x 16 x i8> %va, i8 %b) {
156 ; CHECK-LABEL: uadd_nxv16i8_vx:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
159 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
160 ; CHECK-NEXT:    ret
161   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
162   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
163   %v = call <vscale x 16 x i8> @llvm.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb)
164   ret <vscale x 16 x i8> %v
167 define <vscale x 16 x i8> @uadd_nxv16i8_vi(<vscale x 16 x i8> %va) {
168 ; CHECK-LABEL: uadd_nxv16i8_vi:
169 ; CHECK:       # %bb.0:
170 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
171 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
172 ; CHECK-NEXT:    ret
173   %v = call <vscale x 16 x i8> @llvm.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 8))
174   ret <vscale x 16 x i8> %v
177 declare <vscale x 32 x i8> @llvm.uadd.sat.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>)
179 define <vscale x 32 x i8> @uadd_nxv32i8_vv(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b) {
180 ; CHECK-LABEL: uadd_nxv32i8_vv:
181 ; CHECK:       # %bb.0:
182 ; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
183 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12
184 ; CHECK-NEXT:    ret
185   %v = call <vscale x 32 x i8> @llvm.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b)
186   ret <vscale x 32 x i8> %v
189 define <vscale x 32 x i8> @uadd_nxv32i8_vx(<vscale x 32 x i8> %va, i8 %b) {
190 ; CHECK-LABEL: uadd_nxv32i8_vx:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
193 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
194 ; CHECK-NEXT:    ret
195   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
196   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
197   %v = call <vscale x 32 x i8> @llvm.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb)
198   ret <vscale x 32 x i8> %v
201 define <vscale x 32 x i8> @uadd_nxv32i8_vi(<vscale x 32 x i8> %va) {
202 ; CHECK-LABEL: uadd_nxv32i8_vi:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
205 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
206 ; CHECK-NEXT:    ret
207   %v = call <vscale x 32 x i8> @llvm.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 8))
208   ret <vscale x 32 x i8> %v
211 declare <vscale x 64 x i8> @llvm.uadd.sat.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>)
213 define <vscale x 64 x i8> @uadd_nxv64i8_vv(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b) {
214 ; CHECK-LABEL: uadd_nxv64i8_vv:
215 ; CHECK:       # %bb.0:
216 ; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
217 ; CHECK-NEXT:    vsaddu.vv v8, v8, v16
218 ; CHECK-NEXT:    ret
219   %v = call <vscale x 64 x i8> @llvm.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b)
220   ret <vscale x 64 x i8> %v
223 define <vscale x 64 x i8> @uadd_nxv64i8_vx(<vscale x 64 x i8> %va, i8 %b) {
224 ; CHECK-LABEL: uadd_nxv64i8_vx:
225 ; CHECK:       # %bb.0:
226 ; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma
227 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
228 ; CHECK-NEXT:    ret
229   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
230   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
231   %v = call <vscale x 64 x i8> @llvm.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb)
232   ret <vscale x 64 x i8> %v
235 define <vscale x 64 x i8> @uadd_nxv64i8_vi(<vscale x 64 x i8> %va) {
236 ; CHECK-LABEL: uadd_nxv64i8_vi:
237 ; CHECK:       # %bb.0:
238 ; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
239 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
240 ; CHECK-NEXT:    ret
241   %v = call <vscale x 64 x i8> @llvm.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 8))
242   ret <vscale x 64 x i8> %v
245 declare <vscale x 1 x i16> @llvm.uadd.sat.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>)
247 define <vscale x 1 x i16> @uadd_nxv1i16_vv(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b) {
248 ; CHECK-LABEL: uadd_nxv1i16_vv:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
251 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
252 ; CHECK-NEXT:    ret
253   %v = call <vscale x 1 x i16> @llvm.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b)
254   ret <vscale x 1 x i16> %v
257 define <vscale x 1 x i16> @uadd_nxv1i16_vx(<vscale x 1 x i16> %va, i16 %b) {
258 ; CHECK-LABEL: uadd_nxv1i16_vx:
259 ; CHECK:       # %bb.0:
260 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
261 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
262 ; CHECK-NEXT:    ret
263   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
264   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
265   %v = call <vscale x 1 x i16> @llvm.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb)
266   ret <vscale x 1 x i16> %v
269 define <vscale x 1 x i16> @uadd_nxv1i16_vi(<vscale x 1 x i16> %va) {
270 ; CHECK-LABEL: uadd_nxv1i16_vi:
271 ; CHECK:       # %bb.0:
272 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
273 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
274 ; CHECK-NEXT:    ret
275   %v = call <vscale x 1 x i16> @llvm.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 8))
276   ret <vscale x 1 x i16> %v
279 declare <vscale x 2 x i16> @llvm.uadd.sat.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>)
281 define <vscale x 2 x i16> @uadd_nxv2i16_vv(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b) {
282 ; CHECK-LABEL: uadd_nxv2i16_vv:
283 ; CHECK:       # %bb.0:
284 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
285 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
286 ; CHECK-NEXT:    ret
287   %v = call <vscale x 2 x i16> @llvm.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b)
288   ret <vscale x 2 x i16> %v
291 define <vscale x 2 x i16> @uadd_nxv2i16_vx(<vscale x 2 x i16> %va, i16 %b) {
292 ; CHECK-LABEL: uadd_nxv2i16_vx:
293 ; CHECK:       # %bb.0:
294 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
295 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
296 ; CHECK-NEXT:    ret
297   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
298   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
299   %v = call <vscale x 2 x i16> @llvm.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb)
300   ret <vscale x 2 x i16> %v
303 define <vscale x 2 x i16> @uadd_nxv2i16_vi(<vscale x 2 x i16> %va) {
304 ; CHECK-LABEL: uadd_nxv2i16_vi:
305 ; CHECK:       # %bb.0:
306 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
307 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
308 ; CHECK-NEXT:    ret
309   %v = call <vscale x 2 x i16> @llvm.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 8))
310   ret <vscale x 2 x i16> %v
313 declare <vscale x 4 x i16> @llvm.uadd.sat.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>)
315 define <vscale x 4 x i16> @uadd_nxv4i16_vv(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b) {
316 ; CHECK-LABEL: uadd_nxv4i16_vv:
317 ; CHECK:       # %bb.0:
318 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
319 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
320 ; CHECK-NEXT:    ret
321   %v = call <vscale x 4 x i16> @llvm.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b)
322   ret <vscale x 4 x i16> %v
325 define <vscale x 4 x i16> @uadd_nxv4i16_vx(<vscale x 4 x i16> %va, i16 %b) {
326 ; CHECK-LABEL: uadd_nxv4i16_vx:
327 ; CHECK:       # %bb.0:
328 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
329 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
330 ; CHECK-NEXT:    ret
331   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
332   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
333   %v = call <vscale x 4 x i16> @llvm.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb)
334   ret <vscale x 4 x i16> %v
337 define <vscale x 4 x i16> @uadd_nxv4i16_vi(<vscale x 4 x i16> %va) {
338 ; CHECK-LABEL: uadd_nxv4i16_vi:
339 ; CHECK:       # %bb.0:
340 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
341 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
342 ; CHECK-NEXT:    ret
343   %v = call <vscale x 4 x i16> @llvm.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 8))
344   ret <vscale x 4 x i16> %v
347 declare <vscale x 8 x i16> @llvm.uadd.sat.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
349 define <vscale x 8 x i16> @uadd_nxv8i16_vv(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b) {
350 ; CHECK-LABEL: uadd_nxv8i16_vv:
351 ; CHECK:       # %bb.0:
352 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
353 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
354 ; CHECK-NEXT:    ret
355   %v = call <vscale x 8 x i16> @llvm.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b)
356   ret <vscale x 8 x i16> %v
359 define <vscale x 8 x i16> @uadd_nxv8i16_vx(<vscale x 8 x i16> %va, i16 %b) {
360 ; CHECK-LABEL: uadd_nxv8i16_vx:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
363 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
364 ; CHECK-NEXT:    ret
365   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
366   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
367   %v = call <vscale x 8 x i16> @llvm.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb)
368   ret <vscale x 8 x i16> %v
371 define <vscale x 8 x i16> @uadd_nxv8i16_vi(<vscale x 8 x i16> %va) {
372 ; CHECK-LABEL: uadd_nxv8i16_vi:
373 ; CHECK:       # %bb.0:
374 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
375 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
376 ; CHECK-NEXT:    ret
377   %v = call <vscale x 8 x i16> @llvm.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 8))
378   ret <vscale x 8 x i16> %v
381 declare <vscale x 16 x i16> @llvm.uadd.sat.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>)
383 define <vscale x 16 x i16> @uadd_nxv16i16_vv(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b) {
384 ; CHECK-LABEL: uadd_nxv16i16_vv:
385 ; CHECK:       # %bb.0:
386 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
387 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12
388 ; CHECK-NEXT:    ret
389   %v = call <vscale x 16 x i16> @llvm.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b)
390   ret <vscale x 16 x i16> %v
393 define <vscale x 16 x i16> @uadd_nxv16i16_vx(<vscale x 16 x i16> %va, i16 %b) {
394 ; CHECK-LABEL: uadd_nxv16i16_vx:
395 ; CHECK:       # %bb.0:
396 ; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
397 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
398 ; CHECK-NEXT:    ret
399   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
400   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
401   %v = call <vscale x 16 x i16> @llvm.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb)
402   ret <vscale x 16 x i16> %v
405 define <vscale x 16 x i16> @uadd_nxv16i16_vi(<vscale x 16 x i16> %va) {
406 ; CHECK-LABEL: uadd_nxv16i16_vi:
407 ; CHECK:       # %bb.0:
408 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
409 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
410 ; CHECK-NEXT:    ret
411   %v = call <vscale x 16 x i16> @llvm.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 8))
412   ret <vscale x 16 x i16> %v
415 declare <vscale x 32 x i16> @llvm.uadd.sat.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>)
417 define <vscale x 32 x i16> @uadd_nxv32i16_vv(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b) {
418 ; CHECK-LABEL: uadd_nxv32i16_vv:
419 ; CHECK:       # %bb.0:
420 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
421 ; CHECK-NEXT:    vsaddu.vv v8, v8, v16
422 ; CHECK-NEXT:    ret
423   %v = call <vscale x 32 x i16> @llvm.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b)
424   ret <vscale x 32 x i16> %v
427 define <vscale x 32 x i16> @uadd_nxv32i16_vx(<vscale x 32 x i16> %va, i16 %b) {
428 ; CHECK-LABEL: uadd_nxv32i16_vx:
429 ; CHECK:       # %bb.0:
430 ; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
431 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
432 ; CHECK-NEXT:    ret
433   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
434   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
435   %v = call <vscale x 32 x i16> @llvm.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb)
436   ret <vscale x 32 x i16> %v
439 define <vscale x 32 x i16> @uadd_nxv32i16_vi(<vscale x 32 x i16> %va) {
440 ; CHECK-LABEL: uadd_nxv32i16_vi:
441 ; CHECK:       # %bb.0:
442 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
443 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
444 ; CHECK-NEXT:    ret
445   %v = call <vscale x 32 x i16> @llvm.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 8))
446   ret <vscale x 32 x i16> %v
449 declare <vscale x 1 x i32> @llvm.uadd.sat.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>)
451 define <vscale x 1 x i32> @uadd_nxv1i32_vv(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b) {
452 ; CHECK-LABEL: uadd_nxv1i32_vv:
453 ; CHECK:       # %bb.0:
454 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
455 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
456 ; CHECK-NEXT:    ret
457   %v = call <vscale x 1 x i32> @llvm.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b)
458   ret <vscale x 1 x i32> %v
461 define <vscale x 1 x i32> @uadd_nxv1i32_vx(<vscale x 1 x i32> %va, i32 %b) {
462 ; CHECK-LABEL: uadd_nxv1i32_vx:
463 ; CHECK:       # %bb.0:
464 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
465 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
466 ; CHECK-NEXT:    ret
467   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
468   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
469   %v = call <vscale x 1 x i32> @llvm.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb)
470   ret <vscale x 1 x i32> %v
473 define <vscale x 1 x i32> @uadd_nxv1i32_vi(<vscale x 1 x i32> %va) {
474 ; CHECK-LABEL: uadd_nxv1i32_vi:
475 ; CHECK:       # %bb.0:
476 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
477 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
478 ; CHECK-NEXT:    ret
479   %v = call <vscale x 1 x i32> @llvm.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 8))
480   ret <vscale x 1 x i32> %v
483 declare <vscale x 2 x i32> @llvm.uadd.sat.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>)
485 define <vscale x 2 x i32> @uadd_nxv2i32_vv(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b) {
486 ; CHECK-LABEL: uadd_nxv2i32_vv:
487 ; CHECK:       # %bb.0:
488 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
489 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
490 ; CHECK-NEXT:    ret
491   %v = call <vscale x 2 x i32> @llvm.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b)
492   ret <vscale x 2 x i32> %v
495 define <vscale x 2 x i32> @uadd_nxv2i32_vx(<vscale x 2 x i32> %va, i32 %b) {
496 ; CHECK-LABEL: uadd_nxv2i32_vx:
497 ; CHECK:       # %bb.0:
498 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
499 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
500 ; CHECK-NEXT:    ret
501   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
502   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
503   %v = call <vscale x 2 x i32> @llvm.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb)
504   ret <vscale x 2 x i32> %v
507 define <vscale x 2 x i32> @uadd_nxv2i32_vi(<vscale x 2 x i32> %va) {
508 ; CHECK-LABEL: uadd_nxv2i32_vi:
509 ; CHECK:       # %bb.0:
510 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
511 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
512 ; CHECK-NEXT:    ret
513   %v = call <vscale x 2 x i32> @llvm.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 8))
514   ret <vscale x 2 x i32> %v
517 declare <vscale x 4 x i32> @llvm.uadd.sat.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
519 define <vscale x 4 x i32> @uadd_nxv4i32_vv(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b) {
520 ; CHECK-LABEL: uadd_nxv4i32_vv:
521 ; CHECK:       # %bb.0:
522 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
523 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
524 ; CHECK-NEXT:    ret
525   %v = call <vscale x 4 x i32> @llvm.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b)
526   ret <vscale x 4 x i32> %v
529 define <vscale x 4 x i32> @uadd_nxv4i32_vx(<vscale x 4 x i32> %va, i32 %b) {
530 ; CHECK-LABEL: uadd_nxv4i32_vx:
531 ; CHECK:       # %bb.0:
532 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
533 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
534 ; CHECK-NEXT:    ret
535   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
536   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
537   %v = call <vscale x 4 x i32> @llvm.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb)
538   ret <vscale x 4 x i32> %v
541 define <vscale x 4 x i32> @uadd_nxv4i32_vi(<vscale x 4 x i32> %va) {
542 ; CHECK-LABEL: uadd_nxv4i32_vi:
543 ; CHECK:       # %bb.0:
544 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
545 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
546 ; CHECK-NEXT:    ret
547   %v = call <vscale x 4 x i32> @llvm.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 8))
548   ret <vscale x 4 x i32> %v
551 declare <vscale x 8 x i32> @llvm.uadd.sat.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>)
553 define <vscale x 8 x i32> @uadd_nxv8i32_vv(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b) {
554 ; CHECK-LABEL: uadd_nxv8i32_vv:
555 ; CHECK:       # %bb.0:
556 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
557 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12
558 ; CHECK-NEXT:    ret
559   %v = call <vscale x 8 x i32> @llvm.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b)
560   ret <vscale x 8 x i32> %v
563 define <vscale x 8 x i32> @uadd_nxv8i32_vx(<vscale x 8 x i32> %va, i32 %b) {
564 ; CHECK-LABEL: uadd_nxv8i32_vx:
565 ; CHECK:       # %bb.0:
566 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
567 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
568 ; CHECK-NEXT:    ret
569   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
570   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
571   %v = call <vscale x 8 x i32> @llvm.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb)
572   ret <vscale x 8 x i32> %v
575 define <vscale x 8 x i32> @uadd_nxv8i32_vi(<vscale x 8 x i32> %va) {
576 ; CHECK-LABEL: uadd_nxv8i32_vi:
577 ; CHECK:       # %bb.0:
578 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
579 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
580 ; CHECK-NEXT:    ret
581   %v = call <vscale x 8 x i32> @llvm.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 8))
582   ret <vscale x 8 x i32> %v
585 declare <vscale x 16 x i32> @llvm.uadd.sat.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>)
587 define <vscale x 16 x i32> @uadd_nxv16i32_vv(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b) {
588 ; CHECK-LABEL: uadd_nxv16i32_vv:
589 ; CHECK:       # %bb.0:
590 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
591 ; CHECK-NEXT:    vsaddu.vv v8, v8, v16
592 ; CHECK-NEXT:    ret
593   %v = call <vscale x 16 x i32> @llvm.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b)
594   ret <vscale x 16 x i32> %v
597 define <vscale x 16 x i32> @uadd_nxv16i32_vx(<vscale x 16 x i32> %va, i32 %b) {
598 ; CHECK-LABEL: uadd_nxv16i32_vx:
599 ; CHECK:       # %bb.0:
600 ; CHECK-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
601 ; CHECK-NEXT:    vsaddu.vx v8, v8, a0
602 ; CHECK-NEXT:    ret
603   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
604   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
605   %v = call <vscale x 16 x i32> @llvm.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb)
606   ret <vscale x 16 x i32> %v
609 define <vscale x 16 x i32> @uadd_nxv16i32_vi(<vscale x 16 x i32> %va) {
610 ; CHECK-LABEL: uadd_nxv16i32_vi:
611 ; CHECK:       # %bb.0:
612 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
613 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
614 ; CHECK-NEXT:    ret
615   %v = call <vscale x 16 x i32> @llvm.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 8))
616   ret <vscale x 16 x i32> %v
619 declare <vscale x 1 x i64> @llvm.uadd.sat.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>)
621 define <vscale x 1 x i64> @uadd_nxv1i64_vv(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b) {
622 ; CHECK-LABEL: uadd_nxv1i64_vv:
623 ; CHECK:       # %bb.0:
624 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
625 ; CHECK-NEXT:    vsaddu.vv v8, v8, v9
626 ; CHECK-NEXT:    ret
627   %v = call <vscale x 1 x i64> @llvm.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b)
628   ret <vscale x 1 x i64> %v
631 define <vscale x 1 x i64> @uadd_nxv1i64_vx(<vscale x 1 x i64> %va, i64 %b) {
632 ; RV32-LABEL: uadd_nxv1i64_vx:
633 ; RV32:       # %bb.0:
634 ; RV32-NEXT:    addi sp, sp, -16
635 ; RV32-NEXT:    .cfi_def_cfa_offset 16
636 ; RV32-NEXT:    sw a0, 8(sp)
637 ; RV32-NEXT:    sw a1, 12(sp)
638 ; RV32-NEXT:    addi a0, sp, 8
639 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
640 ; RV32-NEXT:    vlse64.v v9, (a0), zero
641 ; RV32-NEXT:    vsaddu.vv v8, v8, v9
642 ; RV32-NEXT:    addi sp, sp, 16
643 ; RV32-NEXT:    .cfi_def_cfa_offset 0
644 ; RV32-NEXT:    ret
646 ; RV64-LABEL: uadd_nxv1i64_vx:
647 ; RV64:       # %bb.0:
648 ; RV64-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
649 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
650 ; RV64-NEXT:    ret
651   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
652   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
653   %v = call <vscale x 1 x i64> @llvm.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb)
654   ret <vscale x 1 x i64> %v
657 define <vscale x 1 x i64> @uadd_nxv1i64_vi(<vscale x 1 x i64> %va) {
658 ; CHECK-LABEL: uadd_nxv1i64_vi:
659 ; CHECK:       # %bb.0:
660 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
661 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
662 ; CHECK-NEXT:    ret
663   %v = call <vscale x 1 x i64> @llvm.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 8))
664   ret <vscale x 1 x i64> %v
667 declare <vscale x 2 x i64> @llvm.uadd.sat.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
669 define <vscale x 2 x i64> @uadd_nxv2i64_vv(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b) {
670 ; CHECK-LABEL: uadd_nxv2i64_vv:
671 ; CHECK:       # %bb.0:
672 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
673 ; CHECK-NEXT:    vsaddu.vv v8, v8, v10
674 ; CHECK-NEXT:    ret
675   %v = call <vscale x 2 x i64> @llvm.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b)
676   ret <vscale x 2 x i64> %v
679 define <vscale x 2 x i64> @uadd_nxv2i64_vx(<vscale x 2 x i64> %va, i64 %b) {
680 ; RV32-LABEL: uadd_nxv2i64_vx:
681 ; RV32:       # %bb.0:
682 ; RV32-NEXT:    addi sp, sp, -16
683 ; RV32-NEXT:    .cfi_def_cfa_offset 16
684 ; RV32-NEXT:    sw a0, 8(sp)
685 ; RV32-NEXT:    sw a1, 12(sp)
686 ; RV32-NEXT:    addi a0, sp, 8
687 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
688 ; RV32-NEXT:    vlse64.v v10, (a0), zero
689 ; RV32-NEXT:    vsaddu.vv v8, v8, v10
690 ; RV32-NEXT:    addi sp, sp, 16
691 ; RV32-NEXT:    .cfi_def_cfa_offset 0
692 ; RV32-NEXT:    ret
694 ; RV64-LABEL: uadd_nxv2i64_vx:
695 ; RV64:       # %bb.0:
696 ; RV64-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
697 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
698 ; RV64-NEXT:    ret
699   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
700   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
701   %v = call <vscale x 2 x i64> @llvm.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb)
702   ret <vscale x 2 x i64> %v
705 define <vscale x 2 x i64> @uadd_nxv2i64_vi(<vscale x 2 x i64> %va) {
706 ; CHECK-LABEL: uadd_nxv2i64_vi:
707 ; CHECK:       # %bb.0:
708 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
709 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
710 ; CHECK-NEXT:    ret
711   %v = call <vscale x 2 x i64> @llvm.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 8))
712   ret <vscale x 2 x i64> %v
715 declare <vscale x 4 x i64> @llvm.uadd.sat.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>)
717 define <vscale x 4 x i64> @uadd_nxv4i64_vv(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b) {
718 ; CHECK-LABEL: uadd_nxv4i64_vv:
719 ; CHECK:       # %bb.0:
720 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
721 ; CHECK-NEXT:    vsaddu.vv v8, v8, v12
722 ; CHECK-NEXT:    ret
723   %v = call <vscale x 4 x i64> @llvm.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b)
724   ret <vscale x 4 x i64> %v
727 define <vscale x 4 x i64> @uadd_nxv4i64_vx(<vscale x 4 x i64> %va, i64 %b) {
728 ; RV32-LABEL: uadd_nxv4i64_vx:
729 ; RV32:       # %bb.0:
730 ; RV32-NEXT:    addi sp, sp, -16
731 ; RV32-NEXT:    .cfi_def_cfa_offset 16
732 ; RV32-NEXT:    sw a0, 8(sp)
733 ; RV32-NEXT:    sw a1, 12(sp)
734 ; RV32-NEXT:    addi a0, sp, 8
735 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
736 ; RV32-NEXT:    vlse64.v v12, (a0), zero
737 ; RV32-NEXT:    vsaddu.vv v8, v8, v12
738 ; RV32-NEXT:    addi sp, sp, 16
739 ; RV32-NEXT:    .cfi_def_cfa_offset 0
740 ; RV32-NEXT:    ret
742 ; RV64-LABEL: uadd_nxv4i64_vx:
743 ; RV64:       # %bb.0:
744 ; RV64-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
745 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
746 ; RV64-NEXT:    ret
747   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
748   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
749   %v = call <vscale x 4 x i64> @llvm.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb)
750   ret <vscale x 4 x i64> %v
753 define <vscale x 4 x i64> @uadd_nxv4i64_vi(<vscale x 4 x i64> %va) {
754 ; CHECK-LABEL: uadd_nxv4i64_vi:
755 ; CHECK:       # %bb.0:
756 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
757 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
758 ; CHECK-NEXT:    ret
759   %v = call <vscale x 4 x i64> @llvm.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 8))
760   ret <vscale x 4 x i64> %v
763 declare <vscale x 8 x i64> @llvm.uadd.sat.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>)
765 define <vscale x 8 x i64> @uadd_nxv8i64_vv(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b) {
766 ; CHECK-LABEL: uadd_nxv8i64_vv:
767 ; CHECK:       # %bb.0:
768 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
769 ; CHECK-NEXT:    vsaddu.vv v8, v8, v16
770 ; CHECK-NEXT:    ret
771   %v = call <vscale x 8 x i64> @llvm.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b)
772   ret <vscale x 8 x i64> %v
775 define <vscale x 8 x i64> @uadd_nxv8i64_vx(<vscale x 8 x i64> %va, i64 %b) {
776 ; RV32-LABEL: uadd_nxv8i64_vx:
777 ; RV32:       # %bb.0:
778 ; RV32-NEXT:    addi sp, sp, -16
779 ; RV32-NEXT:    .cfi_def_cfa_offset 16
780 ; RV32-NEXT:    sw a0, 8(sp)
781 ; RV32-NEXT:    sw a1, 12(sp)
782 ; RV32-NEXT:    addi a0, sp, 8
783 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
784 ; RV32-NEXT:    vlse64.v v16, (a0), zero
785 ; RV32-NEXT:    vsaddu.vv v8, v8, v16
786 ; RV32-NEXT:    addi sp, sp, 16
787 ; RV32-NEXT:    .cfi_def_cfa_offset 0
788 ; RV32-NEXT:    ret
790 ; RV64-LABEL: uadd_nxv8i64_vx:
791 ; RV64:       # %bb.0:
792 ; RV64-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
793 ; RV64-NEXT:    vsaddu.vx v8, v8, a0
794 ; RV64-NEXT:    ret
795   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
796   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
797   %v = call <vscale x 8 x i64> @llvm.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb)
798   ret <vscale x 8 x i64> %v
801 define <vscale x 8 x i64> @uadd_nxv8i64_vi(<vscale x 8 x i64> %va) {
802 ; CHECK-LABEL: uadd_nxv8i64_vi:
803 ; CHECK:       # %bb.0:
804 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
805 ; CHECK-NEXT:    vsaddu.vi v8, v8, 8
806 ; CHECK-NEXT:    ret
807   %v = call <vscale x 8 x i64> @llvm.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 8))
808   ret <vscale x 8 x i64> %v