xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vsadd-vp.ll (revision b6c0f1bfa79a3a32d841ac5ab1f94c3aee3b5d90)
1850dde06SYeting Kuo; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2850dde06SYeting Kuo; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3850dde06SYeting Kuo; RUN:   | FileCheck %s --check-prefixes=CHECK,RV32
4850dde06SYeting Kuo; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5850dde06SYeting Kuo; RUN:   | FileCheck %s --check-prefixes=CHECK,RV64
6850dde06SYeting Kuo
7850dde06SYeting Kuodeclare <8 x i7> @llvm.vp.sadd.sat.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32)
8850dde06SYeting Kuo
9850dde06SYeting Kuodefine <8 x i7> @vsadd_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) {
10850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i7:
11850dde06SYeting Kuo; CHECK:       # %bb.0:
12850dde06SYeting Kuo; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
13850dde06SYeting Kuo; CHECK-NEXT:    vadd.vv v9, v9, v9
14850dde06SYeting Kuo; CHECK-NEXT:    vadd.vv v8, v8, v8
159122c523SPengcheng Wang; CHECK-NEXT:    li a1, 63
169122c523SPengcheng Wang; CHECK-NEXT:    vsra.vi v9, v9, 1
17850dde06SYeting Kuo; CHECK-NEXT:    vsra.vi v8, v8, 1
18850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
19850dde06SYeting Kuo; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t
209122c523SPengcheng Wang; CHECK-NEXT:    vmin.vx v8, v8, a1, v0.t
21850dde06SYeting Kuo; CHECK-NEXT:    li a0, 192
22850dde06SYeting Kuo; CHECK-NEXT:    vmax.vx v8, v8, a0, v0.t
23850dde06SYeting Kuo; CHECK-NEXT:    ret
24850dde06SYeting Kuo  %v = call <8 x i7> @llvm.vp.sadd.sat.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
25850dde06SYeting Kuo  ret <8 x i7> %v
26850dde06SYeting Kuo}
27850dde06SYeting Kuo
28850dde06SYeting Kuodeclare <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
29850dde06SYeting Kuo
30850dde06SYeting Kuodefine <2 x i8> @vsadd_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
31850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i8:
32850dde06SYeting Kuo; CHECK:       # %bb.0:
33850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
34850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
35850dde06SYeting Kuo; CHECK-NEXT:    ret
36850dde06SYeting Kuo  %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
37850dde06SYeting Kuo  ret <2 x i8> %v
38850dde06SYeting Kuo}
39850dde06SYeting Kuo
40850dde06SYeting Kuodefine <2 x i8> @vsadd_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
41850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i8_unmasked:
42850dde06SYeting Kuo; CHECK:       # %bb.0:
43850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
44850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
45850dde06SYeting Kuo; CHECK-NEXT:    ret
46d8d131dfSLuke Lau  %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> splat (i1 true), i32 %evl)
47850dde06SYeting Kuo  ret <2 x i8> %v
48850dde06SYeting Kuo}
49850dde06SYeting Kuo
50850dde06SYeting Kuodefine <2 x i8> @vsadd_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
51850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i8:
52850dde06SYeting Kuo; CHECK:       # %bb.0:
53850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
54850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
55850dde06SYeting Kuo; CHECK-NEXT:    ret
56850dde06SYeting Kuo  %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
57850dde06SYeting Kuo  %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
58850dde06SYeting Kuo  %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
59850dde06SYeting Kuo  ret <2 x i8> %v
60850dde06SYeting Kuo}
61850dde06SYeting Kuo
62850dde06SYeting Kuodefine <2 x i8> @vsadd_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
63850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i8_unmasked:
64850dde06SYeting Kuo; CHECK:       # %bb.0:
65850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
66850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
67850dde06SYeting Kuo; CHECK-NEXT:    ret
68850dde06SYeting Kuo  %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
69850dde06SYeting Kuo  %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
70d8d131dfSLuke Lau  %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> splat (i1 true), i32 %evl)
71850dde06SYeting Kuo  ret <2 x i8> %v
72850dde06SYeting Kuo}
73850dde06SYeting Kuo
74850dde06SYeting Kuodefine <2 x i8> @vsadd_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
75850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i8:
76850dde06SYeting Kuo; CHECK:       # %bb.0:
77850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
78850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
79850dde06SYeting Kuo; CHECK-NEXT:    ret
80d8d131dfSLuke Lau  %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> splat (i8 -1), <2 x i1> %m, i32 %evl)
81850dde06SYeting Kuo  ret <2 x i8> %v
82850dde06SYeting Kuo}
83850dde06SYeting Kuo
84850dde06SYeting Kuodefine <2 x i8> @vsadd_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
85850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i8_unmasked:
86850dde06SYeting Kuo; CHECK:       # %bb.0:
87850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
88850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
89850dde06SYeting Kuo; CHECK-NEXT:    ret
90d8d131dfSLuke Lau  %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> splat (i8 -1), <2 x i1> splat (i1 true), i32 %evl)
91850dde06SYeting Kuo  ret <2 x i8> %v
92850dde06SYeting Kuo}
93850dde06SYeting Kuo
94850dde06SYeting Kuodeclare <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
95850dde06SYeting Kuo
96850dde06SYeting Kuodefine <4 x i8> @vsadd_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
97850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i8:
98850dde06SYeting Kuo; CHECK:       # %bb.0:
99850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
100850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
101850dde06SYeting Kuo; CHECK-NEXT:    ret
102850dde06SYeting Kuo  %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
103850dde06SYeting Kuo  ret <4 x i8> %v
104850dde06SYeting Kuo}
105850dde06SYeting Kuo
106850dde06SYeting Kuodefine <4 x i8> @vsadd_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
107850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i8_unmasked:
108850dde06SYeting Kuo; CHECK:       # %bb.0:
109850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
110850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
111850dde06SYeting Kuo; CHECK-NEXT:    ret
112d8d131dfSLuke Lau  %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> splat (i1 true), i32 %evl)
113850dde06SYeting Kuo  ret <4 x i8> %v
114850dde06SYeting Kuo}
115850dde06SYeting Kuo
116850dde06SYeting Kuodefine <4 x i8> @vsadd_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
117850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i8:
118850dde06SYeting Kuo; CHECK:       # %bb.0:
119850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
120850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
121850dde06SYeting Kuo; CHECK-NEXT:    ret
122850dde06SYeting Kuo  %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
123850dde06SYeting Kuo  %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
124850dde06SYeting Kuo  %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
125850dde06SYeting Kuo  ret <4 x i8> %v
126850dde06SYeting Kuo}
127850dde06SYeting Kuo
128850dde06SYeting Kuodefine <4 x i8> @vsadd_vx_v4i8_commute(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
129850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i8_commute:
130850dde06SYeting Kuo; CHECK:       # %bb.0:
131850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
132850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
133850dde06SYeting Kuo; CHECK-NEXT:    ret
134850dde06SYeting Kuo  %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
135850dde06SYeting Kuo  %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
136850dde06SYeting Kuo  %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %vb, <4 x i8> %va, <4 x i1> %m, i32 %evl)
137850dde06SYeting Kuo  ret <4 x i8> %v
138850dde06SYeting Kuo}
139850dde06SYeting Kuo
140850dde06SYeting Kuodefine <4 x i8> @vsadd_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
141850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i8_unmasked:
142850dde06SYeting Kuo; CHECK:       # %bb.0:
143850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
144850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
145850dde06SYeting Kuo; CHECK-NEXT:    ret
146850dde06SYeting Kuo  %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
147850dde06SYeting Kuo  %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
148d8d131dfSLuke Lau  %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> splat (i1 true), i32 %evl)
149850dde06SYeting Kuo  ret <4 x i8> %v
150850dde06SYeting Kuo}
151850dde06SYeting Kuo
152850dde06SYeting Kuodefine <4 x i8> @vsadd_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
153850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i8:
154850dde06SYeting Kuo; CHECK:       # %bb.0:
155850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
156850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
157850dde06SYeting Kuo; CHECK-NEXT:    ret
158d8d131dfSLuke Lau  %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> splat (i8 -1), <4 x i1> %m, i32 %evl)
159850dde06SYeting Kuo  ret <4 x i8> %v
160850dde06SYeting Kuo}
161850dde06SYeting Kuo
162850dde06SYeting Kuodefine <4 x i8> @vsadd_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
163850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i8_unmasked:
164850dde06SYeting Kuo; CHECK:       # %bb.0:
165850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
166850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
167850dde06SYeting Kuo; CHECK-NEXT:    ret
168d8d131dfSLuke Lau  %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> splat (i8 -1), <4 x i1> splat (i1 true), i32 %evl)
169850dde06SYeting Kuo  ret <4 x i8> %v
170850dde06SYeting Kuo}
171850dde06SYeting Kuo
172850dde06SYeting Kuodeclare <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8>, <5 x i8>, <5 x i1>, i32)
173850dde06SYeting Kuo
174850dde06SYeting Kuodefine <5 x i8> @vsadd_vv_v5i8(<5 x i8> %va, <5 x i8> %b, <5 x i1> %m, i32 zeroext %evl) {
175850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v5i8:
176850dde06SYeting Kuo; CHECK:       # %bb.0:
177850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
178850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
179850dde06SYeting Kuo; CHECK-NEXT:    ret
180850dde06SYeting Kuo  %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> %b, <5 x i1> %m, i32 %evl)
181850dde06SYeting Kuo  ret <5 x i8> %v
182850dde06SYeting Kuo}
183850dde06SYeting Kuo
184850dde06SYeting Kuodefine <5 x i8> @vsadd_vv_v5i8_unmasked(<5 x i8> %va, <5 x i8> %b, i32 zeroext %evl) {
185850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v5i8_unmasked:
186850dde06SYeting Kuo; CHECK:       # %bb.0:
187850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
188850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
189850dde06SYeting Kuo; CHECK-NEXT:    ret
190d8d131dfSLuke Lau  %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> %b, <5 x i1> splat (i1 true), i32 %evl)
191850dde06SYeting Kuo  ret <5 x i8> %v
192850dde06SYeting Kuo}
193850dde06SYeting Kuo
194850dde06SYeting Kuodefine <5 x i8> @vsadd_vx_v5i8(<5 x i8> %va, i8 %b, <5 x i1> %m, i32 zeroext %evl) {
195850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v5i8:
196850dde06SYeting Kuo; CHECK:       # %bb.0:
197850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
198850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
199850dde06SYeting Kuo; CHECK-NEXT:    ret
200850dde06SYeting Kuo  %elt.head = insertelement <5 x i8> poison, i8 %b, i32 0
201850dde06SYeting Kuo  %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer
202850dde06SYeting Kuo  %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> %vb, <5 x i1> %m, i32 %evl)
203850dde06SYeting Kuo  ret <5 x i8> %v
204850dde06SYeting Kuo}
205850dde06SYeting Kuo
206850dde06SYeting Kuodefine <5 x i8> @vsadd_vx_v5i8_unmasked(<5 x i8> %va, i8 %b, i32 zeroext %evl) {
207850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v5i8_unmasked:
208850dde06SYeting Kuo; CHECK:       # %bb.0:
209850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
210850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
211850dde06SYeting Kuo; CHECK-NEXT:    ret
212850dde06SYeting Kuo  %elt.head = insertelement <5 x i8> poison, i8 %b, i32 0
213850dde06SYeting Kuo  %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer
214d8d131dfSLuke Lau  %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> %vb, <5 x i1> splat (i1 true), i32 %evl)
215850dde06SYeting Kuo  ret <5 x i8> %v
216850dde06SYeting Kuo}
217850dde06SYeting Kuo
218850dde06SYeting Kuodefine <5 x i8> @vsadd_vi_v5i8(<5 x i8> %va, <5 x i1> %m, i32 zeroext %evl) {
219850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v5i8:
220850dde06SYeting Kuo; CHECK:       # %bb.0:
221850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
222850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
223850dde06SYeting Kuo; CHECK-NEXT:    ret
224d8d131dfSLuke Lau  %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> splat (i8 -1), <5 x i1> %m, i32 %evl)
225850dde06SYeting Kuo  ret <5 x i8> %v
226850dde06SYeting Kuo}
227850dde06SYeting Kuo
228850dde06SYeting Kuodefine <5 x i8> @vsadd_vi_v5i8_unmasked(<5 x i8> %va, i32 zeroext %evl) {
229850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v5i8_unmasked:
230850dde06SYeting Kuo; CHECK:       # %bb.0:
231850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
232850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
233850dde06SYeting Kuo; CHECK-NEXT:    ret
234d8d131dfSLuke Lau  %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> splat (i8 -1), <5 x i1> splat (i1 true), i32 %evl)
235850dde06SYeting Kuo  ret <5 x i8> %v
236850dde06SYeting Kuo}
237850dde06SYeting Kuo
238850dde06SYeting Kuodeclare <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
239850dde06SYeting Kuo
240850dde06SYeting Kuodefine <8 x i8> @vsadd_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
241850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i8:
242850dde06SYeting Kuo; CHECK:       # %bb.0:
243850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
244850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
245850dde06SYeting Kuo; CHECK-NEXT:    ret
246850dde06SYeting Kuo  %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
247850dde06SYeting Kuo  ret <8 x i8> %v
248850dde06SYeting Kuo}
249850dde06SYeting Kuo
250850dde06SYeting Kuodefine <8 x i8> @vsadd_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
251850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i8_unmasked:
252850dde06SYeting Kuo; CHECK:       # %bb.0:
253850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
254850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
255850dde06SYeting Kuo; CHECK-NEXT:    ret
256d8d131dfSLuke Lau  %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 %evl)
257850dde06SYeting Kuo  ret <8 x i8> %v
258850dde06SYeting Kuo}
259850dde06SYeting Kuo
260850dde06SYeting Kuodefine <8 x i8> @vsadd_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
261850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i8:
262850dde06SYeting Kuo; CHECK:       # %bb.0:
263850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
264850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
265850dde06SYeting Kuo; CHECK-NEXT:    ret
266850dde06SYeting Kuo  %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
267850dde06SYeting Kuo  %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
268850dde06SYeting Kuo  %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
269850dde06SYeting Kuo  ret <8 x i8> %v
270850dde06SYeting Kuo}
271850dde06SYeting Kuo
272850dde06SYeting Kuodefine <8 x i8> @vsadd_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
273850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i8_unmasked:
274850dde06SYeting Kuo; CHECK:       # %bb.0:
275850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
276850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
277850dde06SYeting Kuo; CHECK-NEXT:    ret
278850dde06SYeting Kuo  %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
279850dde06SYeting Kuo  %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
280d8d131dfSLuke Lau  %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> splat (i1 true), i32 %evl)
281850dde06SYeting Kuo  ret <8 x i8> %v
282850dde06SYeting Kuo}
283850dde06SYeting Kuo
284850dde06SYeting Kuodefine <8 x i8> @vsadd_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
285850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i8:
286850dde06SYeting Kuo; CHECK:       # %bb.0:
287850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
288850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
289850dde06SYeting Kuo; CHECK-NEXT:    ret
290d8d131dfSLuke Lau  %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> splat (i8 -1), <8 x i1> %m, i32 %evl)
291850dde06SYeting Kuo  ret <8 x i8> %v
292850dde06SYeting Kuo}
293850dde06SYeting Kuo
294850dde06SYeting Kuodefine <8 x i8> @vsadd_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
295850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i8_unmasked:
296850dde06SYeting Kuo; CHECK:       # %bb.0:
297850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
298850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
299850dde06SYeting Kuo; CHECK-NEXT:    ret
300d8d131dfSLuke Lau  %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> splat (i8 -1), <8 x i1> splat (i1 true), i32 %evl)
301850dde06SYeting Kuo  ret <8 x i8> %v
302850dde06SYeting Kuo}
303850dde06SYeting Kuo
304850dde06SYeting Kuodeclare <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
305850dde06SYeting Kuo
306850dde06SYeting Kuodefine <16 x i8> @vsadd_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
307850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i8:
308850dde06SYeting Kuo; CHECK:       # %bb.0:
309850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
310850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
311850dde06SYeting Kuo; CHECK-NEXT:    ret
312850dde06SYeting Kuo  %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
313850dde06SYeting Kuo  ret <16 x i8> %v
314850dde06SYeting Kuo}
315850dde06SYeting Kuo
316850dde06SYeting Kuodefine <16 x i8> @vsadd_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
317850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i8_unmasked:
318850dde06SYeting Kuo; CHECK:       # %bb.0:
319850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
320850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
321850dde06SYeting Kuo; CHECK-NEXT:    ret
322d8d131dfSLuke Lau  %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> splat (i1 true), i32 %evl)
323850dde06SYeting Kuo  ret <16 x i8> %v
324850dde06SYeting Kuo}
325850dde06SYeting Kuo
326850dde06SYeting Kuodefine <16 x i8> @vsadd_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
327850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i8:
328850dde06SYeting Kuo; CHECK:       # %bb.0:
329850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
330850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
331850dde06SYeting Kuo; CHECK-NEXT:    ret
332850dde06SYeting Kuo  %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
333850dde06SYeting Kuo  %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
334850dde06SYeting Kuo  %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
335850dde06SYeting Kuo  ret <16 x i8> %v
336850dde06SYeting Kuo}
337850dde06SYeting Kuo
338850dde06SYeting Kuodefine <16 x i8> @vsadd_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
339850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i8_unmasked:
340850dde06SYeting Kuo; CHECK:       # %bb.0:
341850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
342850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
343850dde06SYeting Kuo; CHECK-NEXT:    ret
344850dde06SYeting Kuo  %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
345850dde06SYeting Kuo  %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
346d8d131dfSLuke Lau  %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> splat (i1 true), i32 %evl)
347850dde06SYeting Kuo  ret <16 x i8> %v
348850dde06SYeting Kuo}
349850dde06SYeting Kuo
350850dde06SYeting Kuodefine <16 x i8> @vsadd_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
351850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i8:
352850dde06SYeting Kuo; CHECK:       # %bb.0:
353850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
354850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
355850dde06SYeting Kuo; CHECK-NEXT:    ret
356d8d131dfSLuke Lau  %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> splat (i8 -1), <16 x i1> %m, i32 %evl)
357850dde06SYeting Kuo  ret <16 x i8> %v
358850dde06SYeting Kuo}
359850dde06SYeting Kuo
360850dde06SYeting Kuodefine <16 x i8> @vsadd_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
361850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i8_unmasked:
362850dde06SYeting Kuo; CHECK:       # %bb.0:
363850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
364850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
365850dde06SYeting Kuo; CHECK-NEXT:    ret
366d8d131dfSLuke Lau  %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> splat (i8 -1), <16 x i1> splat (i1 true), i32 %evl)
367850dde06SYeting Kuo  ret <16 x i8> %v
368850dde06SYeting Kuo}
369850dde06SYeting Kuo
370850dde06SYeting Kuodeclare <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8>, <256 x i8>, <256 x i1>, i32)
371850dde06SYeting Kuo
372850dde06SYeting Kuodefine <256 x i8> @vsadd_vi_v258i8(<256 x i8> %va, <256 x i1> %m, i32 zeroext %evl) {
373850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v258i8:
374850dde06SYeting Kuo; CHECK:       # %bb.0:
375*b6c0f1bfSLuke Lau; CHECK-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
376850dde06SYeting Kuo; CHECK-NEXT:    vmv1r.v v24, v0
377850dde06SYeting Kuo; CHECK-NEXT:    li a2, 128
378850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a2, e8, m8, ta, ma
379850dde06SYeting Kuo; CHECK-NEXT:    vlm.v v0, (a0)
380850dde06SYeting Kuo; CHECK-NEXT:    addi a0, a1, -128
381850dde06SYeting Kuo; CHECK-NEXT:    sltu a3, a1, a0
382850dde06SYeting Kuo; CHECK-NEXT:    addi a3, a3, -1
383850dde06SYeting Kuo; CHECK-NEXT:    and a0, a3, a0
384850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
385850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v16, v16, -1, v0.t
386850dde06SYeting Kuo; CHECK-NEXT:    bltu a1, a2, .LBB32_2
387850dde06SYeting Kuo; CHECK-NEXT:  # %bb.1:
388850dde06SYeting Kuo; CHECK-NEXT:    li a1, 128
389850dde06SYeting Kuo; CHECK-NEXT:  .LBB32_2:
390850dde06SYeting Kuo; CHECK-NEXT:    vmv1r.v v0, v24
391675e7bd1SPiyou Chen; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
392850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
393850dde06SYeting Kuo; CHECK-NEXT:    ret
394d8d131dfSLuke Lau  %v = call <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> %m, i32 %evl)
395850dde06SYeting Kuo  ret <256 x i8> %v
396850dde06SYeting Kuo}
397850dde06SYeting Kuo
398850dde06SYeting Kuodefine <256 x i8> @vsadd_vi_v258i8_unmasked(<256 x i8> %va, i32 zeroext %evl) {
399850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v258i8_unmasked:
400850dde06SYeting Kuo; CHECK:       # %bb.0:
401850dde06SYeting Kuo; CHECK-NEXT:    li a2, 128
402850dde06SYeting Kuo; CHECK-NEXT:    mv a1, a0
403850dde06SYeting Kuo; CHECK-NEXT:    bltu a0, a2, .LBB33_2
404850dde06SYeting Kuo; CHECK-NEXT:  # %bb.1:
405850dde06SYeting Kuo; CHECK-NEXT:    li a1, 128
406850dde06SYeting Kuo; CHECK-NEXT:  .LBB33_2:
407850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
408850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
409850dde06SYeting Kuo; CHECK-NEXT:    addi a1, a0, -128
410850dde06SYeting Kuo; CHECK-NEXT:    sltu a0, a0, a1
411850dde06SYeting Kuo; CHECK-NEXT:    addi a0, a0, -1
412850dde06SYeting Kuo; CHECK-NEXT:    and a0, a0, a1
413850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
414850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v16, v16, -1
415850dde06SYeting Kuo; CHECK-NEXT:    ret
416d8d131dfSLuke Lau  %v = call <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> splat (i1 true), i32 %evl)
417850dde06SYeting Kuo  ret <256 x i8> %v
418850dde06SYeting Kuo}
419850dde06SYeting Kuo
420850dde06SYeting Kuo; Test splitting when the %evl is a known constant.
421850dde06SYeting Kuo
422850dde06SYeting Kuodefine <256 x i8> @vsadd_vi_v258i8_evl129(<256 x i8> %va, <256 x i1> %m) {
423850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v258i8_evl129:
424850dde06SYeting Kuo; CHECK:       # %bb.0:
425850dde06SYeting Kuo; CHECK-NEXT:    li a1, 128
426850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
427850dde06SYeting Kuo; CHECK-NEXT:    vlm.v v24, (a0)
428850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
429850dde06SYeting Kuo; CHECK-NEXT:    vmv1r.v v0, v24
430675e7bd1SPiyou Chen; CHECK-NEXT:    vsetivli zero, 1, e8, m8, ta, ma
431850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v16, v16, -1, v0.t
432850dde06SYeting Kuo; CHECK-NEXT:    ret
433d8d131dfSLuke Lau  %v = call <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> %m, i32 129)
434850dde06SYeting Kuo  ret <256 x i8> %v
435850dde06SYeting Kuo}
436850dde06SYeting Kuo
437850dde06SYeting Kuo; FIXME: The upper half is doing nothing.
438850dde06SYeting Kuo
439850dde06SYeting Kuodefine <256 x i8> @vsadd_vi_v258i8_evl128(<256 x i8> %va, <256 x i1> %m) {
440850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v258i8_evl128:
441850dde06SYeting Kuo; CHECK:       # %bb.0:
442850dde06SYeting Kuo; CHECK-NEXT:    li a1, 128
443850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
444850dde06SYeting Kuo; CHECK-NEXT:    vlm.v v24, (a0)
445850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
446850dde06SYeting Kuo; CHECK-NEXT:    vmv1r.v v0, v24
447675e7bd1SPiyou Chen; CHECK-NEXT:    vsetivli zero, 0, e8, m8, ta, ma
448850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v16, v16, -1, v0.t
449850dde06SYeting Kuo; CHECK-NEXT:    ret
450d8d131dfSLuke Lau  %v = call <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> %m, i32 128)
451850dde06SYeting Kuo  ret <256 x i8> %v
452850dde06SYeting Kuo}
453850dde06SYeting Kuo
454850dde06SYeting Kuodeclare <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
455850dde06SYeting Kuo
456850dde06SYeting Kuodefine <2 x i16> @vsadd_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
457850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i16:
458850dde06SYeting Kuo; CHECK:       # %bb.0:
459850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
460850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
461850dde06SYeting Kuo; CHECK-NEXT:    ret
462850dde06SYeting Kuo  %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
463850dde06SYeting Kuo  ret <2 x i16> %v
464850dde06SYeting Kuo}
465850dde06SYeting Kuo
466850dde06SYeting Kuodefine <2 x i16> @vsadd_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
467850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i16_unmasked:
468850dde06SYeting Kuo; CHECK:       # %bb.0:
469850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
470850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
471850dde06SYeting Kuo; CHECK-NEXT:    ret
472d8d131dfSLuke Lau  %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> splat (i1 true), i32 %evl)
473850dde06SYeting Kuo  ret <2 x i16> %v
474850dde06SYeting Kuo}
475850dde06SYeting Kuo
476850dde06SYeting Kuodefine <2 x i16> @vsadd_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
477850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i16:
478850dde06SYeting Kuo; CHECK:       # %bb.0:
479850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
480850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
481850dde06SYeting Kuo; CHECK-NEXT:    ret
482850dde06SYeting Kuo  %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
483850dde06SYeting Kuo  %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
484850dde06SYeting Kuo  %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
485850dde06SYeting Kuo  ret <2 x i16> %v
486850dde06SYeting Kuo}
487850dde06SYeting Kuo
488850dde06SYeting Kuodefine <2 x i16> @vsadd_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
489850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i16_unmasked:
490850dde06SYeting Kuo; CHECK:       # %bb.0:
491850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
492850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
493850dde06SYeting Kuo; CHECK-NEXT:    ret
494850dde06SYeting Kuo  %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
495850dde06SYeting Kuo  %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
496d8d131dfSLuke Lau  %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> splat (i1 true), i32 %evl)
497850dde06SYeting Kuo  ret <2 x i16> %v
498850dde06SYeting Kuo}
499850dde06SYeting Kuo
500850dde06SYeting Kuodefine <2 x i16> @vsadd_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
501850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i16:
502850dde06SYeting Kuo; CHECK:       # %bb.0:
503850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
504850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
505850dde06SYeting Kuo; CHECK-NEXT:    ret
506d8d131dfSLuke Lau  %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> splat (i16 -1), <2 x i1> %m, i32 %evl)
507850dde06SYeting Kuo  ret <2 x i16> %v
508850dde06SYeting Kuo}
509850dde06SYeting Kuo
510850dde06SYeting Kuodefine <2 x i16> @vsadd_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
511850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i16_unmasked:
512850dde06SYeting Kuo; CHECK:       # %bb.0:
513850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
514850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
515850dde06SYeting Kuo; CHECK-NEXT:    ret
516d8d131dfSLuke Lau  %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> splat (i16 -1), <2 x i1> splat (i1 true), i32 %evl)
517850dde06SYeting Kuo  ret <2 x i16> %v
518850dde06SYeting Kuo}
519850dde06SYeting Kuo
520850dde06SYeting Kuodeclare <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
521850dde06SYeting Kuo
522850dde06SYeting Kuodefine <4 x i16> @vsadd_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
523850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i16:
524850dde06SYeting Kuo; CHECK:       # %bb.0:
525850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
526850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
527850dde06SYeting Kuo; CHECK-NEXT:    ret
528850dde06SYeting Kuo  %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
529850dde06SYeting Kuo  ret <4 x i16> %v
530850dde06SYeting Kuo}
531850dde06SYeting Kuo
532850dde06SYeting Kuodefine <4 x i16> @vsadd_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
533850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i16_unmasked:
534850dde06SYeting Kuo; CHECK:       # %bb.0:
535850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
536850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
537850dde06SYeting Kuo; CHECK-NEXT:    ret
538d8d131dfSLuke Lau  %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> splat (i1 true), i32 %evl)
539850dde06SYeting Kuo  ret <4 x i16> %v
540850dde06SYeting Kuo}
541850dde06SYeting Kuo
542850dde06SYeting Kuodefine <4 x i16> @vsadd_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
543850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i16:
544850dde06SYeting Kuo; CHECK:       # %bb.0:
545850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
546850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
547850dde06SYeting Kuo; CHECK-NEXT:    ret
548850dde06SYeting Kuo  %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
549850dde06SYeting Kuo  %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
550850dde06SYeting Kuo  %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
551850dde06SYeting Kuo  ret <4 x i16> %v
552850dde06SYeting Kuo}
553850dde06SYeting Kuo
554850dde06SYeting Kuodefine <4 x i16> @vsadd_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
555850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i16_unmasked:
556850dde06SYeting Kuo; CHECK:       # %bb.0:
557850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
558850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
559850dde06SYeting Kuo; CHECK-NEXT:    ret
560850dde06SYeting Kuo  %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
561850dde06SYeting Kuo  %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
562d8d131dfSLuke Lau  %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> splat (i1 true), i32 %evl)
563850dde06SYeting Kuo  ret <4 x i16> %v
564850dde06SYeting Kuo}
565850dde06SYeting Kuo
566850dde06SYeting Kuodefine <4 x i16> @vsadd_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
567850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i16:
568850dde06SYeting Kuo; CHECK:       # %bb.0:
569850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
570850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
571850dde06SYeting Kuo; CHECK-NEXT:    ret
572d8d131dfSLuke Lau  %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> splat (i16 -1), <4 x i1> %m, i32 %evl)
573850dde06SYeting Kuo  ret <4 x i16> %v
574850dde06SYeting Kuo}
575850dde06SYeting Kuo
576850dde06SYeting Kuodefine <4 x i16> @vsadd_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
577850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i16_unmasked:
578850dde06SYeting Kuo; CHECK:       # %bb.0:
579850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
580850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
581850dde06SYeting Kuo; CHECK-NEXT:    ret
582d8d131dfSLuke Lau  %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> splat (i16 -1), <4 x i1> splat (i1 true), i32 %evl)
583850dde06SYeting Kuo  ret <4 x i16> %v
584850dde06SYeting Kuo}
585850dde06SYeting Kuo
586850dde06SYeting Kuodeclare <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
587850dde06SYeting Kuo
588850dde06SYeting Kuodefine <8 x i16> @vsadd_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
589850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i16:
590850dde06SYeting Kuo; CHECK:       # %bb.0:
591850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
592850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
593850dde06SYeting Kuo; CHECK-NEXT:    ret
594850dde06SYeting Kuo  %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
595850dde06SYeting Kuo  ret <8 x i16> %v
596850dde06SYeting Kuo}
597850dde06SYeting Kuo
598850dde06SYeting Kuodefine <8 x i16> @vsadd_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
599850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i16_unmasked:
600850dde06SYeting Kuo; CHECK:       # %bb.0:
601850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
602850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
603850dde06SYeting Kuo; CHECK-NEXT:    ret
604d8d131dfSLuke Lau  %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> splat (i1 true), i32 %evl)
605850dde06SYeting Kuo  ret <8 x i16> %v
606850dde06SYeting Kuo}
607850dde06SYeting Kuo
608850dde06SYeting Kuodefine <8 x i16> @vsadd_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
609850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i16:
610850dde06SYeting Kuo; CHECK:       # %bb.0:
611850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
612850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
613850dde06SYeting Kuo; CHECK-NEXT:    ret
614850dde06SYeting Kuo  %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
615850dde06SYeting Kuo  %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
616850dde06SYeting Kuo  %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
617850dde06SYeting Kuo  ret <8 x i16> %v
618850dde06SYeting Kuo}
619850dde06SYeting Kuo
620850dde06SYeting Kuodefine <8 x i16> @vsadd_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
621850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i16_unmasked:
622850dde06SYeting Kuo; CHECK:       # %bb.0:
623850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
624850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
625850dde06SYeting Kuo; CHECK-NEXT:    ret
626850dde06SYeting Kuo  %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
627850dde06SYeting Kuo  %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
628d8d131dfSLuke Lau  %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> splat (i1 true), i32 %evl)
629850dde06SYeting Kuo  ret <8 x i16> %v
630850dde06SYeting Kuo}
631850dde06SYeting Kuo
632850dde06SYeting Kuodefine <8 x i16> @vsadd_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
633850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i16:
634850dde06SYeting Kuo; CHECK:       # %bb.0:
635850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
636850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
637850dde06SYeting Kuo; CHECK-NEXT:    ret
638d8d131dfSLuke Lau  %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> splat (i16 -1), <8 x i1> %m, i32 %evl)
639850dde06SYeting Kuo  ret <8 x i16> %v
640850dde06SYeting Kuo}
641850dde06SYeting Kuo
642850dde06SYeting Kuodefine <8 x i16> @vsadd_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
643850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i16_unmasked:
644850dde06SYeting Kuo; CHECK:       # %bb.0:
645850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
646850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
647850dde06SYeting Kuo; CHECK-NEXT:    ret
648d8d131dfSLuke Lau  %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> splat (i16 -1), <8 x i1> splat (i1 true), i32 %evl)
649850dde06SYeting Kuo  ret <8 x i16> %v
650850dde06SYeting Kuo}
651850dde06SYeting Kuo
652850dde06SYeting Kuodeclare <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
653850dde06SYeting Kuo
654850dde06SYeting Kuodefine <16 x i16> @vsadd_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
655850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i16:
656850dde06SYeting Kuo; CHECK:       # %bb.0:
657850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
658850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v10, v0.t
659850dde06SYeting Kuo; CHECK-NEXT:    ret
660850dde06SYeting Kuo  %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
661850dde06SYeting Kuo  ret <16 x i16> %v
662850dde06SYeting Kuo}
663850dde06SYeting Kuo
664850dde06SYeting Kuodefine <16 x i16> @vsadd_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
665850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i16_unmasked:
666850dde06SYeting Kuo; CHECK:       # %bb.0:
667850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
668850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v10
669850dde06SYeting Kuo; CHECK-NEXT:    ret
670d8d131dfSLuke Lau  %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> splat (i1 true), i32 %evl)
671850dde06SYeting Kuo  ret <16 x i16> %v
672850dde06SYeting Kuo}
673850dde06SYeting Kuo
674850dde06SYeting Kuodefine <16 x i16> @vsadd_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
675850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i16:
676850dde06SYeting Kuo; CHECK:       # %bb.0:
677850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
678850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
679850dde06SYeting Kuo; CHECK-NEXT:    ret
680850dde06SYeting Kuo  %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
681850dde06SYeting Kuo  %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
682850dde06SYeting Kuo  %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
683850dde06SYeting Kuo  ret <16 x i16> %v
684850dde06SYeting Kuo}
685850dde06SYeting Kuo
686850dde06SYeting Kuodefine <16 x i16> @vsadd_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
687850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i16_unmasked:
688850dde06SYeting Kuo; CHECK:       # %bb.0:
689850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
690850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
691850dde06SYeting Kuo; CHECK-NEXT:    ret
692850dde06SYeting Kuo  %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
693850dde06SYeting Kuo  %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
694d8d131dfSLuke Lau  %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> splat (i1 true), i32 %evl)
695850dde06SYeting Kuo  ret <16 x i16> %v
696850dde06SYeting Kuo}
697850dde06SYeting Kuo
698850dde06SYeting Kuodefine <16 x i16> @vsadd_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
699850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i16:
700850dde06SYeting Kuo; CHECK:       # %bb.0:
701850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
702850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
703850dde06SYeting Kuo; CHECK-NEXT:    ret
704d8d131dfSLuke Lau  %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> splat (i16 -1), <16 x i1> %m, i32 %evl)
705850dde06SYeting Kuo  ret <16 x i16> %v
706850dde06SYeting Kuo}
707850dde06SYeting Kuo
708850dde06SYeting Kuodefine <16 x i16> @vsadd_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
709850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i16_unmasked:
710850dde06SYeting Kuo; CHECK:       # %bb.0:
711850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
712850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
713850dde06SYeting Kuo; CHECK-NEXT:    ret
714d8d131dfSLuke Lau  %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> splat (i16 -1), <16 x i1> splat (i1 true), i32 %evl)
715850dde06SYeting Kuo  ret <16 x i16> %v
716850dde06SYeting Kuo}
717850dde06SYeting Kuo
718850dde06SYeting Kuodeclare <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
719850dde06SYeting Kuo
720850dde06SYeting Kuodefine <2 x i32> @vsadd_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
721850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i32:
722850dde06SYeting Kuo; CHECK:       # %bb.0:
723850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
724850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
725850dde06SYeting Kuo; CHECK-NEXT:    ret
726850dde06SYeting Kuo  %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
727850dde06SYeting Kuo  ret <2 x i32> %v
728850dde06SYeting Kuo}
729850dde06SYeting Kuo
730850dde06SYeting Kuodefine <2 x i32> @vsadd_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
731850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i32_unmasked:
732850dde06SYeting Kuo; CHECK:       # %bb.0:
733850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
734850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
735850dde06SYeting Kuo; CHECK-NEXT:    ret
736d8d131dfSLuke Lau  %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> splat (i1 true), i32 %evl)
737850dde06SYeting Kuo  ret <2 x i32> %v
738850dde06SYeting Kuo}
739850dde06SYeting Kuo
740850dde06SYeting Kuodefine <2 x i32> @vsadd_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
741850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i32:
742850dde06SYeting Kuo; CHECK:       # %bb.0:
743850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
744850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
745850dde06SYeting Kuo; CHECK-NEXT:    ret
746850dde06SYeting Kuo  %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
747850dde06SYeting Kuo  %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
748850dde06SYeting Kuo  %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
749850dde06SYeting Kuo  ret <2 x i32> %v
750850dde06SYeting Kuo}
751850dde06SYeting Kuo
752850dde06SYeting Kuodefine <2 x i32> @vsadd_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
753850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i32_unmasked:
754850dde06SYeting Kuo; CHECK:       # %bb.0:
755850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
756850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
757850dde06SYeting Kuo; CHECK-NEXT:    ret
758850dde06SYeting Kuo  %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
759850dde06SYeting Kuo  %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
760d8d131dfSLuke Lau  %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> splat (i1 true), i32 %evl)
761850dde06SYeting Kuo  ret <2 x i32> %v
762850dde06SYeting Kuo}
763850dde06SYeting Kuo
764850dde06SYeting Kuodefine <2 x i32> @vsadd_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
765850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i32:
766850dde06SYeting Kuo; CHECK:       # %bb.0:
767850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
768850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
769850dde06SYeting Kuo; CHECK-NEXT:    ret
770d8d131dfSLuke Lau  %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> splat (i32 -1), <2 x i1> %m, i32 %evl)
771850dde06SYeting Kuo  ret <2 x i32> %v
772850dde06SYeting Kuo}
773850dde06SYeting Kuo
774850dde06SYeting Kuodefine <2 x i32> @vsadd_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
775850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i32_unmasked:
776850dde06SYeting Kuo; CHECK:       # %bb.0:
777850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
778850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
779850dde06SYeting Kuo; CHECK-NEXT:    ret
780d8d131dfSLuke Lau  %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> splat (i32 -1), <2 x i1> splat (i1 true), i32 %evl)
781850dde06SYeting Kuo  ret <2 x i32> %v
782850dde06SYeting Kuo}
783850dde06SYeting Kuo
784850dde06SYeting Kuodeclare <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
785850dde06SYeting Kuo
786850dde06SYeting Kuodefine <4 x i32> @vsadd_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
787850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i32:
788850dde06SYeting Kuo; CHECK:       # %bb.0:
789850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
790850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
791850dde06SYeting Kuo; CHECK-NEXT:    ret
792850dde06SYeting Kuo  %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
793850dde06SYeting Kuo  ret <4 x i32> %v
794850dde06SYeting Kuo}
795850dde06SYeting Kuo
796850dde06SYeting Kuodefine <4 x i32> @vsadd_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
797850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i32_unmasked:
798850dde06SYeting Kuo; CHECK:       # %bb.0:
799850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
800850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
801850dde06SYeting Kuo; CHECK-NEXT:    ret
802d8d131dfSLuke Lau  %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> splat (i1 true), i32 %evl)
803850dde06SYeting Kuo  ret <4 x i32> %v
804850dde06SYeting Kuo}
805850dde06SYeting Kuo
806850dde06SYeting Kuodefine <4 x i32> @vsadd_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
807850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i32:
808850dde06SYeting Kuo; CHECK:       # %bb.0:
809850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
810850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
811850dde06SYeting Kuo; CHECK-NEXT:    ret
812850dde06SYeting Kuo  %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
813850dde06SYeting Kuo  %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
814850dde06SYeting Kuo  %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
815850dde06SYeting Kuo  ret <4 x i32> %v
816850dde06SYeting Kuo}
817850dde06SYeting Kuo
818850dde06SYeting Kuodefine <4 x i32> @vsadd_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
819850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i32_unmasked:
820850dde06SYeting Kuo; CHECK:       # %bb.0:
821850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
822850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
823850dde06SYeting Kuo; CHECK-NEXT:    ret
824850dde06SYeting Kuo  %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
825850dde06SYeting Kuo  %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
826d8d131dfSLuke Lau  %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> splat (i1 true), i32 %evl)
827850dde06SYeting Kuo  ret <4 x i32> %v
828850dde06SYeting Kuo}
829850dde06SYeting Kuo
830850dde06SYeting Kuodefine <4 x i32> @vsadd_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
831850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i32:
832850dde06SYeting Kuo; CHECK:       # %bb.0:
833850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
834850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
835850dde06SYeting Kuo; CHECK-NEXT:    ret
836d8d131dfSLuke Lau  %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> splat (i32 -1), <4 x i1> %m, i32 %evl)
837850dde06SYeting Kuo  ret <4 x i32> %v
838850dde06SYeting Kuo}
839850dde06SYeting Kuo
840850dde06SYeting Kuodefine <4 x i32> @vsadd_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
841850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i32_unmasked:
842850dde06SYeting Kuo; CHECK:       # %bb.0:
843850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
844850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
845850dde06SYeting Kuo; CHECK-NEXT:    ret
846d8d131dfSLuke Lau  %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> splat (i32 -1), <4 x i1> splat (i1 true), i32 %evl)
847850dde06SYeting Kuo  ret <4 x i32> %v
848850dde06SYeting Kuo}
849850dde06SYeting Kuo
850850dde06SYeting Kuodeclare <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
851850dde06SYeting Kuo
852850dde06SYeting Kuodefine <8 x i32> @vsadd_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
853850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i32:
854850dde06SYeting Kuo; CHECK:       # %bb.0:
855850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
856850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v10, v0.t
857850dde06SYeting Kuo; CHECK-NEXT:    ret
858850dde06SYeting Kuo  %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
859850dde06SYeting Kuo  ret <8 x i32> %v
860850dde06SYeting Kuo}
861850dde06SYeting Kuo
862850dde06SYeting Kuodefine <8 x i32> @vsadd_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
863850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i32_unmasked:
864850dde06SYeting Kuo; CHECK:       # %bb.0:
865850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
866850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v10
867850dde06SYeting Kuo; CHECK-NEXT:    ret
868d8d131dfSLuke Lau  %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> splat (i1 true), i32 %evl)
869850dde06SYeting Kuo  ret <8 x i32> %v
870850dde06SYeting Kuo}
871850dde06SYeting Kuo
872850dde06SYeting Kuodefine <8 x i32> @vsadd_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
873850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i32:
874850dde06SYeting Kuo; CHECK:       # %bb.0:
875850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
876850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
877850dde06SYeting Kuo; CHECK-NEXT:    ret
878850dde06SYeting Kuo  %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
879850dde06SYeting Kuo  %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
880850dde06SYeting Kuo  %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
881850dde06SYeting Kuo  ret <8 x i32> %v
882850dde06SYeting Kuo}
883850dde06SYeting Kuo
884850dde06SYeting Kuodefine <8 x i32> @vsadd_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
885850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i32_unmasked:
886850dde06SYeting Kuo; CHECK:       # %bb.0:
887850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
888850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
889850dde06SYeting Kuo; CHECK-NEXT:    ret
890850dde06SYeting Kuo  %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
891850dde06SYeting Kuo  %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
892d8d131dfSLuke Lau  %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> splat (i1 true), i32 %evl)
893850dde06SYeting Kuo  ret <8 x i32> %v
894850dde06SYeting Kuo}
895850dde06SYeting Kuo
896850dde06SYeting Kuodefine <8 x i32> @vsadd_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
897850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i32:
898850dde06SYeting Kuo; CHECK:       # %bb.0:
899850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
900850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
901850dde06SYeting Kuo; CHECK-NEXT:    ret
902d8d131dfSLuke Lau  %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> splat (i32 -1), <8 x i1> %m, i32 %evl)
903850dde06SYeting Kuo  ret <8 x i32> %v
904850dde06SYeting Kuo}
905850dde06SYeting Kuo
906850dde06SYeting Kuodefine <8 x i32> @vsadd_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
907850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i32_unmasked:
908850dde06SYeting Kuo; CHECK:       # %bb.0:
909850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
910850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
911850dde06SYeting Kuo; CHECK-NEXT:    ret
912d8d131dfSLuke Lau  %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> splat (i32 -1), <8 x i1> splat (i1 true), i32 %evl)
913850dde06SYeting Kuo  ret <8 x i32> %v
914850dde06SYeting Kuo}
915850dde06SYeting Kuo
916850dde06SYeting Kuodeclare <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
917850dde06SYeting Kuo
918850dde06SYeting Kuodefine <16 x i32> @vsadd_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
919850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i32:
920850dde06SYeting Kuo; CHECK:       # %bb.0:
921850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
922850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v12, v0.t
923850dde06SYeting Kuo; CHECK-NEXT:    ret
924850dde06SYeting Kuo  %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
925850dde06SYeting Kuo  ret <16 x i32> %v
926850dde06SYeting Kuo}
927850dde06SYeting Kuo
928850dde06SYeting Kuodefine <16 x i32> @vsadd_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
929850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i32_unmasked:
930850dde06SYeting Kuo; CHECK:       # %bb.0:
931850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
932850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v12
933850dde06SYeting Kuo; CHECK-NEXT:    ret
934d8d131dfSLuke Lau  %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> splat (i1 true), i32 %evl)
935850dde06SYeting Kuo  ret <16 x i32> %v
936850dde06SYeting Kuo}
937850dde06SYeting Kuo
938850dde06SYeting Kuodefine <16 x i32> @vsadd_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
939850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i32:
940850dde06SYeting Kuo; CHECK:       # %bb.0:
941850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
942850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0, v0.t
943850dde06SYeting Kuo; CHECK-NEXT:    ret
944850dde06SYeting Kuo  %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
945850dde06SYeting Kuo  %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
946850dde06SYeting Kuo  %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
947850dde06SYeting Kuo  ret <16 x i32> %v
948850dde06SYeting Kuo}
949850dde06SYeting Kuo
950850dde06SYeting Kuodefine <16 x i32> @vsadd_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
951850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i32_unmasked:
952850dde06SYeting Kuo; CHECK:       # %bb.0:
953850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
954850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vx v8, v8, a0
955850dde06SYeting Kuo; CHECK-NEXT:    ret
956850dde06SYeting Kuo  %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
957850dde06SYeting Kuo  %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
958d8d131dfSLuke Lau  %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> splat (i1 true), i32 %evl)
959850dde06SYeting Kuo  ret <16 x i32> %v
960850dde06SYeting Kuo}
961850dde06SYeting Kuo
962850dde06SYeting Kuodefine <16 x i32> @vsadd_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
963850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i32:
964850dde06SYeting Kuo; CHECK:       # %bb.0:
965850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
966850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
967850dde06SYeting Kuo; CHECK-NEXT:    ret
968d8d131dfSLuke Lau  %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> splat (i32 -1), <16 x i1> %m, i32 %evl)
969850dde06SYeting Kuo  ret <16 x i32> %v
970850dde06SYeting Kuo}
971850dde06SYeting Kuo
972850dde06SYeting Kuodefine <16 x i32> @vsadd_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
973850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i32_unmasked:
974850dde06SYeting Kuo; CHECK:       # %bb.0:
975850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
976850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
977850dde06SYeting Kuo; CHECK-NEXT:    ret
978d8d131dfSLuke Lau  %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> splat (i32 -1), <16 x i1> splat (i1 true), i32 %evl)
979850dde06SYeting Kuo  ret <16 x i32> %v
980850dde06SYeting Kuo}
981850dde06SYeting Kuo
982850dde06SYeting Kuodeclare <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
983850dde06SYeting Kuo
984850dde06SYeting Kuodefine <2 x i64> @vsadd_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
985850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i64:
986850dde06SYeting Kuo; CHECK:       # %bb.0:
987850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
988850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9, v0.t
989850dde06SYeting Kuo; CHECK-NEXT:    ret
990850dde06SYeting Kuo  %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
991850dde06SYeting Kuo  ret <2 x i64> %v
992850dde06SYeting Kuo}
993850dde06SYeting Kuo
994850dde06SYeting Kuodefine <2 x i64> @vsadd_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
995850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i64_unmasked:
996850dde06SYeting Kuo; CHECK:       # %bb.0:
997850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
998850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v9
999850dde06SYeting Kuo; CHECK-NEXT:    ret
1000d8d131dfSLuke Lau  %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> splat (i1 true), i32 %evl)
1001850dde06SYeting Kuo  ret <2 x i64> %v
1002850dde06SYeting Kuo}
1003850dde06SYeting Kuo
1004850dde06SYeting Kuodefine <2 x i64> @vsadd_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
1005850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v2i64:
1006850dde06SYeting Kuo; RV32:       # %bb.0:
1007850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, -16
1008850dde06SYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 16
1009850dde06SYeting Kuo; RV32-NEXT:    sw a0, 8(sp)
10102967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
1011850dde06SYeting Kuo; RV32-NEXT:    addi a0, sp, 8
1012850dde06SYeting Kuo; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1013850dde06SYeting Kuo; RV32-NEXT:    vlse64.v v9, (a0), zero
1014850dde06SYeting Kuo; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1015850dde06SYeting Kuo; RV32-NEXT:    vsadd.vv v8, v8, v9, v0.t
1016850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, 16
101797982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
1018850dde06SYeting Kuo; RV32-NEXT:    ret
1019850dde06SYeting Kuo;
1020850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v2i64:
1021850dde06SYeting Kuo; RV64:       # %bb.0:
1022850dde06SYeting Kuo; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1023850dde06SYeting Kuo; RV64-NEXT:    vsadd.vx v8, v8, a0, v0.t
1024850dde06SYeting Kuo; RV64-NEXT:    ret
1025850dde06SYeting Kuo  %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1026850dde06SYeting Kuo  %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1027850dde06SYeting Kuo  %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1028850dde06SYeting Kuo  ret <2 x i64> %v
1029850dde06SYeting Kuo}
1030850dde06SYeting Kuo
1031850dde06SYeting Kuodefine <2 x i64> @vsadd_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
1032850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v2i64_unmasked:
1033850dde06SYeting Kuo; RV32:       # %bb.0:
1034850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, -16
1035850dde06SYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 16
1036850dde06SYeting Kuo; RV32-NEXT:    sw a0, 8(sp)
10372967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
1038850dde06SYeting Kuo; RV32-NEXT:    addi a0, sp, 8
1039850dde06SYeting Kuo; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
1040850dde06SYeting Kuo; RV32-NEXT:    vlse64.v v9, (a0), zero
1041850dde06SYeting Kuo; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1042850dde06SYeting Kuo; RV32-NEXT:    vsadd.vv v8, v8, v9
1043850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, 16
104497982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
1045850dde06SYeting Kuo; RV32-NEXT:    ret
1046850dde06SYeting Kuo;
1047850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v2i64_unmasked:
1048850dde06SYeting Kuo; RV64:       # %bb.0:
1049850dde06SYeting Kuo; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1050850dde06SYeting Kuo; RV64-NEXT:    vsadd.vx v8, v8, a0
1051850dde06SYeting Kuo; RV64-NEXT:    ret
1052850dde06SYeting Kuo  %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1053850dde06SYeting Kuo  %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1054d8d131dfSLuke Lau  %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> splat (i1 true), i32 %evl)
1055850dde06SYeting Kuo  ret <2 x i64> %v
1056850dde06SYeting Kuo}
1057850dde06SYeting Kuo
1058850dde06SYeting Kuodefine <2 x i64> @vsadd_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
1059850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i64:
1060850dde06SYeting Kuo; CHECK:       # %bb.0:
1061850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1062850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
1063850dde06SYeting Kuo; CHECK-NEXT:    ret
1064d8d131dfSLuke Lau  %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> splat (i64 -1), <2 x i1> %m, i32 %evl)
1065850dde06SYeting Kuo  ret <2 x i64> %v
1066850dde06SYeting Kuo}
1067850dde06SYeting Kuo
1068850dde06SYeting Kuodefine <2 x i64> @vsadd_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
1069850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i64_unmasked:
1070850dde06SYeting Kuo; CHECK:       # %bb.0:
1071850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1072850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
1073850dde06SYeting Kuo; CHECK-NEXT:    ret
1074d8d131dfSLuke Lau  %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> splat (i64 -1), <2 x i1> splat (i1 true), i32 %evl)
1075850dde06SYeting Kuo  ret <2 x i64> %v
1076850dde06SYeting Kuo}
1077850dde06SYeting Kuo
1078850dde06SYeting Kuodeclare <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
1079850dde06SYeting Kuo
1080850dde06SYeting Kuodefine <4 x i64> @vsadd_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
1081850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i64:
1082850dde06SYeting Kuo; CHECK:       # %bb.0:
1083850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1084850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v10, v0.t
1085850dde06SYeting Kuo; CHECK-NEXT:    ret
1086850dde06SYeting Kuo  %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
1087850dde06SYeting Kuo  ret <4 x i64> %v
1088850dde06SYeting Kuo}
1089850dde06SYeting Kuo
1090850dde06SYeting Kuodefine <4 x i64> @vsadd_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
1091850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i64_unmasked:
1092850dde06SYeting Kuo; CHECK:       # %bb.0:
1093850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1094850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v10
1095850dde06SYeting Kuo; CHECK-NEXT:    ret
1096d8d131dfSLuke Lau  %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> splat (i1 true), i32 %evl)
1097850dde06SYeting Kuo  ret <4 x i64> %v
1098850dde06SYeting Kuo}
1099850dde06SYeting Kuo
1100850dde06SYeting Kuodefine <4 x i64> @vsadd_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
1101850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v4i64:
1102850dde06SYeting Kuo; RV32:       # %bb.0:
1103850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, -16
1104850dde06SYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 16
1105850dde06SYeting Kuo; RV32-NEXT:    sw a0, 8(sp)
11062967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
1107850dde06SYeting Kuo; RV32-NEXT:    addi a0, sp, 8
1108850dde06SYeting Kuo; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
1109850dde06SYeting Kuo; RV32-NEXT:    vlse64.v v10, (a0), zero
1110850dde06SYeting Kuo; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1111850dde06SYeting Kuo; RV32-NEXT:    vsadd.vv v8, v8, v10, v0.t
1112850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, 16
111397982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
1114850dde06SYeting Kuo; RV32-NEXT:    ret
1115850dde06SYeting Kuo;
1116850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v4i64:
1117850dde06SYeting Kuo; RV64:       # %bb.0:
1118850dde06SYeting Kuo; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1119850dde06SYeting Kuo; RV64-NEXT:    vsadd.vx v8, v8, a0, v0.t
1120850dde06SYeting Kuo; RV64-NEXT:    ret
1121850dde06SYeting Kuo  %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1122850dde06SYeting Kuo  %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1123850dde06SYeting Kuo  %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1124850dde06SYeting Kuo  ret <4 x i64> %v
1125850dde06SYeting Kuo}
1126850dde06SYeting Kuo
1127850dde06SYeting Kuodefine <4 x i64> @vsadd_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
1128850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v4i64_unmasked:
1129850dde06SYeting Kuo; RV32:       # %bb.0:
1130850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, -16
1131850dde06SYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 16
1132850dde06SYeting Kuo; RV32-NEXT:    sw a0, 8(sp)
11332967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
1134850dde06SYeting Kuo; RV32-NEXT:    addi a0, sp, 8
1135850dde06SYeting Kuo; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
1136850dde06SYeting Kuo; RV32-NEXT:    vlse64.v v10, (a0), zero
1137850dde06SYeting Kuo; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1138850dde06SYeting Kuo; RV32-NEXT:    vsadd.vv v8, v8, v10
1139850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, 16
114097982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
1141850dde06SYeting Kuo; RV32-NEXT:    ret
1142850dde06SYeting Kuo;
1143850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v4i64_unmasked:
1144850dde06SYeting Kuo; RV64:       # %bb.0:
1145850dde06SYeting Kuo; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1146850dde06SYeting Kuo; RV64-NEXT:    vsadd.vx v8, v8, a0
1147850dde06SYeting Kuo; RV64-NEXT:    ret
1148850dde06SYeting Kuo  %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1149850dde06SYeting Kuo  %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1150d8d131dfSLuke Lau  %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> splat (i1 true), i32 %evl)
1151850dde06SYeting Kuo  ret <4 x i64> %v
1152850dde06SYeting Kuo}
1153850dde06SYeting Kuo
1154850dde06SYeting Kuodefine <4 x i64> @vsadd_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
1155850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i64:
1156850dde06SYeting Kuo; CHECK:       # %bb.0:
1157850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1158850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
1159850dde06SYeting Kuo; CHECK-NEXT:    ret
1160d8d131dfSLuke Lau  %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> splat (i64 -1), <4 x i1> %m, i32 %evl)
1161850dde06SYeting Kuo  ret <4 x i64> %v
1162850dde06SYeting Kuo}
1163850dde06SYeting Kuo
1164850dde06SYeting Kuodefine <4 x i64> @vsadd_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1165850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i64_unmasked:
1166850dde06SYeting Kuo; CHECK:       # %bb.0:
1167850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1168850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
1169850dde06SYeting Kuo; CHECK-NEXT:    ret
1170d8d131dfSLuke Lau  %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> splat (i64 -1), <4 x i1> splat (i1 true), i32 %evl)
1171850dde06SYeting Kuo  ret <4 x i64> %v
1172850dde06SYeting Kuo}
1173850dde06SYeting Kuo
1174850dde06SYeting Kuodeclare <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
1175850dde06SYeting Kuo
1176850dde06SYeting Kuodefine <8 x i64> @vsadd_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
1177850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i64:
1178850dde06SYeting Kuo; CHECK:       # %bb.0:
1179850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1180850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v12, v0.t
1181850dde06SYeting Kuo; CHECK-NEXT:    ret
1182850dde06SYeting Kuo  %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1183850dde06SYeting Kuo  ret <8 x i64> %v
1184850dde06SYeting Kuo}
1185850dde06SYeting Kuo
1186850dde06SYeting Kuodefine <8 x i64> @vsadd_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
1187850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i64_unmasked:
1188850dde06SYeting Kuo; CHECK:       # %bb.0:
1189850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1190850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v12
1191850dde06SYeting Kuo; CHECK-NEXT:    ret
1192d8d131dfSLuke Lau  %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> splat (i1 true), i32 %evl)
1193850dde06SYeting Kuo  ret <8 x i64> %v
1194850dde06SYeting Kuo}
1195850dde06SYeting Kuo
1196850dde06SYeting Kuodefine <8 x i64> @vsadd_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
1197850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v8i64:
1198850dde06SYeting Kuo; RV32:       # %bb.0:
1199850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, -16
1200850dde06SYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 16
1201850dde06SYeting Kuo; RV32-NEXT:    sw a0, 8(sp)
12022967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
1203850dde06SYeting Kuo; RV32-NEXT:    addi a0, sp, 8
1204850dde06SYeting Kuo; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1205850dde06SYeting Kuo; RV32-NEXT:    vlse64.v v12, (a0), zero
1206850dde06SYeting Kuo; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1207850dde06SYeting Kuo; RV32-NEXT:    vsadd.vv v8, v8, v12, v0.t
1208850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, 16
120997982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
1210850dde06SYeting Kuo; RV32-NEXT:    ret
1211850dde06SYeting Kuo;
1212850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v8i64:
1213850dde06SYeting Kuo; RV64:       # %bb.0:
1214850dde06SYeting Kuo; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1215850dde06SYeting Kuo; RV64-NEXT:    vsadd.vx v8, v8, a0, v0.t
1216850dde06SYeting Kuo; RV64-NEXT:    ret
1217850dde06SYeting Kuo  %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1218850dde06SYeting Kuo  %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1219850dde06SYeting Kuo  %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1220850dde06SYeting Kuo  ret <8 x i64> %v
1221850dde06SYeting Kuo}
1222850dde06SYeting Kuo
1223850dde06SYeting Kuodefine <8 x i64> @vsadd_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
1224850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v8i64_unmasked:
1225850dde06SYeting Kuo; RV32:       # %bb.0:
1226850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, -16
1227850dde06SYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 16
1228850dde06SYeting Kuo; RV32-NEXT:    sw a0, 8(sp)
12292967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
1230850dde06SYeting Kuo; RV32-NEXT:    addi a0, sp, 8
1231850dde06SYeting Kuo; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1232850dde06SYeting Kuo; RV32-NEXT:    vlse64.v v12, (a0), zero
1233850dde06SYeting Kuo; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1234850dde06SYeting Kuo; RV32-NEXT:    vsadd.vv v8, v8, v12
1235850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, 16
123697982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
1237850dde06SYeting Kuo; RV32-NEXT:    ret
1238850dde06SYeting Kuo;
1239850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v8i64_unmasked:
1240850dde06SYeting Kuo; RV64:       # %bb.0:
1241850dde06SYeting Kuo; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1242850dde06SYeting Kuo; RV64-NEXT:    vsadd.vx v8, v8, a0
1243850dde06SYeting Kuo; RV64-NEXT:    ret
1244850dde06SYeting Kuo  %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1245850dde06SYeting Kuo  %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1246d8d131dfSLuke Lau  %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> splat (i1 true), i32 %evl)
1247850dde06SYeting Kuo  ret <8 x i64> %v
1248850dde06SYeting Kuo}
1249850dde06SYeting Kuo
1250850dde06SYeting Kuodefine <8 x i64> @vsadd_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1251850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i64:
1252850dde06SYeting Kuo; CHECK:       # %bb.0:
1253850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1254850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
1255850dde06SYeting Kuo; CHECK-NEXT:    ret
1256d8d131dfSLuke Lau  %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> splat (i64 -1), <8 x i1> %m, i32 %evl)
1257850dde06SYeting Kuo  ret <8 x i64> %v
1258850dde06SYeting Kuo}
1259850dde06SYeting Kuo
1260850dde06SYeting Kuodefine <8 x i64> @vsadd_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1261850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i64_unmasked:
1262850dde06SYeting Kuo; CHECK:       # %bb.0:
1263850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1264850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
1265850dde06SYeting Kuo; CHECK-NEXT:    ret
1266d8d131dfSLuke Lau  %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> splat (i64 -1), <8 x i1> splat (i1 true), i32 %evl)
1267850dde06SYeting Kuo  ret <8 x i64> %v
1268850dde06SYeting Kuo}
1269850dde06SYeting Kuo
1270850dde06SYeting Kuodeclare <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
1271850dde06SYeting Kuo
1272850dde06SYeting Kuodefine <16 x i64> @vsadd_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
1273850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i64:
1274850dde06SYeting Kuo; CHECK:       # %bb.0:
1275850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1276850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v16, v0.t
1277850dde06SYeting Kuo; CHECK-NEXT:    ret
1278850dde06SYeting Kuo  %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1279850dde06SYeting Kuo  ret <16 x i64> %v
1280850dde06SYeting Kuo}
1281850dde06SYeting Kuo
1282850dde06SYeting Kuodefine <16 x i64> @vsadd_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
1283850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i64_unmasked:
1284850dde06SYeting Kuo; CHECK:       # %bb.0:
1285850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1286850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vv v8, v8, v16
1287850dde06SYeting Kuo; CHECK-NEXT:    ret
1288d8d131dfSLuke Lau  %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> splat (i1 true), i32 %evl)
1289850dde06SYeting Kuo  ret <16 x i64> %v
1290850dde06SYeting Kuo}
1291850dde06SYeting Kuo
1292850dde06SYeting Kuodefine <16 x i64> @vsadd_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
1293850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v16i64:
1294850dde06SYeting Kuo; RV32:       # %bb.0:
1295850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, -16
1296850dde06SYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 16
1297850dde06SYeting Kuo; RV32-NEXT:    sw a0, 8(sp)
12982967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
1299850dde06SYeting Kuo; RV32-NEXT:    addi a0, sp, 8
1300850dde06SYeting Kuo; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1301850dde06SYeting Kuo; RV32-NEXT:    vlse64.v v16, (a0), zero
1302850dde06SYeting Kuo; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1303850dde06SYeting Kuo; RV32-NEXT:    vsadd.vv v8, v8, v16, v0.t
1304850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, 16
130597982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
1306850dde06SYeting Kuo; RV32-NEXT:    ret
1307850dde06SYeting Kuo;
1308850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v16i64:
1309850dde06SYeting Kuo; RV64:       # %bb.0:
1310850dde06SYeting Kuo; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1311850dde06SYeting Kuo; RV64-NEXT:    vsadd.vx v8, v8, a0, v0.t
1312850dde06SYeting Kuo; RV64-NEXT:    ret
1313850dde06SYeting Kuo  %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1314850dde06SYeting Kuo  %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1315850dde06SYeting Kuo  %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1316850dde06SYeting Kuo  ret <16 x i64> %v
1317850dde06SYeting Kuo}
1318850dde06SYeting Kuo
1319850dde06SYeting Kuodefine <16 x i64> @vsadd_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
1320850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v16i64_unmasked:
1321850dde06SYeting Kuo; RV32:       # %bb.0:
1322850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, -16
1323850dde06SYeting Kuo; RV32-NEXT:    .cfi_def_cfa_offset 16
1324850dde06SYeting Kuo; RV32-NEXT:    sw a0, 8(sp)
13252967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
1326850dde06SYeting Kuo; RV32-NEXT:    addi a0, sp, 8
1327850dde06SYeting Kuo; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1328850dde06SYeting Kuo; RV32-NEXT:    vlse64.v v16, (a0), zero
1329850dde06SYeting Kuo; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1330850dde06SYeting Kuo; RV32-NEXT:    vsadd.vv v8, v8, v16
1331850dde06SYeting Kuo; RV32-NEXT:    addi sp, sp, 16
133297982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
1333850dde06SYeting Kuo; RV32-NEXT:    ret
1334850dde06SYeting Kuo;
1335850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v16i64_unmasked:
1336850dde06SYeting Kuo; RV64:       # %bb.0:
1337850dde06SYeting Kuo; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1338850dde06SYeting Kuo; RV64-NEXT:    vsadd.vx v8, v8, a0
1339850dde06SYeting Kuo; RV64-NEXT:    ret
1340850dde06SYeting Kuo  %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1341850dde06SYeting Kuo  %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1342d8d131dfSLuke Lau  %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> splat (i1 true), i32 %evl)
1343850dde06SYeting Kuo  ret <16 x i64> %v
1344850dde06SYeting Kuo}
1345850dde06SYeting Kuo
1346850dde06SYeting Kuodefine <16 x i64> @vsadd_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1347850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i64:
1348850dde06SYeting Kuo; CHECK:       # %bb.0:
1349850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1350850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
1351850dde06SYeting Kuo; CHECK-NEXT:    ret
1352d8d131dfSLuke Lau  %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> splat (i64 -1), <16 x i1> %m, i32 %evl)
1353850dde06SYeting Kuo  ret <16 x i64> %v
1354850dde06SYeting Kuo}
1355850dde06SYeting Kuo
1356850dde06SYeting Kuodefine <16 x i64> @vsadd_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1357850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i64_unmasked:
1358850dde06SYeting Kuo; CHECK:       # %bb.0:
1359850dde06SYeting Kuo; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1360850dde06SYeting Kuo; CHECK-NEXT:    vsadd.vi v8, v8, -1
1361850dde06SYeting Kuo; CHECK-NEXT:    ret
1362d8d131dfSLuke Lau  %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> splat (i64 -1), <16 x i1> splat (i1 true), i32 %evl)
1363850dde06SYeting Kuo  ret <16 x i64> %v
1364850dde06SYeting Kuo}
1365850dde06SYeting Kuo
1366850dde06SYeting Kuo; Test that split-legalization works as expected.
1367850dde06SYeting Kuo
1368850dde06SYeting Kuodeclare <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64>, <32 x i64>, <32 x i1>, i32)
1369850dde06SYeting Kuo
1370850dde06SYeting Kuodefine <32 x i64> @vsadd_vx_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) {
1371c28b1a19SCraig Topper; CHECK-LABEL: vsadd_vx_v32i64:
1372c28b1a19SCraig Topper; CHECK:       # %bb.0:
1373c28b1a19SCraig Topper; CHECK-NEXT:    li a2, 16
1374c28b1a19SCraig Topper; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1375c28b1a19SCraig Topper; CHECK-NEXT:    vslidedown.vi v24, v0, 2
1376c28b1a19SCraig Topper; CHECK-NEXT:    mv a1, a0
1377c28b1a19SCraig Topper; CHECK-NEXT:    bltu a0, a2, .LBB108_2
1378c28b1a19SCraig Topper; CHECK-NEXT:  # %bb.1:
1379c28b1a19SCraig Topper; CHECK-NEXT:    li a1, 16
1380c28b1a19SCraig Topper; CHECK-NEXT:  .LBB108_2:
1381c28b1a19SCraig Topper; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1382c28b1a19SCraig Topper; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
1383c28b1a19SCraig Topper; CHECK-NEXT:    addi a1, a0, -16
1384c28b1a19SCraig Topper; CHECK-NEXT:    sltu a0, a0, a1
1385c28b1a19SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
1386c28b1a19SCraig Topper; CHECK-NEXT:    and a0, a0, a1
1387c28b1a19SCraig Topper; CHECK-NEXT:    vmv1r.v v0, v24
1388c28b1a19SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1389c28b1a19SCraig Topper; CHECK-NEXT:    vsadd.vi v16, v16, -1, v0.t
1390c28b1a19SCraig Topper; CHECK-NEXT:    ret
139124e8c6a0SLuke Lau  %v = call <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> %m, i32 %evl)
1392850dde06SYeting Kuo  ret <32 x i64> %v
1393850dde06SYeting Kuo}
1394850dde06SYeting Kuo
1395850dde06SYeting Kuodefine <32 x i64> @vsadd_vi_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
1396c28b1a19SCraig Topper; CHECK-LABEL: vsadd_vi_v32i64_unmasked:
1397c28b1a19SCraig Topper; CHECK:       # %bb.0:
1398c28b1a19SCraig Topper; CHECK-NEXT:    li a2, 16
1399c28b1a19SCraig Topper; CHECK-NEXT:    mv a1, a0
1400c28b1a19SCraig Topper; CHECK-NEXT:    bltu a0, a2, .LBB109_2
1401c28b1a19SCraig Topper; CHECK-NEXT:  # %bb.1:
1402c28b1a19SCraig Topper; CHECK-NEXT:    li a1, 16
1403c28b1a19SCraig Topper; CHECK-NEXT:  .LBB109_2:
1404c28b1a19SCraig Topper; CHECK-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1405c28b1a19SCraig Topper; CHECK-NEXT:    vsadd.vi v8, v8, -1
1406c28b1a19SCraig Topper; CHECK-NEXT:    addi a1, a0, -16
1407c28b1a19SCraig Topper; CHECK-NEXT:    sltu a0, a0, a1
1408c28b1a19SCraig Topper; CHECK-NEXT:    addi a0, a0, -1
1409c28b1a19SCraig Topper; CHECK-NEXT:    and a0, a0, a1
1410c28b1a19SCraig Topper; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1411c28b1a19SCraig Topper; CHECK-NEXT:    vsadd.vi v16, v16, -1
1412c28b1a19SCraig Topper; CHECK-NEXT:    ret
141324e8c6a0SLuke Lau  %v = call <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> splat (i1 true), i32 %evl)
1414850dde06SYeting Kuo  ret <32 x i64> %v
1415850dde06SYeting Kuo}
1416850dde06SYeting Kuo
1417850dde06SYeting Kuodefine <32 x i64> @vsadd_vx_v32i64_evl12(<32 x i64> %va, <32 x i1> %m) {
1418c28b1a19SCraig Topper; CHECK-LABEL: vsadd_vx_v32i64_evl12:
1419c28b1a19SCraig Topper; CHECK:       # %bb.0:
1420c28b1a19SCraig Topper; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1421c28b1a19SCraig Topper; CHECK-NEXT:    vslidedown.vi v24, v0, 2
1422c28b1a19SCraig Topper; CHECK-NEXT:    vsetivli zero, 12, e64, m8, ta, ma
1423c28b1a19SCraig Topper; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
1424c28b1a19SCraig Topper; CHECK-NEXT:    vmv1r.v v0, v24
1425c28b1a19SCraig Topper; CHECK-NEXT:    vsetivli zero, 0, e64, m8, ta, ma
1426c28b1a19SCraig Topper; CHECK-NEXT:    vsadd.vi v16, v16, -1, v0.t
1427c28b1a19SCraig Topper; CHECK-NEXT:    ret
1428d8d131dfSLuke Lau  %v = call <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> %m, i32 12)
1429850dde06SYeting Kuo  ret <32 x i64> %v
1430850dde06SYeting Kuo}
1431850dde06SYeting Kuo
1432850dde06SYeting Kuodefine <32 x i64> @vsadd_vx_v32i64_evl27(<32 x i64> %va, <32 x i1> %m) {
1433c28b1a19SCraig Topper; CHECK-LABEL: vsadd_vx_v32i64_evl27:
1434c28b1a19SCraig Topper; CHECK:       # %bb.0:
1435c28b1a19SCraig Topper; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1436c28b1a19SCraig Topper; CHECK-NEXT:    vslidedown.vi v24, v0, 2
1437c28b1a19SCraig Topper; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1438c28b1a19SCraig Topper; CHECK-NEXT:    vsadd.vi v8, v8, -1, v0.t
1439c28b1a19SCraig Topper; CHECK-NEXT:    vmv1r.v v0, v24
1440c28b1a19SCraig Topper; CHECK-NEXT:    vsetivli zero, 11, e64, m8, ta, ma
1441c28b1a19SCraig Topper; CHECK-NEXT:    vsadd.vi v16, v16, -1, v0.t
1442c28b1a19SCraig Topper; CHECK-NEXT:    ret
1443d8d131dfSLuke Lau  %v = call <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> %m, i32 27)
1444850dde06SYeting Kuo  ret <32 x i64> %v
1445850dde06SYeting Kuo}
1446