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.sadd.sat.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>)
9 define <vscale x 1 x i8> @sadd_nxv1i8_vv(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b) {
10 ; CHECK-LABEL: sadd_nxv1i8_vv:
12 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
13 ; CHECK-NEXT: vsadd.vv v8, v8, v9
15 %v = call <vscale x 1 x i8> @llvm.sadd.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> @sadd_nxv1i8_vx(<vscale x 1 x i8> %va, i8 %b) {
20 ; CHECK-LABEL: sadd_nxv1i8_vx:
22 ; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
23 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv1i8_vi(<vscale x 1 x i8> %va) {
32 ; CHECK-LABEL: sadd_nxv1i8_vi:
34 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
35 ; CHECK-NEXT: vsadd.vi v8, v8, 5
37 %v = call <vscale x 1 x i8> @llvm.sadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 5))
38 ret <vscale x 1 x i8> %v
41 declare <vscale x 2 x i8> @llvm.sadd.sat.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>)
43 define <vscale x 2 x i8> @sadd_nxv2i8_vv(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b) {
44 ; CHECK-LABEL: sadd_nxv2i8_vv:
46 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
47 ; CHECK-NEXT: vsadd.vv v8, v8, v9
49 %v = call <vscale x 2 x i8> @llvm.sadd.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> @sadd_nxv2i8_vx(<vscale x 2 x i8> %va, i8 %b) {
54 ; CHECK-LABEL: sadd_nxv2i8_vx:
56 ; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
57 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv2i8_vi(<vscale x 2 x i8> %va) {
66 ; CHECK-LABEL: sadd_nxv2i8_vi:
68 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
69 ; CHECK-NEXT: vsadd.vi v8, v8, 5
71 %v = call <vscale x 2 x i8> @llvm.sadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 5))
72 ret <vscale x 2 x i8> %v
75 declare <vscale x 4 x i8> @llvm.sadd.sat.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>)
77 define <vscale x 4 x i8> @sadd_nxv4i8_vv(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b) {
78 ; CHECK-LABEL: sadd_nxv4i8_vv:
80 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
81 ; CHECK-NEXT: vsadd.vv v8, v8, v9
83 %v = call <vscale x 4 x i8> @llvm.sadd.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> @sadd_nxv4i8_vx(<vscale x 4 x i8> %va, i8 %b) {
88 ; CHECK-LABEL: sadd_nxv4i8_vx:
90 ; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
91 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv4i8_vi(<vscale x 4 x i8> %va) {
100 ; CHECK-LABEL: sadd_nxv4i8_vi:
102 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
103 ; CHECK-NEXT: vsadd.vi v8, v8, 5
105 %v = call <vscale x 4 x i8> @llvm.sadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 5))
106 ret <vscale x 4 x i8> %v
109 declare <vscale x 8 x i8> @llvm.sadd.sat.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>)
111 define <vscale x 8 x i8> @sadd_nxv8i8_vv(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b) {
112 ; CHECK-LABEL: sadd_nxv8i8_vv:
114 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
115 ; CHECK-NEXT: vsadd.vv v8, v8, v9
117 %v = call <vscale x 8 x i8> @llvm.sadd.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> @sadd_nxv8i8_vx(<vscale x 8 x i8> %va, i8 %b) {
122 ; CHECK-LABEL: sadd_nxv8i8_vx:
124 ; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma
125 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv8i8_vi(<vscale x 8 x i8> %va) {
134 ; CHECK-LABEL: sadd_nxv8i8_vi:
136 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
137 ; CHECK-NEXT: vsadd.vi v8, v8, 5
139 %v = call <vscale x 8 x i8> @llvm.sadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 5))
140 ret <vscale x 8 x i8> %v
143 declare <vscale x 16 x i8> @llvm.sadd.sat.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
145 define <vscale x 16 x i8> @sadd_nxv16i8_vv(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b) {
146 ; CHECK-LABEL: sadd_nxv16i8_vv:
148 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
149 ; CHECK-NEXT: vsadd.vv v8, v8, v10
151 %v = call <vscale x 16 x i8> @llvm.sadd.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> @sadd_nxv16i8_vx(<vscale x 16 x i8> %va, i8 %b) {
156 ; CHECK-LABEL: sadd_nxv16i8_vx:
158 ; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma
159 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv16i8_vi(<vscale x 16 x i8> %va) {
168 ; CHECK-LABEL: sadd_nxv16i8_vi:
170 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
171 ; CHECK-NEXT: vsadd.vi v8, v8, 5
173 %v = call <vscale x 16 x i8> @llvm.sadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 5))
174 ret <vscale x 16 x i8> %v
177 declare <vscale x 32 x i8> @llvm.sadd.sat.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>)
179 define <vscale x 32 x i8> @sadd_nxv32i8_vv(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b) {
180 ; CHECK-LABEL: sadd_nxv32i8_vv:
182 ; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma
183 ; CHECK-NEXT: vsadd.vv v8, v8, v12
185 %v = call <vscale x 32 x i8> @llvm.sadd.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> @sadd_nxv32i8_vx(<vscale x 32 x i8> %va, i8 %b) {
190 ; CHECK-LABEL: sadd_nxv32i8_vx:
192 ; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma
193 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv32i8_vi(<vscale x 32 x i8> %va) {
202 ; CHECK-LABEL: sadd_nxv32i8_vi:
204 ; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma
205 ; CHECK-NEXT: vsadd.vi v8, v8, 5
207 %v = call <vscale x 32 x i8> @llvm.sadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 5))
208 ret <vscale x 32 x i8> %v
211 declare <vscale x 64 x i8> @llvm.sadd.sat.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>)
213 define <vscale x 64 x i8> @sadd_nxv64i8_vv(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b) {
214 ; CHECK-LABEL: sadd_nxv64i8_vv:
216 ; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma
217 ; CHECK-NEXT: vsadd.vv v8, v8, v16
219 %v = call <vscale x 64 x i8> @llvm.sadd.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> @sadd_nxv64i8_vx(<vscale x 64 x i8> %va, i8 %b) {
224 ; CHECK-LABEL: sadd_nxv64i8_vx:
226 ; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma
227 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv64i8_vi(<vscale x 64 x i8> %va) {
236 ; CHECK-LABEL: sadd_nxv64i8_vi:
238 ; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma
239 ; CHECK-NEXT: vsadd.vi v8, v8, 5
241 %v = call <vscale x 64 x i8> @llvm.sadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 5))
242 ret <vscale x 64 x i8> %v
245 declare <vscale x 1 x i16> @llvm.sadd.sat.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>)
247 define <vscale x 1 x i16> @sadd_nxv1i16_vv(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b) {
248 ; CHECK-LABEL: sadd_nxv1i16_vv:
250 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
251 ; CHECK-NEXT: vsadd.vv v8, v8, v9
253 %v = call <vscale x 1 x i16> @llvm.sadd.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> @sadd_nxv1i16_vx(<vscale x 1 x i16> %va, i16 %b) {
258 ; CHECK-LABEL: sadd_nxv1i16_vx:
260 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
261 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv1i16_vi(<vscale x 1 x i16> %va) {
270 ; CHECK-LABEL: sadd_nxv1i16_vi:
272 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
273 ; CHECK-NEXT: vsadd.vi v8, v8, 5
275 %v = call <vscale x 1 x i16> @llvm.sadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 5))
276 ret <vscale x 1 x i16> %v
279 declare <vscale x 2 x i16> @llvm.sadd.sat.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>)
281 define <vscale x 2 x i16> @sadd_nxv2i16_vv(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b) {
282 ; CHECK-LABEL: sadd_nxv2i16_vv:
284 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
285 ; CHECK-NEXT: vsadd.vv v8, v8, v9
287 %v = call <vscale x 2 x i16> @llvm.sadd.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> @sadd_nxv2i16_vx(<vscale x 2 x i16> %va, i16 %b) {
292 ; CHECK-LABEL: sadd_nxv2i16_vx:
294 ; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
295 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv2i16_vi(<vscale x 2 x i16> %va) {
304 ; CHECK-LABEL: sadd_nxv2i16_vi:
306 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
307 ; CHECK-NEXT: vsadd.vi v8, v8, 5
309 %v = call <vscale x 2 x i16> @llvm.sadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 5))
310 ret <vscale x 2 x i16> %v
313 declare <vscale x 4 x i16> @llvm.sadd.sat.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>)
315 define <vscale x 4 x i16> @sadd_nxv4i16_vv(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b) {
316 ; CHECK-LABEL: sadd_nxv4i16_vv:
318 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
319 ; CHECK-NEXT: vsadd.vv v8, v8, v9
321 %v = call <vscale x 4 x i16> @llvm.sadd.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> @sadd_nxv4i16_vx(<vscale x 4 x i16> %va, i16 %b) {
326 ; CHECK-LABEL: sadd_nxv4i16_vx:
328 ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
329 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv4i16_vi(<vscale x 4 x i16> %va) {
338 ; CHECK-LABEL: sadd_nxv4i16_vi:
340 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
341 ; CHECK-NEXT: vsadd.vi v8, v8, 5
343 %v = call <vscale x 4 x i16> @llvm.sadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 5))
344 ret <vscale x 4 x i16> %v
347 declare <vscale x 8 x i16> @llvm.sadd.sat.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
349 define <vscale x 8 x i16> @sadd_nxv8i16_vv(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b) {
350 ; CHECK-LABEL: sadd_nxv8i16_vv:
352 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
353 ; CHECK-NEXT: vsadd.vv v8, v8, v10
355 %v = call <vscale x 8 x i16> @llvm.sadd.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> @sadd_nxv8i16_vx(<vscale x 8 x i16> %va, i16 %b) {
360 ; CHECK-LABEL: sadd_nxv8i16_vx:
362 ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma
363 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv8i16_vi(<vscale x 8 x i16> %va) {
372 ; CHECK-LABEL: sadd_nxv8i16_vi:
374 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
375 ; CHECK-NEXT: vsadd.vi v8, v8, 5
377 %v = call <vscale x 8 x i16> @llvm.sadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 5))
378 ret <vscale x 8 x i16> %v
381 declare <vscale x 16 x i16> @llvm.sadd.sat.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>)
383 define <vscale x 16 x i16> @sadd_nxv16i16_vv(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b) {
384 ; CHECK-LABEL: sadd_nxv16i16_vv:
386 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
387 ; CHECK-NEXT: vsadd.vv v8, v8, v12
389 %v = call <vscale x 16 x i16> @llvm.sadd.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> @sadd_nxv16i16_vx(<vscale x 16 x i16> %va, i16 %b) {
394 ; CHECK-LABEL: sadd_nxv16i16_vx:
396 ; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma
397 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv16i16_vi(<vscale x 16 x i16> %va) {
406 ; CHECK-LABEL: sadd_nxv16i16_vi:
408 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
409 ; CHECK-NEXT: vsadd.vi v8, v8, 5
411 %v = call <vscale x 16 x i16> @llvm.sadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 5))
412 ret <vscale x 16 x i16> %v
415 declare <vscale x 32 x i16> @llvm.sadd.sat.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>)
417 define <vscale x 32 x i16> @sadd_nxv32i16_vv(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b) {
418 ; CHECK-LABEL: sadd_nxv32i16_vv:
420 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
421 ; CHECK-NEXT: vsadd.vv v8, v8, v16
423 %v = call <vscale x 32 x i16> @llvm.sadd.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> @sadd_nxv32i16_vx(<vscale x 32 x i16> %va, i16 %b) {
428 ; CHECK-LABEL: sadd_nxv32i16_vx:
430 ; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma
431 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv32i16_vi(<vscale x 32 x i16> %va) {
440 ; CHECK-LABEL: sadd_nxv32i16_vi:
442 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
443 ; CHECK-NEXT: vsadd.vi v8, v8, 5
445 %v = call <vscale x 32 x i16> @llvm.sadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 5))
446 ret <vscale x 32 x i16> %v
449 declare <vscale x 1 x i32> @llvm.sadd.sat.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>)
451 define <vscale x 1 x i32> @sadd_nxv1i32_vv(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b) {
452 ; CHECK-LABEL: sadd_nxv1i32_vv:
454 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
455 ; CHECK-NEXT: vsadd.vv v8, v8, v9
457 %v = call <vscale x 1 x i32> @llvm.sadd.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> @sadd_nxv1i32_vx(<vscale x 1 x i32> %va, i32 %b) {
462 ; CHECK-LABEL: sadd_nxv1i32_vx:
464 ; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
465 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv1i32_vi(<vscale x 1 x i32> %va) {
474 ; CHECK-LABEL: sadd_nxv1i32_vi:
476 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
477 ; CHECK-NEXT: vsadd.vi v8, v8, 5
479 %v = call <vscale x 1 x i32> @llvm.sadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 5))
480 ret <vscale x 1 x i32> %v
483 declare <vscale x 2 x i32> @llvm.sadd.sat.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>)
485 define <vscale x 2 x i32> @sadd_nxv2i32_vv(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b) {
486 ; CHECK-LABEL: sadd_nxv2i32_vv:
488 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
489 ; CHECK-NEXT: vsadd.vv v8, v8, v9
491 %v = call <vscale x 2 x i32> @llvm.sadd.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> @sadd_nxv2i32_vx(<vscale x 2 x i32> %va, i32 %b) {
496 ; CHECK-LABEL: sadd_nxv2i32_vx:
498 ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
499 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv2i32_vi(<vscale x 2 x i32> %va) {
508 ; CHECK-LABEL: sadd_nxv2i32_vi:
510 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
511 ; CHECK-NEXT: vsadd.vi v8, v8, 5
513 %v = call <vscale x 2 x i32> @llvm.sadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 5))
514 ret <vscale x 2 x i32> %v
517 declare <vscale x 4 x i32> @llvm.sadd.sat.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
519 define <vscale x 4 x i32> @sadd_nxv4i32_vv(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b) {
520 ; CHECK-LABEL: sadd_nxv4i32_vv:
522 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
523 ; CHECK-NEXT: vsadd.vv v8, v8, v10
525 %v = call <vscale x 4 x i32> @llvm.sadd.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> @sadd_nxv4i32_vx(<vscale x 4 x i32> %va, i32 %b) {
530 ; CHECK-LABEL: sadd_nxv4i32_vx:
532 ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma
533 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv4i32_vi(<vscale x 4 x i32> %va) {
542 ; CHECK-LABEL: sadd_nxv4i32_vi:
544 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
545 ; CHECK-NEXT: vsadd.vi v8, v8, 5
547 %v = call <vscale x 4 x i32> @llvm.sadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 5))
548 ret <vscale x 4 x i32> %v
551 declare <vscale x 8 x i32> @llvm.sadd.sat.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>)
553 define <vscale x 8 x i32> @sadd_nxv8i32_vv(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b) {
554 ; CHECK-LABEL: sadd_nxv8i32_vv:
556 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
557 ; CHECK-NEXT: vsadd.vv v8, v8, v12
559 %v = call <vscale x 8 x i32> @llvm.sadd.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> @sadd_nxv8i32_vx(<vscale x 8 x i32> %va, i32 %b) {
564 ; CHECK-LABEL: sadd_nxv8i32_vx:
566 ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma
567 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv8i32_vi(<vscale x 8 x i32> %va) {
576 ; CHECK-LABEL: sadd_nxv8i32_vi:
578 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
579 ; CHECK-NEXT: vsadd.vi v8, v8, 5
581 %v = call <vscale x 8 x i32> @llvm.sadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 5))
582 ret <vscale x 8 x i32> %v
585 declare <vscale x 16 x i32> @llvm.sadd.sat.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>)
587 define <vscale x 16 x i32> @sadd_nxv16i32_vv(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b) {
588 ; CHECK-LABEL: sadd_nxv16i32_vv:
590 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
591 ; CHECK-NEXT: vsadd.vv v8, v8, v16
593 %v = call <vscale x 16 x i32> @llvm.sadd.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> @sadd_nxv16i32_vx(<vscale x 16 x i32> %va, i32 %b) {
598 ; CHECK-LABEL: sadd_nxv16i32_vx:
600 ; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma
601 ; CHECK-NEXT: vsadd.vx v8, v8, a0
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.sadd.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> @sadd_nxv16i32_vi(<vscale x 16 x i32> %va) {
610 ; CHECK-LABEL: sadd_nxv16i32_vi:
612 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
613 ; CHECK-NEXT: vsadd.vi v8, v8, 5
615 %v = call <vscale x 16 x i32> @llvm.sadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 5))
616 ret <vscale x 16 x i32> %v
619 declare <vscale x 1 x i64> @llvm.sadd.sat.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>)
621 define <vscale x 1 x i64> @sadd_nxv1i64_vv(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b) {
622 ; CHECK-LABEL: sadd_nxv1i64_vv:
624 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
625 ; CHECK-NEXT: vsadd.vv v8, v8, v9
627 %v = call <vscale x 1 x i64> @llvm.sadd.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> @sadd_nxv1i64_vx(<vscale x 1 x i64> %va, i64 %b) {
632 ; RV32-LABEL: sadd_nxv1i64_vx:
634 ; RV32-NEXT: addi sp, sp, -16
635 ; RV32-NEXT: .cfi_def_cfa_offset 16
636 ; RV32-NEXT: sw a1, 12(sp)
637 ; RV32-NEXT: sw a0, 8(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: vsadd.vv v8, v8, v9
642 ; RV32-NEXT: addi sp, sp, 16
645 ; RV64-LABEL: sadd_nxv1i64_vx:
647 ; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, ma
648 ; RV64-NEXT: vsadd.vx v8, v8, a0
650 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
651 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
652 %v = call <vscale x 1 x i64> @llvm.sadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb)
653 ret <vscale x 1 x i64> %v
656 define <vscale x 1 x i64> @sadd_nxv1i64_vi(<vscale x 1 x i64> %va) {
657 ; CHECK-LABEL: sadd_nxv1i64_vi:
659 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
660 ; CHECK-NEXT: vsadd.vi v8, v8, 5
662 %v = call <vscale x 1 x i64> @llvm.sadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 5))
663 ret <vscale x 1 x i64> %v
666 declare <vscale x 2 x i64> @llvm.sadd.sat.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
668 define <vscale x 2 x i64> @sadd_nxv2i64_vv(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b) {
669 ; CHECK-LABEL: sadd_nxv2i64_vv:
671 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
672 ; CHECK-NEXT: vsadd.vv v8, v8, v10
674 %v = call <vscale x 2 x i64> @llvm.sadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b)
675 ret <vscale x 2 x i64> %v
678 define <vscale x 2 x i64> @sadd_nxv2i64_vx(<vscale x 2 x i64> %va, i64 %b) {
679 ; RV32-LABEL: sadd_nxv2i64_vx:
681 ; RV32-NEXT: addi sp, sp, -16
682 ; RV32-NEXT: .cfi_def_cfa_offset 16
683 ; RV32-NEXT: sw a1, 12(sp)
684 ; RV32-NEXT: sw a0, 8(sp)
685 ; RV32-NEXT: addi a0, sp, 8
686 ; RV32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
687 ; RV32-NEXT: vlse64.v v10, (a0), zero
688 ; RV32-NEXT: vsadd.vv v8, v8, v10
689 ; RV32-NEXT: addi sp, sp, 16
692 ; RV64-LABEL: sadd_nxv2i64_vx:
694 ; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, ma
695 ; RV64-NEXT: vsadd.vx v8, v8, a0
697 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
698 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
699 %v = call <vscale x 2 x i64> @llvm.sadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb)
700 ret <vscale x 2 x i64> %v
703 define <vscale x 2 x i64> @sadd_nxv2i64_vi(<vscale x 2 x i64> %va) {
704 ; CHECK-LABEL: sadd_nxv2i64_vi:
706 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
707 ; CHECK-NEXT: vsadd.vi v8, v8, 5
709 %v = call <vscale x 2 x i64> @llvm.sadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 5))
710 ret <vscale x 2 x i64> %v
713 declare <vscale x 4 x i64> @llvm.sadd.sat.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>)
715 define <vscale x 4 x i64> @sadd_nxv4i64_vv(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b) {
716 ; CHECK-LABEL: sadd_nxv4i64_vv:
718 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
719 ; CHECK-NEXT: vsadd.vv v8, v8, v12
721 %v = call <vscale x 4 x i64> @llvm.sadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b)
722 ret <vscale x 4 x i64> %v
725 define <vscale x 4 x i64> @sadd_nxv4i64_vx(<vscale x 4 x i64> %va, i64 %b) {
726 ; RV32-LABEL: sadd_nxv4i64_vx:
728 ; RV32-NEXT: addi sp, sp, -16
729 ; RV32-NEXT: .cfi_def_cfa_offset 16
730 ; RV32-NEXT: sw a1, 12(sp)
731 ; RV32-NEXT: sw a0, 8(sp)
732 ; RV32-NEXT: addi a0, sp, 8
733 ; RV32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
734 ; RV32-NEXT: vlse64.v v12, (a0), zero
735 ; RV32-NEXT: vsadd.vv v8, v8, v12
736 ; RV32-NEXT: addi sp, sp, 16
739 ; RV64-LABEL: sadd_nxv4i64_vx:
741 ; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, ma
742 ; RV64-NEXT: vsadd.vx v8, v8, a0
744 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
745 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
746 %v = call <vscale x 4 x i64> @llvm.sadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb)
747 ret <vscale x 4 x i64> %v
750 define <vscale x 4 x i64> @sadd_nxv4i64_vi(<vscale x 4 x i64> %va) {
751 ; CHECK-LABEL: sadd_nxv4i64_vi:
753 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
754 ; CHECK-NEXT: vsadd.vi v8, v8, 5
756 %v = call <vscale x 4 x i64> @llvm.sadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 5))
757 ret <vscale x 4 x i64> %v
760 declare <vscale x 8 x i64> @llvm.sadd.sat.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>)
762 define <vscale x 8 x i64> @sadd_nxv8i64_vv(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b) {
763 ; CHECK-LABEL: sadd_nxv8i64_vv:
765 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
766 ; CHECK-NEXT: vsadd.vv v8, v8, v16
768 %v = call <vscale x 8 x i64> @llvm.sadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b)
769 ret <vscale x 8 x i64> %v
772 define <vscale x 8 x i64> @sadd_nxv8i64_vx(<vscale x 8 x i64> %va, i64 %b) {
773 ; RV32-LABEL: sadd_nxv8i64_vx:
775 ; RV32-NEXT: addi sp, sp, -16
776 ; RV32-NEXT: .cfi_def_cfa_offset 16
777 ; RV32-NEXT: sw a1, 12(sp)
778 ; RV32-NEXT: sw a0, 8(sp)
779 ; RV32-NEXT: addi a0, sp, 8
780 ; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
781 ; RV32-NEXT: vlse64.v v16, (a0), zero
782 ; RV32-NEXT: vsadd.vv v8, v8, v16
783 ; RV32-NEXT: addi sp, sp, 16
786 ; RV64-LABEL: sadd_nxv8i64_vx:
788 ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
789 ; RV64-NEXT: vsadd.vx v8, v8, a0
791 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
792 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
793 %v = call <vscale x 8 x i64> @llvm.sadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb)
794 ret <vscale x 8 x i64> %v
797 define <vscale x 8 x i64> @sadd_nxv8i64_vi(<vscale x 8 x i64> %va) {
798 ; CHECK-LABEL: sadd_nxv8i64_vi:
800 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
801 ; CHECK-NEXT: vsadd.vi v8, v8, 5
803 %v = call <vscale x 8 x i64> @llvm.sadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 5))
804 ret <vscale x 8 x i64> %v