Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsadd-sdnode.ll
blob38edd19096f845c5d014780792159ff321597181
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:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
13 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
14 ; CHECK-NEXT:    ret
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:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
23 ; CHECK-NEXT:    vsadd.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.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:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
35 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
36 ; CHECK-NEXT:    ret
37   %elt.head = insertelement <vscale x 1 x i8> poison, i8 5, i32 0
38   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
39   %v = call <vscale x 1 x i8> @llvm.sadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb)
40   ret <vscale x 1 x i8> %v
43 declare <vscale x 2 x i8> @llvm.sadd.sat.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>)
45 define <vscale x 2 x i8> @sadd_nxv2i8_vv(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b) {
46 ; CHECK-LABEL: sadd_nxv2i8_vv:
47 ; CHECK:       # %bb.0:
48 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
49 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
50 ; CHECK-NEXT:    ret
51   %v = call <vscale x 2 x i8> @llvm.sadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b)
52   ret <vscale x 2 x i8> %v
55 define <vscale x 2 x i8> @sadd_nxv2i8_vx(<vscale x 2 x i8> %va, i8 %b) {
56 ; CHECK-LABEL: sadd_nxv2i8_vx:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
59 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
60 ; CHECK-NEXT:    ret
61   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
62   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
63   %v = call <vscale x 2 x i8> @llvm.sadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb)
64   ret <vscale x 2 x i8> %v
67 define <vscale x 2 x i8> @sadd_nxv2i8_vi(<vscale x 2 x i8> %va) {
68 ; CHECK-LABEL: sadd_nxv2i8_vi:
69 ; CHECK:       # %bb.0:
70 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
71 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
72 ; CHECK-NEXT:    ret
73   %elt.head = insertelement <vscale x 2 x i8> poison, i8 5, i32 0
74   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
75   %v = call <vscale x 2 x i8> @llvm.sadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb)
76   ret <vscale x 2 x i8> %v
79 declare <vscale x 4 x i8> @llvm.sadd.sat.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>)
81 define <vscale x 4 x i8> @sadd_nxv4i8_vv(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b) {
82 ; CHECK-LABEL: sadd_nxv4i8_vv:
83 ; CHECK:       # %bb.0:
84 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
85 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
86 ; CHECK-NEXT:    ret
87   %v = call <vscale x 4 x i8> @llvm.sadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b)
88   ret <vscale x 4 x i8> %v
91 define <vscale x 4 x i8> @sadd_nxv4i8_vx(<vscale x 4 x i8> %va, i8 %b) {
92 ; CHECK-LABEL: sadd_nxv4i8_vx:
93 ; CHECK:       # %bb.0:
94 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
95 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
96 ; CHECK-NEXT:    ret
97   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
98   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
99   %v = call <vscale x 4 x i8> @llvm.sadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb)
100   ret <vscale x 4 x i8> %v
103 define <vscale x 4 x i8> @sadd_nxv4i8_vi(<vscale x 4 x i8> %va) {
104 ; CHECK-LABEL: sadd_nxv4i8_vi:
105 ; CHECK:       # %bb.0:
106 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
107 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
108 ; CHECK-NEXT:    ret
109   %elt.head = insertelement <vscale x 4 x i8> poison, i8 5, i32 0
110   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
111   %v = call <vscale x 4 x i8> @llvm.sadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb)
112   ret <vscale x 4 x i8> %v
115 declare <vscale x 8 x i8> @llvm.sadd.sat.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>)
117 define <vscale x 8 x i8> @sadd_nxv8i8_vv(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b) {
118 ; CHECK-LABEL: sadd_nxv8i8_vv:
119 ; CHECK:       # %bb.0:
120 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
121 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
122 ; CHECK-NEXT:    ret
123   %v = call <vscale x 8 x i8> @llvm.sadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b)
124   ret <vscale x 8 x i8> %v
127 define <vscale x 8 x i8> @sadd_nxv8i8_vx(<vscale x 8 x i8> %va, i8 %b) {
128 ; CHECK-LABEL: sadd_nxv8i8_vx:
129 ; CHECK:       # %bb.0:
130 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
131 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
132 ; CHECK-NEXT:    ret
133   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
134   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
135   %v = call <vscale x 8 x i8> @llvm.sadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb)
136   ret <vscale x 8 x i8> %v
139 define <vscale x 8 x i8> @sadd_nxv8i8_vi(<vscale x 8 x i8> %va) {
140 ; CHECK-LABEL: sadd_nxv8i8_vi:
141 ; CHECK:       # %bb.0:
142 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
143 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
144 ; CHECK-NEXT:    ret
145   %elt.head = insertelement <vscale x 8 x i8> poison, i8 5, i32 0
146   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
147   %v = call <vscale x 8 x i8> @llvm.sadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb)
148   ret <vscale x 8 x i8> %v
151 declare <vscale x 16 x i8> @llvm.sadd.sat.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
153 define <vscale x 16 x i8> @sadd_nxv16i8_vv(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b) {
154 ; CHECK-LABEL: sadd_nxv16i8_vv:
155 ; CHECK:       # %bb.0:
156 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
157 ; CHECK-NEXT:    vsadd.vv v8, v8, v10
158 ; CHECK-NEXT:    ret
159   %v = call <vscale x 16 x i8> @llvm.sadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b)
160   ret <vscale x 16 x i8> %v
163 define <vscale x 16 x i8> @sadd_nxv16i8_vx(<vscale x 16 x i8> %va, i8 %b) {
164 ; CHECK-LABEL: sadd_nxv16i8_vx:
165 ; CHECK:       # %bb.0:
166 ; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
167 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
168 ; CHECK-NEXT:    ret
169   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
170   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
171   %v = call <vscale x 16 x i8> @llvm.sadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb)
172   ret <vscale x 16 x i8> %v
175 define <vscale x 16 x i8> @sadd_nxv16i8_vi(<vscale x 16 x i8> %va) {
176 ; CHECK-LABEL: sadd_nxv16i8_vi:
177 ; CHECK:       # %bb.0:
178 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
179 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
180 ; CHECK-NEXT:    ret
181   %elt.head = insertelement <vscale x 16 x i8> poison, i8 5, i32 0
182   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
183   %v = call <vscale x 16 x i8> @llvm.sadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb)
184   ret <vscale x 16 x i8> %v
187 declare <vscale x 32 x i8> @llvm.sadd.sat.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>)
189 define <vscale x 32 x i8> @sadd_nxv32i8_vv(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b) {
190 ; CHECK-LABEL: sadd_nxv32i8_vv:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
193 ; CHECK-NEXT:    vsadd.vv v8, v8, v12
194 ; CHECK-NEXT:    ret
195   %v = call <vscale x 32 x i8> @llvm.sadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b)
196   ret <vscale x 32 x i8> %v
199 define <vscale x 32 x i8> @sadd_nxv32i8_vx(<vscale x 32 x i8> %va, i8 %b) {
200 ; CHECK-LABEL: sadd_nxv32i8_vx:
201 ; CHECK:       # %bb.0:
202 ; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
203 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
204 ; CHECK-NEXT:    ret
205   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
206   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
207   %v = call <vscale x 32 x i8> @llvm.sadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb)
208   ret <vscale x 32 x i8> %v
211 define <vscale x 32 x i8> @sadd_nxv32i8_vi(<vscale x 32 x i8> %va) {
212 ; CHECK-LABEL: sadd_nxv32i8_vi:
213 ; CHECK:       # %bb.0:
214 ; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
215 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
216 ; CHECK-NEXT:    ret
217   %elt.head = insertelement <vscale x 32 x i8> poison, i8 5, i32 0
218   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
219   %v = call <vscale x 32 x i8> @llvm.sadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb)
220   ret <vscale x 32 x i8> %v
223 declare <vscale x 64 x i8> @llvm.sadd.sat.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>)
225 define <vscale x 64 x i8> @sadd_nxv64i8_vv(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b) {
226 ; CHECK-LABEL: sadd_nxv64i8_vv:
227 ; CHECK:       # %bb.0:
228 ; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
229 ; CHECK-NEXT:    vsadd.vv v8, v8, v16
230 ; CHECK-NEXT:    ret
231   %v = call <vscale x 64 x i8> @llvm.sadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b)
232   ret <vscale x 64 x i8> %v
235 define <vscale x 64 x i8> @sadd_nxv64i8_vx(<vscale x 64 x i8> %va, i8 %b) {
236 ; CHECK-LABEL: sadd_nxv64i8_vx:
237 ; CHECK:       # %bb.0:
238 ; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma
239 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
240 ; CHECK-NEXT:    ret
241   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
242   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
243   %v = call <vscale x 64 x i8> @llvm.sadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb)
244   ret <vscale x 64 x i8> %v
247 define <vscale x 64 x i8> @sadd_nxv64i8_vi(<vscale x 64 x i8> %va) {
248 ; CHECK-LABEL: sadd_nxv64i8_vi:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
251 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
252 ; CHECK-NEXT:    ret
253   %elt.head = insertelement <vscale x 64 x i8> poison, i8 5, i32 0
254   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
255   %v = call <vscale x 64 x i8> @llvm.sadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb)
256   ret <vscale x 64 x i8> %v
259 declare <vscale x 1 x i16> @llvm.sadd.sat.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>)
261 define <vscale x 1 x i16> @sadd_nxv1i16_vv(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b) {
262 ; CHECK-LABEL: sadd_nxv1i16_vv:
263 ; CHECK:       # %bb.0:
264 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
265 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
266 ; CHECK-NEXT:    ret
267   %v = call <vscale x 1 x i16> @llvm.sadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b)
268   ret <vscale x 1 x i16> %v
271 define <vscale x 1 x i16> @sadd_nxv1i16_vx(<vscale x 1 x i16> %va, i16 %b) {
272 ; CHECK-LABEL: sadd_nxv1i16_vx:
273 ; CHECK:       # %bb.0:
274 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
275 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
276 ; CHECK-NEXT:    ret
277   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
278   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
279   %v = call <vscale x 1 x i16> @llvm.sadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb)
280   ret <vscale x 1 x i16> %v
283 define <vscale x 1 x i16> @sadd_nxv1i16_vi(<vscale x 1 x i16> %va) {
284 ; CHECK-LABEL: sadd_nxv1i16_vi:
285 ; CHECK:       # %bb.0:
286 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
287 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
288 ; CHECK-NEXT:    ret
289   %elt.head = insertelement <vscale x 1 x i16> poison, i16 5, i32 0
290   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
291   %v = call <vscale x 1 x i16> @llvm.sadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb)
292   ret <vscale x 1 x i16> %v
295 declare <vscale x 2 x i16> @llvm.sadd.sat.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>)
297 define <vscale x 2 x i16> @sadd_nxv2i16_vv(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b) {
298 ; CHECK-LABEL: sadd_nxv2i16_vv:
299 ; CHECK:       # %bb.0:
300 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
301 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
302 ; CHECK-NEXT:    ret
303   %v = call <vscale x 2 x i16> @llvm.sadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b)
304   ret <vscale x 2 x i16> %v
307 define <vscale x 2 x i16> @sadd_nxv2i16_vx(<vscale x 2 x i16> %va, i16 %b) {
308 ; CHECK-LABEL: sadd_nxv2i16_vx:
309 ; CHECK:       # %bb.0:
310 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
311 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
312 ; CHECK-NEXT:    ret
313   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
314   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
315   %v = call <vscale x 2 x i16> @llvm.sadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb)
316   ret <vscale x 2 x i16> %v
319 define <vscale x 2 x i16> @sadd_nxv2i16_vi(<vscale x 2 x i16> %va) {
320 ; CHECK-LABEL: sadd_nxv2i16_vi:
321 ; CHECK:       # %bb.0:
322 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
323 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
324 ; CHECK-NEXT:    ret
325   %elt.head = insertelement <vscale x 2 x i16> poison, i16 5, i32 0
326   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
327   %v = call <vscale x 2 x i16> @llvm.sadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb)
328   ret <vscale x 2 x i16> %v
331 declare <vscale x 4 x i16> @llvm.sadd.sat.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>)
333 define <vscale x 4 x i16> @sadd_nxv4i16_vv(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b) {
334 ; CHECK-LABEL: sadd_nxv4i16_vv:
335 ; CHECK:       # %bb.0:
336 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
337 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
338 ; CHECK-NEXT:    ret
339   %v = call <vscale x 4 x i16> @llvm.sadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b)
340   ret <vscale x 4 x i16> %v
343 define <vscale x 4 x i16> @sadd_nxv4i16_vx(<vscale x 4 x i16> %va, i16 %b) {
344 ; CHECK-LABEL: sadd_nxv4i16_vx:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
347 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
348 ; CHECK-NEXT:    ret
349   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
350   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
351   %v = call <vscale x 4 x i16> @llvm.sadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb)
352   ret <vscale x 4 x i16> %v
355 define <vscale x 4 x i16> @sadd_nxv4i16_vi(<vscale x 4 x i16> %va) {
356 ; CHECK-LABEL: sadd_nxv4i16_vi:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
359 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
360 ; CHECK-NEXT:    ret
361   %elt.head = insertelement <vscale x 4 x i16> poison, i16 5, i32 0
362   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
363   %v = call <vscale x 4 x i16> @llvm.sadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb)
364   ret <vscale x 4 x i16> %v
367 declare <vscale x 8 x i16> @llvm.sadd.sat.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
369 define <vscale x 8 x i16> @sadd_nxv8i16_vv(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b) {
370 ; CHECK-LABEL: sadd_nxv8i16_vv:
371 ; CHECK:       # %bb.0:
372 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
373 ; CHECK-NEXT:    vsadd.vv v8, v8, v10
374 ; CHECK-NEXT:    ret
375   %v = call <vscale x 8 x i16> @llvm.sadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b)
376   ret <vscale x 8 x i16> %v
379 define <vscale x 8 x i16> @sadd_nxv8i16_vx(<vscale x 8 x i16> %va, i16 %b) {
380 ; CHECK-LABEL: sadd_nxv8i16_vx:
381 ; CHECK:       # %bb.0:
382 ; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
383 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
384 ; CHECK-NEXT:    ret
385   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
386   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
387   %v = call <vscale x 8 x i16> @llvm.sadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb)
388   ret <vscale x 8 x i16> %v
391 define <vscale x 8 x i16> @sadd_nxv8i16_vi(<vscale x 8 x i16> %va) {
392 ; CHECK-LABEL: sadd_nxv8i16_vi:
393 ; CHECK:       # %bb.0:
394 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
395 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
396 ; CHECK-NEXT:    ret
397   %elt.head = insertelement <vscale x 8 x i16> poison, i16 5, i32 0
398   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
399   %v = call <vscale x 8 x i16> @llvm.sadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb)
400   ret <vscale x 8 x i16> %v
403 declare <vscale x 16 x i16> @llvm.sadd.sat.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>)
405 define <vscale x 16 x i16> @sadd_nxv16i16_vv(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b) {
406 ; CHECK-LABEL: sadd_nxv16i16_vv:
407 ; CHECK:       # %bb.0:
408 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
409 ; CHECK-NEXT:    vsadd.vv v8, v8, v12
410 ; CHECK-NEXT:    ret
411   %v = call <vscale x 16 x i16> @llvm.sadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b)
412   ret <vscale x 16 x i16> %v
415 define <vscale x 16 x i16> @sadd_nxv16i16_vx(<vscale x 16 x i16> %va, i16 %b) {
416 ; CHECK-LABEL: sadd_nxv16i16_vx:
417 ; CHECK:       # %bb.0:
418 ; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
419 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
420 ; CHECK-NEXT:    ret
421   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
422   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
423   %v = call <vscale x 16 x i16> @llvm.sadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb)
424   ret <vscale x 16 x i16> %v
427 define <vscale x 16 x i16> @sadd_nxv16i16_vi(<vscale x 16 x i16> %va) {
428 ; CHECK-LABEL: sadd_nxv16i16_vi:
429 ; CHECK:       # %bb.0:
430 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
431 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
432 ; CHECK-NEXT:    ret
433   %elt.head = insertelement <vscale x 16 x i16> poison, i16 5, i32 0
434   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
435   %v = call <vscale x 16 x i16> @llvm.sadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb)
436   ret <vscale x 16 x i16> %v
439 declare <vscale x 32 x i16> @llvm.sadd.sat.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>)
441 define <vscale x 32 x i16> @sadd_nxv32i16_vv(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b) {
442 ; CHECK-LABEL: sadd_nxv32i16_vv:
443 ; CHECK:       # %bb.0:
444 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
445 ; CHECK-NEXT:    vsadd.vv v8, v8, v16
446 ; CHECK-NEXT:    ret
447   %v = call <vscale x 32 x i16> @llvm.sadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b)
448   ret <vscale x 32 x i16> %v
451 define <vscale x 32 x i16> @sadd_nxv32i16_vx(<vscale x 32 x i16> %va, i16 %b) {
452 ; CHECK-LABEL: sadd_nxv32i16_vx:
453 ; CHECK:       # %bb.0:
454 ; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
455 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
456 ; CHECK-NEXT:    ret
457   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
458   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
459   %v = call <vscale x 32 x i16> @llvm.sadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb)
460   ret <vscale x 32 x i16> %v
463 define <vscale x 32 x i16> @sadd_nxv32i16_vi(<vscale x 32 x i16> %va) {
464 ; CHECK-LABEL: sadd_nxv32i16_vi:
465 ; CHECK:       # %bb.0:
466 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
467 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
468 ; CHECK-NEXT:    ret
469   %elt.head = insertelement <vscale x 32 x i16> poison, i16 5, i32 0
470   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
471   %v = call <vscale x 32 x i16> @llvm.sadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb)
472   ret <vscale x 32 x i16> %v
475 declare <vscale x 1 x i32> @llvm.sadd.sat.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>)
477 define <vscale x 1 x i32> @sadd_nxv1i32_vv(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b) {
478 ; CHECK-LABEL: sadd_nxv1i32_vv:
479 ; CHECK:       # %bb.0:
480 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
481 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
482 ; CHECK-NEXT:    ret
483   %v = call <vscale x 1 x i32> @llvm.sadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b)
484   ret <vscale x 1 x i32> %v
487 define <vscale x 1 x i32> @sadd_nxv1i32_vx(<vscale x 1 x i32> %va, i32 %b) {
488 ; CHECK-LABEL: sadd_nxv1i32_vx:
489 ; CHECK:       # %bb.0:
490 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
491 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
492 ; CHECK-NEXT:    ret
493   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
494   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
495   %v = call <vscale x 1 x i32> @llvm.sadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb)
496   ret <vscale x 1 x i32> %v
499 define <vscale x 1 x i32> @sadd_nxv1i32_vi(<vscale x 1 x i32> %va) {
500 ; CHECK-LABEL: sadd_nxv1i32_vi:
501 ; CHECK:       # %bb.0:
502 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
503 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
504 ; CHECK-NEXT:    ret
505   %elt.head = insertelement <vscale x 1 x i32> poison, i32 5, i32 0
506   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
507   %v = call <vscale x 1 x i32> @llvm.sadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb)
508   ret <vscale x 1 x i32> %v
511 declare <vscale x 2 x i32> @llvm.sadd.sat.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>)
513 define <vscale x 2 x i32> @sadd_nxv2i32_vv(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b) {
514 ; CHECK-LABEL: sadd_nxv2i32_vv:
515 ; CHECK:       # %bb.0:
516 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
517 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
518 ; CHECK-NEXT:    ret
519   %v = call <vscale x 2 x i32> @llvm.sadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b)
520   ret <vscale x 2 x i32> %v
523 define <vscale x 2 x i32> @sadd_nxv2i32_vx(<vscale x 2 x i32> %va, i32 %b) {
524 ; CHECK-LABEL: sadd_nxv2i32_vx:
525 ; CHECK:       # %bb.0:
526 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
527 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
528 ; CHECK-NEXT:    ret
529   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
530   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
531   %v = call <vscale x 2 x i32> @llvm.sadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb)
532   ret <vscale x 2 x i32> %v
535 define <vscale x 2 x i32> @sadd_nxv2i32_vi(<vscale x 2 x i32> %va) {
536 ; CHECK-LABEL: sadd_nxv2i32_vi:
537 ; CHECK:       # %bb.0:
538 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
539 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
540 ; CHECK-NEXT:    ret
541   %elt.head = insertelement <vscale x 2 x i32> poison, i32 5, i32 0
542   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
543   %v = call <vscale x 2 x i32> @llvm.sadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb)
544   ret <vscale x 2 x i32> %v
547 declare <vscale x 4 x i32> @llvm.sadd.sat.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
549 define <vscale x 4 x i32> @sadd_nxv4i32_vv(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b) {
550 ; CHECK-LABEL: sadd_nxv4i32_vv:
551 ; CHECK:       # %bb.0:
552 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
553 ; CHECK-NEXT:    vsadd.vv v8, v8, v10
554 ; CHECK-NEXT:    ret
555   %v = call <vscale x 4 x i32> @llvm.sadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b)
556   ret <vscale x 4 x i32> %v
559 define <vscale x 4 x i32> @sadd_nxv4i32_vx(<vscale x 4 x i32> %va, i32 %b) {
560 ; CHECK-LABEL: sadd_nxv4i32_vx:
561 ; CHECK:       # %bb.0:
562 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
563 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
564 ; CHECK-NEXT:    ret
565   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
566   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
567   %v = call <vscale x 4 x i32> @llvm.sadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb)
568   ret <vscale x 4 x i32> %v
571 define <vscale x 4 x i32> @sadd_nxv4i32_vi(<vscale x 4 x i32> %va) {
572 ; CHECK-LABEL: sadd_nxv4i32_vi:
573 ; CHECK:       # %bb.0:
574 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
575 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
576 ; CHECK-NEXT:    ret
577   %elt.head = insertelement <vscale x 4 x i32> poison, i32 5, i32 0
578   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
579   %v = call <vscale x 4 x i32> @llvm.sadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb)
580   ret <vscale x 4 x i32> %v
583 declare <vscale x 8 x i32> @llvm.sadd.sat.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>)
585 define <vscale x 8 x i32> @sadd_nxv8i32_vv(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b) {
586 ; CHECK-LABEL: sadd_nxv8i32_vv:
587 ; CHECK:       # %bb.0:
588 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
589 ; CHECK-NEXT:    vsadd.vv v8, v8, v12
590 ; CHECK-NEXT:    ret
591   %v = call <vscale x 8 x i32> @llvm.sadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b)
592   ret <vscale x 8 x i32> %v
595 define <vscale x 8 x i32> @sadd_nxv8i32_vx(<vscale x 8 x i32> %va, i32 %b) {
596 ; CHECK-LABEL: sadd_nxv8i32_vx:
597 ; CHECK:       # %bb.0:
598 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
599 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
600 ; CHECK-NEXT:    ret
601   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
602   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
603   %v = call <vscale x 8 x i32> @llvm.sadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb)
604   ret <vscale x 8 x i32> %v
607 define <vscale x 8 x i32> @sadd_nxv8i32_vi(<vscale x 8 x i32> %va) {
608 ; CHECK-LABEL: sadd_nxv8i32_vi:
609 ; CHECK:       # %bb.0:
610 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
611 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
612 ; CHECK-NEXT:    ret
613   %elt.head = insertelement <vscale x 8 x i32> poison, i32 5, i32 0
614   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
615   %v = call <vscale x 8 x i32> @llvm.sadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb)
616   ret <vscale x 8 x i32> %v
619 declare <vscale x 16 x i32> @llvm.sadd.sat.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>)
621 define <vscale x 16 x i32> @sadd_nxv16i32_vv(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b) {
622 ; CHECK-LABEL: sadd_nxv16i32_vv:
623 ; CHECK:       # %bb.0:
624 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
625 ; CHECK-NEXT:    vsadd.vv v8, v8, v16
626 ; CHECK-NEXT:    ret
627   %v = call <vscale x 16 x i32> @llvm.sadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b)
628   ret <vscale x 16 x i32> %v
631 define <vscale x 16 x i32> @sadd_nxv16i32_vx(<vscale x 16 x i32> %va, i32 %b) {
632 ; CHECK-LABEL: sadd_nxv16i32_vx:
633 ; CHECK:       # %bb.0:
634 ; CHECK-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
635 ; CHECK-NEXT:    vsadd.vx v8, v8, a0
636 ; CHECK-NEXT:    ret
637   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
638   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
639   %v = call <vscale x 16 x i32> @llvm.sadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb)
640   ret <vscale x 16 x i32> %v
643 define <vscale x 16 x i32> @sadd_nxv16i32_vi(<vscale x 16 x i32> %va) {
644 ; CHECK-LABEL: sadd_nxv16i32_vi:
645 ; CHECK:       # %bb.0:
646 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
647 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
648 ; CHECK-NEXT:    ret
649   %elt.head = insertelement <vscale x 16 x i32> poison, i32 5, i32 0
650   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
651   %v = call <vscale x 16 x i32> @llvm.sadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb)
652   ret <vscale x 16 x i32> %v
655 declare <vscale x 1 x i64> @llvm.sadd.sat.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>)
657 define <vscale x 1 x i64> @sadd_nxv1i64_vv(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b) {
658 ; CHECK-LABEL: sadd_nxv1i64_vv:
659 ; CHECK:       # %bb.0:
660 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
661 ; CHECK-NEXT:    vsadd.vv v8, v8, v9
662 ; CHECK-NEXT:    ret
663   %v = call <vscale x 1 x i64> @llvm.sadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b)
664   ret <vscale x 1 x i64> %v
667 define <vscale x 1 x i64> @sadd_nxv1i64_vx(<vscale x 1 x i64> %va, i64 %b) {
668 ; RV32-LABEL: sadd_nxv1i64_vx:
669 ; RV32:       # %bb.0:
670 ; RV32-NEXT:    addi sp, sp, -16
671 ; RV32-NEXT:    .cfi_def_cfa_offset 16
672 ; RV32-NEXT:    sw a1, 12(sp)
673 ; RV32-NEXT:    sw a0, 8(sp)
674 ; RV32-NEXT:    addi a0, sp, 8
675 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
676 ; RV32-NEXT:    vlse64.v v9, (a0), zero
677 ; RV32-NEXT:    vsadd.vv v8, v8, v9
678 ; RV32-NEXT:    addi sp, sp, 16
679 ; RV32-NEXT:    ret
681 ; RV64-LABEL: sadd_nxv1i64_vx:
682 ; RV64:       # %bb.0:
683 ; RV64-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
684 ; RV64-NEXT:    vsadd.vx v8, v8, a0
685 ; RV64-NEXT:    ret
686   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
687   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
688   %v = call <vscale x 1 x i64> @llvm.sadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb)
689   ret <vscale x 1 x i64> %v
692 define <vscale x 1 x i64> @sadd_nxv1i64_vi(<vscale x 1 x i64> %va) {
693 ; CHECK-LABEL: sadd_nxv1i64_vi:
694 ; CHECK:       # %bb.0:
695 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
696 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
697 ; CHECK-NEXT:    ret
698   %elt.head = insertelement <vscale x 1 x i64> poison, i64 5, i32 0
699   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
700   %v = call <vscale x 1 x i64> @llvm.sadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb)
701   ret <vscale x 1 x i64> %v
704 declare <vscale x 2 x i64> @llvm.sadd.sat.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
706 define <vscale x 2 x i64> @sadd_nxv2i64_vv(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b) {
707 ; CHECK-LABEL: sadd_nxv2i64_vv:
708 ; CHECK:       # %bb.0:
709 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
710 ; CHECK-NEXT:    vsadd.vv v8, v8, v10
711 ; CHECK-NEXT:    ret
712   %v = call <vscale x 2 x i64> @llvm.sadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b)
713   ret <vscale x 2 x i64> %v
716 define <vscale x 2 x i64> @sadd_nxv2i64_vx(<vscale x 2 x i64> %va, i64 %b) {
717 ; RV32-LABEL: sadd_nxv2i64_vx:
718 ; RV32:       # %bb.0:
719 ; RV32-NEXT:    addi sp, sp, -16
720 ; RV32-NEXT:    .cfi_def_cfa_offset 16
721 ; RV32-NEXT:    sw a1, 12(sp)
722 ; RV32-NEXT:    sw a0, 8(sp)
723 ; RV32-NEXT:    addi a0, sp, 8
724 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
725 ; RV32-NEXT:    vlse64.v v10, (a0), zero
726 ; RV32-NEXT:    vsadd.vv v8, v8, v10
727 ; RV32-NEXT:    addi sp, sp, 16
728 ; RV32-NEXT:    ret
730 ; RV64-LABEL: sadd_nxv2i64_vx:
731 ; RV64:       # %bb.0:
732 ; RV64-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
733 ; RV64-NEXT:    vsadd.vx v8, v8, a0
734 ; RV64-NEXT:    ret
735   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
736   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
737   %v = call <vscale x 2 x i64> @llvm.sadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb)
738   ret <vscale x 2 x i64> %v
741 define <vscale x 2 x i64> @sadd_nxv2i64_vi(<vscale x 2 x i64> %va) {
742 ; CHECK-LABEL: sadd_nxv2i64_vi:
743 ; CHECK:       # %bb.0:
744 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
745 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
746 ; CHECK-NEXT:    ret
747   %elt.head = insertelement <vscale x 2 x i64> poison, i64 5, i32 0
748   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
749   %v = call <vscale x 2 x i64> @llvm.sadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb)
750   ret <vscale x 2 x i64> %v
753 declare <vscale x 4 x i64> @llvm.sadd.sat.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>)
755 define <vscale x 4 x i64> @sadd_nxv4i64_vv(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b) {
756 ; CHECK-LABEL: sadd_nxv4i64_vv:
757 ; CHECK:       # %bb.0:
758 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
759 ; CHECK-NEXT:    vsadd.vv v8, v8, v12
760 ; CHECK-NEXT:    ret
761   %v = call <vscale x 4 x i64> @llvm.sadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b)
762   ret <vscale x 4 x i64> %v
765 define <vscale x 4 x i64> @sadd_nxv4i64_vx(<vscale x 4 x i64> %va, i64 %b) {
766 ; RV32-LABEL: sadd_nxv4i64_vx:
767 ; RV32:       # %bb.0:
768 ; RV32-NEXT:    addi sp, sp, -16
769 ; RV32-NEXT:    .cfi_def_cfa_offset 16
770 ; RV32-NEXT:    sw a1, 12(sp)
771 ; RV32-NEXT:    sw a0, 8(sp)
772 ; RV32-NEXT:    addi a0, sp, 8
773 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
774 ; RV32-NEXT:    vlse64.v v12, (a0), zero
775 ; RV32-NEXT:    vsadd.vv v8, v8, v12
776 ; RV32-NEXT:    addi sp, sp, 16
777 ; RV32-NEXT:    ret
779 ; RV64-LABEL: sadd_nxv4i64_vx:
780 ; RV64:       # %bb.0:
781 ; RV64-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
782 ; RV64-NEXT:    vsadd.vx v8, v8, a0
783 ; RV64-NEXT:    ret
784   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
785   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
786   %v = call <vscale x 4 x i64> @llvm.sadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb)
787   ret <vscale x 4 x i64> %v
790 define <vscale x 4 x i64> @sadd_nxv4i64_vi(<vscale x 4 x i64> %va) {
791 ; CHECK-LABEL: sadd_nxv4i64_vi:
792 ; CHECK:       # %bb.0:
793 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
794 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
795 ; CHECK-NEXT:    ret
796   %elt.head = insertelement <vscale x 4 x i64> poison, i64 5, i32 0
797   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
798   %v = call <vscale x 4 x i64> @llvm.sadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb)
799   ret <vscale x 4 x i64> %v
802 declare <vscale x 8 x i64> @llvm.sadd.sat.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>)
804 define <vscale x 8 x i64> @sadd_nxv8i64_vv(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b) {
805 ; CHECK-LABEL: sadd_nxv8i64_vv:
806 ; CHECK:       # %bb.0:
807 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
808 ; CHECK-NEXT:    vsadd.vv v8, v8, v16
809 ; CHECK-NEXT:    ret
810   %v = call <vscale x 8 x i64> @llvm.sadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b)
811   ret <vscale x 8 x i64> %v
814 define <vscale x 8 x i64> @sadd_nxv8i64_vx(<vscale x 8 x i64> %va, i64 %b) {
815 ; RV32-LABEL: sadd_nxv8i64_vx:
816 ; RV32:       # %bb.0:
817 ; RV32-NEXT:    addi sp, sp, -16
818 ; RV32-NEXT:    .cfi_def_cfa_offset 16
819 ; RV32-NEXT:    sw a1, 12(sp)
820 ; RV32-NEXT:    sw a0, 8(sp)
821 ; RV32-NEXT:    addi a0, sp, 8
822 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
823 ; RV32-NEXT:    vlse64.v v16, (a0), zero
824 ; RV32-NEXT:    vsadd.vv v8, v8, v16
825 ; RV32-NEXT:    addi sp, sp, 16
826 ; RV32-NEXT:    ret
828 ; RV64-LABEL: sadd_nxv8i64_vx:
829 ; RV64:       # %bb.0:
830 ; RV64-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
831 ; RV64-NEXT:    vsadd.vx v8, v8, a0
832 ; RV64-NEXT:    ret
833   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
834   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
835   %v = call <vscale x 8 x i64> @llvm.sadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb)
836   ret <vscale x 8 x i64> %v
839 define <vscale x 8 x i64> @sadd_nxv8i64_vi(<vscale x 8 x i64> %va) {
840 ; CHECK-LABEL: sadd_nxv8i64_vi:
841 ; CHECK:       # %bb.0:
842 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
843 ; CHECK-NEXT:    vsadd.vi v8, v8, 5
844 ; CHECK-NEXT:    ret
845   %elt.head = insertelement <vscale x 8 x i64> poison, i64 5, i32 0
846   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
847   %v = call <vscale x 8 x i64> @llvm.sadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb)
848   ret <vscale x 8 x i64> %v