1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3 ; RUN: | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5 ; RUN: | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <vscale x 8 x i7> @llvm.vp.uadd.sat.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
9 define <vscale x 8 x i7> @vsaddu_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsaddu_vx_nxv8i7:
12 ; CHECK-NEXT: li a2, 127
13 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
14 ; CHECK-NEXT: vmv.v.x v9, a0
15 ; CHECK-NEXT: vand.vx v8, v8, a2
16 ; CHECK-NEXT: vand.vx v9, v9, a2
17 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
18 ; CHECK-NEXT: vminu.vx v8, v8, a2, v0.t
20 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
21 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
22 %v = call <vscale x 8 x i7> @llvm.vp.uadd.sat.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
23 ret <vscale x 8 x i7> %v
26 declare <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
28 define <vscale x 1 x i8> @vsaddu_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
29 ; CHECK-LABEL: vsaddu_vv_nxv1i8:
31 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
32 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
34 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
35 ret <vscale x 1 x i8> %v
38 define <vscale x 1 x i8> @vsaddu_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
39 ; CHECK-LABEL: vsaddu_vv_nxv1i8_unmasked:
41 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
42 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
44 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
45 ret <vscale x 1 x i8> %v
48 define <vscale x 1 x i8> @vsaddu_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
49 ; CHECK-LABEL: vsaddu_vx_nxv1i8:
51 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
52 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
54 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
55 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
56 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
57 ret <vscale x 1 x i8> %v
60 define <vscale x 1 x i8> @vsaddu_vx_nxv1i8_commute(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
61 ; CHECK-LABEL: vsaddu_vx_nxv1i8_commute:
63 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
64 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
66 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
67 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
68 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 %evl)
69 ret <vscale x 1 x i8> %v
72 define <vscale x 1 x i8> @vsaddu_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
73 ; CHECK-LABEL: vsaddu_vx_nxv1i8_unmasked:
75 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
76 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
78 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
79 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
80 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
81 ret <vscale x 1 x i8> %v
84 define <vscale x 1 x i8> @vsaddu_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
85 ; CHECK-LABEL: vsaddu_vi_nxv1i8:
87 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
88 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
90 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> %m, i32 %evl)
91 ret <vscale x 1 x i8> %v
94 define <vscale x 1 x i8> @vsaddu_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
95 ; CHECK-LABEL: vsaddu_vi_nxv1i8_unmasked:
97 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
98 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
100 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)
101 ret <vscale x 1 x i8> %v
104 declare <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
106 define <vscale x 2 x i8> @vsaddu_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
107 ; CHECK-LABEL: vsaddu_vv_nxv2i8:
109 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
110 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
112 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
113 ret <vscale x 2 x i8> %v
116 define <vscale x 2 x i8> @vsaddu_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
117 ; CHECK-LABEL: vsaddu_vv_nxv2i8_unmasked:
119 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
120 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
122 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
123 ret <vscale x 2 x i8> %v
126 define <vscale x 2 x i8> @vsaddu_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
127 ; CHECK-LABEL: vsaddu_vx_nxv2i8:
129 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
130 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
132 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
133 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
134 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
135 ret <vscale x 2 x i8> %v
138 define <vscale x 2 x i8> @vsaddu_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
139 ; CHECK-LABEL: vsaddu_vx_nxv2i8_unmasked:
141 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
142 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
144 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
145 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
146 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
147 ret <vscale x 2 x i8> %v
150 define <vscale x 2 x i8> @vsaddu_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
151 ; CHECK-LABEL: vsaddu_vi_nxv2i8:
153 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
154 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
156 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> %m, i32 %evl)
157 ret <vscale x 2 x i8> %v
160 define <vscale x 2 x i8> @vsaddu_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
161 ; CHECK-LABEL: vsaddu_vi_nxv2i8_unmasked:
163 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
164 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
166 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)
167 ret <vscale x 2 x i8> %v
170 declare <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8>, <vscale x 3 x i8>, <vscale x 3 x i1>, i32)
172 define <vscale x 3 x i8> @vsaddu_vv_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {
173 ; CHECK-LABEL: vsaddu_vv_nxv3i8:
175 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
176 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
178 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 %evl)
179 ret <vscale x 3 x i8> %v
182 define <vscale x 3 x i8> @vsaddu_vv_nxv3i8_unmasked(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, i32 zeroext %evl) {
183 ; CHECK-LABEL: vsaddu_vv_nxv3i8_unmasked:
185 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
186 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
188 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> splat (i1 true), i32 %evl)
189 ret <vscale x 3 x i8> %v
192 define <vscale x 3 x i8> @vsaddu_vx_nxv3i8(<vscale x 3 x i8> %va, i8 %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {
193 ; CHECK-LABEL: vsaddu_vx_nxv3i8:
195 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
196 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
198 %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0
199 %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer
200 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 %evl)
201 ret <vscale x 3 x i8> %v
204 define <vscale x 3 x i8> @vsaddu_vx_nxv3i8_unmasked(<vscale x 3 x i8> %va, i8 %b, i32 zeroext %evl) {
205 ; CHECK-LABEL: vsaddu_vx_nxv3i8_unmasked:
207 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
208 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
210 %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0
211 %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer
212 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> splat (i1 true), i32 %evl)
213 ret <vscale x 3 x i8> %v
216 define <vscale x 3 x i8> @vsaddu_vi_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i1> %m, i32 zeroext %evl) {
217 ; CHECK-LABEL: vsaddu_vi_nxv3i8:
219 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
220 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
222 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> %m, i32 %evl)
223 ret <vscale x 3 x i8> %v
226 define <vscale x 3 x i8> @vsaddu_vi_nxv3i8_unmasked(<vscale x 3 x i8> %va, i32 zeroext %evl) {
227 ; CHECK-LABEL: vsaddu_vi_nxv3i8_unmasked:
229 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
230 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
232 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> splat (i1 true), i32 %evl)
233 ret <vscale x 3 x i8> %v
236 declare <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
238 define <vscale x 4 x i8> @vsaddu_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
239 ; CHECK-LABEL: vsaddu_vv_nxv4i8:
241 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
242 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
244 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
245 ret <vscale x 4 x i8> %v
248 define <vscale x 4 x i8> @vsaddu_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
249 ; CHECK-LABEL: vsaddu_vv_nxv4i8_unmasked:
251 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
252 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
254 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
255 ret <vscale x 4 x i8> %v
258 define <vscale x 4 x i8> @vsaddu_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
259 ; CHECK-LABEL: vsaddu_vx_nxv4i8:
261 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
262 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
264 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
265 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
266 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
267 ret <vscale x 4 x i8> %v
270 define <vscale x 4 x i8> @vsaddu_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
271 ; CHECK-LABEL: vsaddu_vx_nxv4i8_unmasked:
273 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
274 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
276 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
277 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
278 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
279 ret <vscale x 4 x i8> %v
282 define <vscale x 4 x i8> @vsaddu_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
283 ; CHECK-LABEL: vsaddu_vi_nxv4i8:
285 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
286 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
288 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> %m, i32 %evl)
289 ret <vscale x 4 x i8> %v
292 define <vscale x 4 x i8> @vsaddu_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
293 ; CHECK-LABEL: vsaddu_vi_nxv4i8_unmasked:
295 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
296 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
298 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)
299 ret <vscale x 4 x i8> %v
302 declare <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
304 define <vscale x 8 x i8> @vsaddu_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
305 ; CHECK-LABEL: vsaddu_vv_nxv8i8:
307 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
308 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
310 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
311 ret <vscale x 8 x i8> %v
314 define <vscale x 8 x i8> @vsaddu_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
315 ; CHECK-LABEL: vsaddu_vv_nxv8i8_unmasked:
317 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
318 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
320 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
321 ret <vscale x 8 x i8> %v
324 define <vscale x 8 x i8> @vsaddu_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
325 ; CHECK-LABEL: vsaddu_vx_nxv8i8:
327 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
328 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
330 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
331 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
332 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
333 ret <vscale x 8 x i8> %v
336 define <vscale x 8 x i8> @vsaddu_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
337 ; CHECK-LABEL: vsaddu_vx_nxv8i8_unmasked:
339 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
340 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
342 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
343 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
344 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
345 ret <vscale x 8 x i8> %v
348 define <vscale x 8 x i8> @vsaddu_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
349 ; CHECK-LABEL: vsaddu_vi_nxv8i8:
351 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
352 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
354 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> %m, i32 %evl)
355 ret <vscale x 8 x i8> %v
358 define <vscale x 8 x i8> @vsaddu_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
359 ; CHECK-LABEL: vsaddu_vi_nxv8i8_unmasked:
361 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
362 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
364 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)
365 ret <vscale x 8 x i8> %v
368 declare <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
370 define <vscale x 16 x i8> @vsaddu_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
371 ; CHECK-LABEL: vsaddu_vv_nxv16i8:
373 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
374 ; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t
376 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
377 ret <vscale x 16 x i8> %v
380 define <vscale x 16 x i8> @vsaddu_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
381 ; CHECK-LABEL: vsaddu_vv_nxv16i8_unmasked:
383 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
384 ; CHECK-NEXT: vsaddu.vv v8, v8, v10
386 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
387 ret <vscale x 16 x i8> %v
390 define <vscale x 16 x i8> @vsaddu_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
391 ; CHECK-LABEL: vsaddu_vx_nxv16i8:
393 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
394 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
396 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
397 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
398 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
399 ret <vscale x 16 x i8> %v
402 define <vscale x 16 x i8> @vsaddu_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
403 ; CHECK-LABEL: vsaddu_vx_nxv16i8_unmasked:
405 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
406 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
408 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
409 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
410 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
411 ret <vscale x 16 x i8> %v
414 define <vscale x 16 x i8> @vsaddu_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
415 ; CHECK-LABEL: vsaddu_vi_nxv16i8:
417 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
418 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
420 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> %m, i32 %evl)
421 ret <vscale x 16 x i8> %v
424 define <vscale x 16 x i8> @vsaddu_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
425 ; CHECK-LABEL: vsaddu_vi_nxv16i8_unmasked:
427 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
428 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
430 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)
431 ret <vscale x 16 x i8> %v
434 declare <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
436 define <vscale x 32 x i8> @vsaddu_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
437 ; CHECK-LABEL: vsaddu_vv_nxv32i8:
439 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
440 ; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t
442 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
443 ret <vscale x 32 x i8> %v
446 define <vscale x 32 x i8> @vsaddu_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
447 ; CHECK-LABEL: vsaddu_vv_nxv32i8_unmasked:
449 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
450 ; CHECK-NEXT: vsaddu.vv v8, v8, v12
452 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
453 ret <vscale x 32 x i8> %v
456 define <vscale x 32 x i8> @vsaddu_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
457 ; CHECK-LABEL: vsaddu_vx_nxv32i8:
459 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
460 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
462 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
463 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
464 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
465 ret <vscale x 32 x i8> %v
468 define <vscale x 32 x i8> @vsaddu_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
469 ; CHECK-LABEL: vsaddu_vx_nxv32i8_unmasked:
471 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
472 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
474 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
475 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
476 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
477 ret <vscale x 32 x i8> %v
480 define <vscale x 32 x i8> @vsaddu_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
481 ; CHECK-LABEL: vsaddu_vi_nxv32i8:
483 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
484 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
486 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> %m, i32 %evl)
487 ret <vscale x 32 x i8> %v
490 define <vscale x 32 x i8> @vsaddu_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
491 ; CHECK-LABEL: vsaddu_vi_nxv32i8_unmasked:
493 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
494 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
496 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)
497 ret <vscale x 32 x i8> %v
500 declare <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
502 define <vscale x 64 x i8> @vsaddu_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
503 ; CHECK-LABEL: vsaddu_vv_nxv64i8:
505 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
506 ; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t
508 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
509 ret <vscale x 64 x i8> %v
512 define <vscale x 64 x i8> @vsaddu_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
513 ; CHECK-LABEL: vsaddu_vv_nxv64i8_unmasked:
515 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
516 ; CHECK-NEXT: vsaddu.vv v8, v8, v16
518 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)
519 ret <vscale x 64 x i8> %v
522 define <vscale x 64 x i8> @vsaddu_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
523 ; CHECK-LABEL: vsaddu_vx_nxv64i8:
525 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
526 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
528 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
529 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
530 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
531 ret <vscale x 64 x i8> %v
534 define <vscale x 64 x i8> @vsaddu_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
535 ; CHECK-LABEL: vsaddu_vx_nxv64i8_unmasked:
537 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
538 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
540 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
541 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
542 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)
543 ret <vscale x 64 x i8> %v
546 define <vscale x 64 x i8> @vsaddu_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
547 ; CHECK-LABEL: vsaddu_vi_nxv64i8:
549 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
550 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
552 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> %m, i32 %evl)
553 ret <vscale x 64 x i8> %v
556 define <vscale x 64 x i8> @vsaddu_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
557 ; CHECK-LABEL: vsaddu_vi_nxv64i8_unmasked:
559 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
560 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
562 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> splat (i1 true), i32 %evl)
563 ret <vscale x 64 x i8> %v
566 ; Test that split-legalization works when the mask itself needs splitting.
568 declare <vscale x 128 x i8> @llvm.vp.uadd.sat.nxv128i8(<vscale x 128 x i8>, <vscale x 128 x i8>, <vscale x 128 x i1>, i32)
570 define <vscale x 128 x i8> @vsaddu_vi_nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i1> %m, i32 zeroext %evl) {
571 ; CHECK-LABEL: vsaddu_vi_nxv128i8:
573 ; CHECK-NEXT: vsetvli a2, zero, e8, m8, ta, ma
574 ; CHECK-NEXT: vmv1r.v v24, v0
575 ; CHECK-NEXT: vlm.v v0, (a0)
576 ; CHECK-NEXT: csrr a0, vlenb
577 ; CHECK-NEXT: slli a0, a0, 3
578 ; CHECK-NEXT: sub a2, a1, a0
579 ; CHECK-NEXT: sltu a3, a1, a2
580 ; CHECK-NEXT: addi a3, a3, -1
581 ; CHECK-NEXT: and a2, a3, a2
582 ; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma
583 ; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t
584 ; CHECK-NEXT: bltu a1, a0, .LBB50_2
585 ; CHECK-NEXT: # %bb.1:
586 ; CHECK-NEXT: mv a1, a0
587 ; CHECK-NEXT: .LBB50_2:
588 ; CHECK-NEXT: vmv1r.v v0, v24
589 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
590 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
592 %v = call <vscale x 128 x i8> @llvm.vp.uadd.sat.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> %m, i32 %evl)
593 ret <vscale x 128 x i8> %v
596 define <vscale x 128 x i8> @vsaddu_vi_nxv128i8_unmasked(<vscale x 128 x i8> %va, i32 zeroext %evl) {
597 ; CHECK-LABEL: vsaddu_vi_nxv128i8_unmasked:
599 ; CHECK-NEXT: csrr a1, vlenb
600 ; CHECK-NEXT: slli a1, a1, 3
601 ; CHECK-NEXT: sub a2, a0, a1
602 ; CHECK-NEXT: sltu a3, a0, a2
603 ; CHECK-NEXT: addi a3, a3, -1
604 ; CHECK-NEXT: and a2, a3, a2
605 ; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma
606 ; CHECK-NEXT: vsaddu.vi v16, v16, -1
607 ; CHECK-NEXT: bltu a0, a1, .LBB51_2
608 ; CHECK-NEXT: # %bb.1:
609 ; CHECK-NEXT: mv a0, a1
610 ; CHECK-NEXT: .LBB51_2:
611 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
612 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
614 %v = call <vscale x 128 x i8> @llvm.vp.uadd.sat.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> splat (i1 true), i32 %evl)
615 ret <vscale x 128 x i8> %v
618 declare <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
620 define <vscale x 1 x i16> @vsaddu_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
621 ; CHECK-LABEL: vsaddu_vv_nxv1i16:
623 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
624 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
626 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
627 ret <vscale x 1 x i16> %v
630 define <vscale x 1 x i16> @vsaddu_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
631 ; CHECK-LABEL: vsaddu_vv_nxv1i16_unmasked:
633 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
634 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
636 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
637 ret <vscale x 1 x i16> %v
640 define <vscale x 1 x i16> @vsaddu_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
641 ; CHECK-LABEL: vsaddu_vx_nxv1i16:
643 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
644 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
646 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
647 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
648 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
649 ret <vscale x 1 x i16> %v
652 define <vscale x 1 x i16> @vsaddu_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
653 ; CHECK-LABEL: vsaddu_vx_nxv1i16_unmasked:
655 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
656 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
658 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
659 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
660 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
661 ret <vscale x 1 x i16> %v
664 define <vscale x 1 x i16> @vsaddu_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
665 ; CHECK-LABEL: vsaddu_vi_nxv1i16:
667 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
668 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
670 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> %m, i32 %evl)
671 ret <vscale x 1 x i16> %v
674 define <vscale x 1 x i16> @vsaddu_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
675 ; CHECK-LABEL: vsaddu_vi_nxv1i16_unmasked:
677 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
678 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
680 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)
681 ret <vscale x 1 x i16> %v
684 declare <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
686 define <vscale x 2 x i16> @vsaddu_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
687 ; CHECK-LABEL: vsaddu_vv_nxv2i16:
689 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
690 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
692 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
693 ret <vscale x 2 x i16> %v
696 define <vscale x 2 x i16> @vsaddu_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
697 ; CHECK-LABEL: vsaddu_vv_nxv2i16_unmasked:
699 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
700 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
702 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
703 ret <vscale x 2 x i16> %v
706 define <vscale x 2 x i16> @vsaddu_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
707 ; CHECK-LABEL: vsaddu_vx_nxv2i16:
709 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
710 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
712 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
713 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
714 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
715 ret <vscale x 2 x i16> %v
718 define <vscale x 2 x i16> @vsaddu_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
719 ; CHECK-LABEL: vsaddu_vx_nxv2i16_unmasked:
721 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
722 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
724 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
725 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
726 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
727 ret <vscale x 2 x i16> %v
730 define <vscale x 2 x i16> @vsaddu_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
731 ; CHECK-LABEL: vsaddu_vi_nxv2i16:
733 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
734 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
736 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> %m, i32 %evl)
737 ret <vscale x 2 x i16> %v
740 define <vscale x 2 x i16> @vsaddu_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
741 ; CHECK-LABEL: vsaddu_vi_nxv2i16_unmasked:
743 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
744 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
746 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)
747 ret <vscale x 2 x i16> %v
750 declare <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
752 define <vscale x 4 x i16> @vsaddu_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
753 ; CHECK-LABEL: vsaddu_vv_nxv4i16:
755 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
756 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
758 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
759 ret <vscale x 4 x i16> %v
762 define <vscale x 4 x i16> @vsaddu_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
763 ; CHECK-LABEL: vsaddu_vv_nxv4i16_unmasked:
765 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
766 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
768 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
769 ret <vscale x 4 x i16> %v
772 define <vscale x 4 x i16> @vsaddu_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
773 ; CHECK-LABEL: vsaddu_vx_nxv4i16:
775 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
776 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
778 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
779 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
780 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
781 ret <vscale x 4 x i16> %v
784 define <vscale x 4 x i16> @vsaddu_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
785 ; CHECK-LABEL: vsaddu_vx_nxv4i16_unmasked:
787 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
788 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
790 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
791 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
792 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
793 ret <vscale x 4 x i16> %v
796 define <vscale x 4 x i16> @vsaddu_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
797 ; CHECK-LABEL: vsaddu_vi_nxv4i16:
799 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
800 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
802 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> %m, i32 %evl)
803 ret <vscale x 4 x i16> %v
806 define <vscale x 4 x i16> @vsaddu_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
807 ; CHECK-LABEL: vsaddu_vi_nxv4i16_unmasked:
809 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
810 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
812 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)
813 ret <vscale x 4 x i16> %v
816 declare <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
818 define <vscale x 8 x i16> @vsaddu_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
819 ; CHECK-LABEL: vsaddu_vv_nxv8i16:
821 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
822 ; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t
824 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
825 ret <vscale x 8 x i16> %v
828 define <vscale x 8 x i16> @vsaddu_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
829 ; CHECK-LABEL: vsaddu_vv_nxv8i16_unmasked:
831 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
832 ; CHECK-NEXT: vsaddu.vv v8, v8, v10
834 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
835 ret <vscale x 8 x i16> %v
838 define <vscale x 8 x i16> @vsaddu_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
839 ; CHECK-LABEL: vsaddu_vx_nxv8i16:
841 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
842 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
844 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
845 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
846 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
847 ret <vscale x 8 x i16> %v
850 define <vscale x 8 x i16> @vsaddu_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
851 ; CHECK-LABEL: vsaddu_vx_nxv8i16_unmasked:
853 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
854 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
856 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
857 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
858 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
859 ret <vscale x 8 x i16> %v
862 define <vscale x 8 x i16> @vsaddu_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
863 ; CHECK-LABEL: vsaddu_vi_nxv8i16:
865 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
866 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
868 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> %m, i32 %evl)
869 ret <vscale x 8 x i16> %v
872 define <vscale x 8 x i16> @vsaddu_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
873 ; CHECK-LABEL: vsaddu_vi_nxv8i16_unmasked:
875 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
876 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
878 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)
879 ret <vscale x 8 x i16> %v
882 declare <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
884 define <vscale x 16 x i16> @vsaddu_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
885 ; CHECK-LABEL: vsaddu_vv_nxv16i16:
887 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
888 ; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t
890 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
891 ret <vscale x 16 x i16> %v
894 define <vscale x 16 x i16> @vsaddu_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
895 ; CHECK-LABEL: vsaddu_vv_nxv16i16_unmasked:
897 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
898 ; CHECK-NEXT: vsaddu.vv v8, v8, v12
900 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
901 ret <vscale x 16 x i16> %v
904 define <vscale x 16 x i16> @vsaddu_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
905 ; CHECK-LABEL: vsaddu_vx_nxv16i16:
907 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
908 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
910 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
911 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
912 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
913 ret <vscale x 16 x i16> %v
916 define <vscale x 16 x i16> @vsaddu_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
917 ; CHECK-LABEL: vsaddu_vx_nxv16i16_unmasked:
919 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
920 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
922 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
923 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
924 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
925 ret <vscale x 16 x i16> %v
928 define <vscale x 16 x i16> @vsaddu_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
929 ; CHECK-LABEL: vsaddu_vi_nxv16i16:
931 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
932 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
934 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> %m, i32 %evl)
935 ret <vscale x 16 x i16> %v
938 define <vscale x 16 x i16> @vsaddu_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
939 ; CHECK-LABEL: vsaddu_vi_nxv16i16_unmasked:
941 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
942 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
944 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)
945 ret <vscale x 16 x i16> %v
948 declare <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
950 define <vscale x 32 x i16> @vsaddu_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
951 ; CHECK-LABEL: vsaddu_vv_nxv32i16:
953 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
954 ; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t
956 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
957 ret <vscale x 32 x i16> %v
960 define <vscale x 32 x i16> @vsaddu_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
961 ; CHECK-LABEL: vsaddu_vv_nxv32i16_unmasked:
963 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
964 ; CHECK-NEXT: vsaddu.vv v8, v8, v16
966 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
967 ret <vscale x 32 x i16> %v
970 define <vscale x 32 x i16> @vsaddu_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
971 ; CHECK-LABEL: vsaddu_vx_nxv32i16:
973 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
974 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
976 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
977 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
978 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
979 ret <vscale x 32 x i16> %v
982 define <vscale x 32 x i16> @vsaddu_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
983 ; CHECK-LABEL: vsaddu_vx_nxv32i16_unmasked:
985 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
986 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
988 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
989 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
990 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
991 ret <vscale x 32 x i16> %v
994 define <vscale x 32 x i16> @vsaddu_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
995 ; CHECK-LABEL: vsaddu_vi_nxv32i16:
997 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
998 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1000 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> %m, i32 %evl)
1001 ret <vscale x 32 x i16> %v
1004 define <vscale x 32 x i16> @vsaddu_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
1005 ; CHECK-LABEL: vsaddu_vi_nxv32i16_unmasked:
1007 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
1008 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1010 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)
1011 ret <vscale x 32 x i16> %v
1014 declare <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
1016 define <vscale x 1 x i32> @vsaddu_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1017 ; CHECK-LABEL: vsaddu_vv_nxv1i32:
1019 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1020 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
1022 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
1023 ret <vscale x 1 x i32> %v
1026 define <vscale x 1 x i32> @vsaddu_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
1027 ; CHECK-LABEL: vsaddu_vv_nxv1i32_unmasked:
1029 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1030 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
1032 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1033 ret <vscale x 1 x i32> %v
1036 define <vscale x 1 x i32> @vsaddu_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1037 ; CHECK-LABEL: vsaddu_vx_nxv1i32:
1039 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
1040 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
1042 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1043 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1044 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
1045 ret <vscale x 1 x i32> %v
1048 define <vscale x 1 x i32> @vsaddu_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
1049 ; CHECK-LABEL: vsaddu_vx_nxv1i32_unmasked:
1051 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
1052 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
1054 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1055 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1056 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1057 ret <vscale x 1 x i32> %v
1060 define <vscale x 1 x i32> @vsaddu_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1061 ; CHECK-LABEL: vsaddu_vi_nxv1i32:
1063 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1064 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1066 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> %m, i32 %evl)
1067 ret <vscale x 1 x i32> %v
1070 define <vscale x 1 x i32> @vsaddu_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
1071 ; CHECK-LABEL: vsaddu_vi_nxv1i32_unmasked:
1073 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
1074 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1076 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1077 ret <vscale x 1 x i32> %v
1080 declare <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
1082 define <vscale x 2 x i32> @vsaddu_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1083 ; CHECK-LABEL: vsaddu_vv_nxv2i32:
1085 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1086 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
1088 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
1089 ret <vscale x 2 x i32> %v
1092 define <vscale x 2 x i32> @vsaddu_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
1093 ; CHECK-LABEL: vsaddu_vv_nxv2i32_unmasked:
1095 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1096 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
1098 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1099 ret <vscale x 2 x i32> %v
1102 define <vscale x 2 x i32> @vsaddu_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1103 ; CHECK-LABEL: vsaddu_vx_nxv2i32:
1105 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
1106 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
1108 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1109 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1110 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
1111 ret <vscale x 2 x i32> %v
1114 define <vscale x 2 x i32> @vsaddu_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
1115 ; CHECK-LABEL: vsaddu_vx_nxv2i32_unmasked:
1117 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
1118 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
1120 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1121 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1122 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1123 ret <vscale x 2 x i32> %v
1126 define <vscale x 2 x i32> @vsaddu_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1127 ; CHECK-LABEL: vsaddu_vi_nxv2i32:
1129 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1130 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1132 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> %m, i32 %evl)
1133 ret <vscale x 2 x i32> %v
1136 define <vscale x 2 x i32> @vsaddu_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1137 ; CHECK-LABEL: vsaddu_vi_nxv2i32_unmasked:
1139 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1140 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1142 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1143 ret <vscale x 2 x i32> %v
1146 declare <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1148 define <vscale x 4 x i32> @vsaddu_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1149 ; CHECK-LABEL: vsaddu_vv_nxv4i32:
1151 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1152 ; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t
1154 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
1155 ret <vscale x 4 x i32> %v
1158 define <vscale x 4 x i32> @vsaddu_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
1159 ; CHECK-LABEL: vsaddu_vv_nxv4i32_unmasked:
1161 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1162 ; CHECK-NEXT: vsaddu.vv v8, v8, v10
1164 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1165 ret <vscale x 4 x i32> %v
1168 define <vscale x 4 x i32> @vsaddu_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1169 ; CHECK-LABEL: vsaddu_vx_nxv4i32:
1171 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1172 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
1174 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1175 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1176 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
1177 ret <vscale x 4 x i32> %v
1180 define <vscale x 4 x i32> @vsaddu_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1181 ; CHECK-LABEL: vsaddu_vx_nxv4i32_unmasked:
1183 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1184 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
1186 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1187 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1188 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1189 ret <vscale x 4 x i32> %v
1192 define <vscale x 4 x i32> @vsaddu_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1193 ; CHECK-LABEL: vsaddu_vi_nxv4i32:
1195 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1196 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1198 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> %m, i32 %evl)
1199 ret <vscale x 4 x i32> %v
1202 define <vscale x 4 x i32> @vsaddu_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1203 ; CHECK-LABEL: vsaddu_vi_nxv4i32_unmasked:
1205 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1206 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1208 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1209 ret <vscale x 4 x i32> %v
1212 declare <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1214 define <vscale x 8 x i32> @vsaddu_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1215 ; CHECK-LABEL: vsaddu_vv_nxv8i32:
1217 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1218 ; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t
1220 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
1221 ret <vscale x 8 x i32> %v
1224 define <vscale x 8 x i32> @vsaddu_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
1225 ; CHECK-LABEL: vsaddu_vv_nxv8i32_unmasked:
1227 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1228 ; CHECK-NEXT: vsaddu.vv v8, v8, v12
1230 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1231 ret <vscale x 8 x i32> %v
1234 define <vscale x 8 x i32> @vsaddu_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1235 ; CHECK-LABEL: vsaddu_vx_nxv8i32:
1237 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1238 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
1240 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1241 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1242 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
1243 ret <vscale x 8 x i32> %v
1246 define <vscale x 8 x i32> @vsaddu_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1247 ; CHECK-LABEL: vsaddu_vx_nxv8i32_unmasked:
1249 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1250 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
1252 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1253 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1254 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1255 ret <vscale x 8 x i32> %v
1258 define <vscale x 8 x i32> @vsaddu_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1259 ; CHECK-LABEL: vsaddu_vi_nxv8i32:
1261 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1262 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1264 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> %m, i32 %evl)
1265 ret <vscale x 8 x i32> %v
1268 define <vscale x 8 x i32> @vsaddu_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1269 ; CHECK-LABEL: vsaddu_vi_nxv8i32_unmasked:
1271 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1272 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1274 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1275 ret <vscale x 8 x i32> %v
1278 declare <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1280 define <vscale x 16 x i32> @vsaddu_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1281 ; CHECK-LABEL: vsaddu_vv_nxv16i32:
1283 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1284 ; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t
1286 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
1287 ret <vscale x 16 x i32> %v
1290 define <vscale x 16 x i32> @vsaddu_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
1291 ; CHECK-LABEL: vsaddu_vv_nxv16i32_unmasked:
1293 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1294 ; CHECK-NEXT: vsaddu.vv v8, v8, v16
1296 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1297 ret <vscale x 16 x i32> %v
1300 define <vscale x 16 x i32> @vsaddu_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1301 ; CHECK-LABEL: vsaddu_vx_nxv16i32:
1303 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1304 ; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t
1306 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1307 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1308 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
1309 ret <vscale x 16 x i32> %v
1312 define <vscale x 16 x i32> @vsaddu_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1313 ; CHECK-LABEL: vsaddu_vx_nxv16i32_unmasked:
1315 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1316 ; CHECK-NEXT: vsaddu.vx v8, v8, a0
1318 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1319 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1320 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1321 ret <vscale x 16 x i32> %v
1324 define <vscale x 16 x i32> @vsaddu_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1325 ; CHECK-LABEL: vsaddu_vi_nxv16i32:
1327 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1328 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1330 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> %m, i32 %evl)
1331 ret <vscale x 16 x i32> %v
1334 define <vscale x 16 x i32> @vsaddu_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1335 ; CHECK-LABEL: vsaddu_vi_nxv16i32_unmasked:
1337 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1338 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1340 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)
1341 ret <vscale x 16 x i32> %v
1344 ; Test that split-legalization works then the mask needs manual splitting.
1346 declare <vscale x 32 x i32> @llvm.vp.uadd.sat.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i32>, <vscale x 32 x i1>, i32)
1348 define <vscale x 32 x i32> @vsaddu_vi_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
1349 ; CHECK-LABEL: vsaddu_vi_nxv32i32:
1351 ; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
1352 ; CHECK-NEXT: vmv1r.v v24, v0
1353 ; CHECK-NEXT: csrr a1, vlenb
1354 ; CHECK-NEXT: srli a2, a1, 2
1355 ; CHECK-NEXT: slli a1, a1, 1
1356 ; CHECK-NEXT: vslidedown.vx v0, v0, a2
1357 ; CHECK-NEXT: sub a2, a0, a1
1358 ; CHECK-NEXT: sltu a3, a0, a2
1359 ; CHECK-NEXT: addi a3, a3, -1
1360 ; CHECK-NEXT: and a2, a3, a2
1361 ; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma
1362 ; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t
1363 ; CHECK-NEXT: bltu a0, a1, .LBB118_2
1364 ; CHECK-NEXT: # %bb.1:
1365 ; CHECK-NEXT: mv a0, a1
1366 ; CHECK-NEXT: .LBB118_2:
1367 ; CHECK-NEXT: vmv1r.v v0, v24
1368 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1369 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1371 %v = call <vscale x 32 x i32> @llvm.vp.uadd.sat.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> %m, i32 %evl)
1372 ret <vscale x 32 x i32> %v
1375 define <vscale x 32 x i32> @vsaddu_vi_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {
1376 ; CHECK-LABEL: vsaddu_vi_nxv32i32_unmasked:
1378 ; CHECK-NEXT: csrr a1, vlenb
1379 ; CHECK-NEXT: slli a1, a1, 1
1380 ; CHECK-NEXT: sub a2, a0, a1
1381 ; CHECK-NEXT: sltu a3, a0, a2
1382 ; CHECK-NEXT: addi a3, a3, -1
1383 ; CHECK-NEXT: and a2, a3, a2
1384 ; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma
1385 ; CHECK-NEXT: vsaddu.vi v16, v16, -1
1386 ; CHECK-NEXT: bltu a0, a1, .LBB119_2
1387 ; CHECK-NEXT: # %bb.1:
1388 ; CHECK-NEXT: mv a0, a1
1389 ; CHECK-NEXT: .LBB119_2:
1390 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1391 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1393 %v = call <vscale x 32 x i32> @llvm.vp.uadd.sat.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)
1394 ret <vscale x 32 x i32> %v
1397 declare <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1399 define <vscale x 1 x i64> @vsaddu_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1400 ; CHECK-LABEL: vsaddu_vv_nxv1i64:
1402 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1403 ; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t
1405 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
1406 ret <vscale x 1 x i64> %v
1409 define <vscale x 1 x i64> @vsaddu_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
1410 ; CHECK-LABEL: vsaddu_vv_nxv1i64_unmasked:
1412 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1413 ; CHECK-NEXT: vsaddu.vv v8, v8, v9
1415 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1416 ret <vscale x 1 x i64> %v
1419 define <vscale x 1 x i64> @vsaddu_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1420 ; RV32-LABEL: vsaddu_vx_nxv1i64:
1422 ; RV32-NEXT: addi sp, sp, -16
1423 ; RV32-NEXT: .cfi_def_cfa_offset 16
1424 ; RV32-NEXT: sw a0, 8(sp)
1425 ; RV32-NEXT: sw a1, 12(sp)
1426 ; RV32-NEXT: addi a0, sp, 8
1427 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1428 ; RV32-NEXT: vlse64.v v9, (a0), zero
1429 ; RV32-NEXT: vsaddu.vv v8, v8, v9, v0.t
1430 ; RV32-NEXT: addi sp, sp, 16
1431 ; RV32-NEXT: .cfi_def_cfa_offset 0
1434 ; RV64-LABEL: vsaddu_vx_nxv1i64:
1436 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1437 ; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t
1439 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1440 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1441 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1442 ret <vscale x 1 x i64> %v
1445 define <vscale x 1 x i64> @vsaddu_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1446 ; RV32-LABEL: vsaddu_vx_nxv1i64_unmasked:
1448 ; RV32-NEXT: addi sp, sp, -16
1449 ; RV32-NEXT: .cfi_def_cfa_offset 16
1450 ; RV32-NEXT: sw a0, 8(sp)
1451 ; RV32-NEXT: sw a1, 12(sp)
1452 ; RV32-NEXT: addi a0, sp, 8
1453 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1454 ; RV32-NEXT: vlse64.v v9, (a0), zero
1455 ; RV32-NEXT: vsaddu.vv v8, v8, v9
1456 ; RV32-NEXT: addi sp, sp, 16
1457 ; RV32-NEXT: .cfi_def_cfa_offset 0
1460 ; RV64-LABEL: vsaddu_vx_nxv1i64_unmasked:
1462 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1463 ; RV64-NEXT: vsaddu.vx v8, v8, a0
1465 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1466 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1467 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1468 ret <vscale x 1 x i64> %v
1471 define <vscale x 1 x i64> @vsaddu_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1472 ; CHECK-LABEL: vsaddu_vi_nxv1i64:
1474 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1475 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1477 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> %m, i32 %evl)
1478 ret <vscale x 1 x i64> %v
1481 define <vscale x 1 x i64> @vsaddu_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1482 ; CHECK-LABEL: vsaddu_vi_nxv1i64_unmasked:
1484 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1485 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1487 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1488 ret <vscale x 1 x i64> %v
1491 declare <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1493 define <vscale x 2 x i64> @vsaddu_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1494 ; CHECK-LABEL: vsaddu_vv_nxv2i64:
1496 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1497 ; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t
1499 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1500 ret <vscale x 2 x i64> %v
1503 define <vscale x 2 x i64> @vsaddu_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1504 ; CHECK-LABEL: vsaddu_vv_nxv2i64_unmasked:
1506 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1507 ; CHECK-NEXT: vsaddu.vv v8, v8, v10
1509 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1510 ret <vscale x 2 x i64> %v
1513 define <vscale x 2 x i64> @vsaddu_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1514 ; RV32-LABEL: vsaddu_vx_nxv2i64:
1516 ; RV32-NEXT: addi sp, sp, -16
1517 ; RV32-NEXT: .cfi_def_cfa_offset 16
1518 ; RV32-NEXT: sw a0, 8(sp)
1519 ; RV32-NEXT: sw a1, 12(sp)
1520 ; RV32-NEXT: addi a0, sp, 8
1521 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1522 ; RV32-NEXT: vlse64.v v10, (a0), zero
1523 ; RV32-NEXT: vsaddu.vv v8, v8, v10, v0.t
1524 ; RV32-NEXT: addi sp, sp, 16
1525 ; RV32-NEXT: .cfi_def_cfa_offset 0
1528 ; RV64-LABEL: vsaddu_vx_nxv2i64:
1530 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1531 ; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t
1533 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1534 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1535 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1536 ret <vscale x 2 x i64> %v
1539 define <vscale x 2 x i64> @vsaddu_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1540 ; RV32-LABEL: vsaddu_vx_nxv2i64_unmasked:
1542 ; RV32-NEXT: addi sp, sp, -16
1543 ; RV32-NEXT: .cfi_def_cfa_offset 16
1544 ; RV32-NEXT: sw a0, 8(sp)
1545 ; RV32-NEXT: sw a1, 12(sp)
1546 ; RV32-NEXT: addi a0, sp, 8
1547 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1548 ; RV32-NEXT: vlse64.v v10, (a0), zero
1549 ; RV32-NEXT: vsaddu.vv v8, v8, v10
1550 ; RV32-NEXT: addi sp, sp, 16
1551 ; RV32-NEXT: .cfi_def_cfa_offset 0
1554 ; RV64-LABEL: vsaddu_vx_nxv2i64_unmasked:
1556 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1557 ; RV64-NEXT: vsaddu.vx v8, v8, a0
1559 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1560 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1561 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1562 ret <vscale x 2 x i64> %v
1565 define <vscale x 2 x i64> @vsaddu_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1566 ; CHECK-LABEL: vsaddu_vi_nxv2i64:
1568 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1569 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1571 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> %m, i32 %evl)
1572 ret <vscale x 2 x i64> %v
1575 define <vscale x 2 x i64> @vsaddu_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1576 ; CHECK-LABEL: vsaddu_vi_nxv2i64_unmasked:
1578 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1579 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1581 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1582 ret <vscale x 2 x i64> %v
1585 declare <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1587 define <vscale x 4 x i64> @vsaddu_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1588 ; CHECK-LABEL: vsaddu_vv_nxv4i64:
1590 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1591 ; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t
1593 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1594 ret <vscale x 4 x i64> %v
1597 define <vscale x 4 x i64> @vsaddu_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1598 ; CHECK-LABEL: vsaddu_vv_nxv4i64_unmasked:
1600 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1601 ; CHECK-NEXT: vsaddu.vv v8, v8, v12
1603 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1604 ret <vscale x 4 x i64> %v
1607 define <vscale x 4 x i64> @vsaddu_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1608 ; RV32-LABEL: vsaddu_vx_nxv4i64:
1610 ; RV32-NEXT: addi sp, sp, -16
1611 ; RV32-NEXT: .cfi_def_cfa_offset 16
1612 ; RV32-NEXT: sw a0, 8(sp)
1613 ; RV32-NEXT: sw a1, 12(sp)
1614 ; RV32-NEXT: addi a0, sp, 8
1615 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1616 ; RV32-NEXT: vlse64.v v12, (a0), zero
1617 ; RV32-NEXT: vsaddu.vv v8, v8, v12, v0.t
1618 ; RV32-NEXT: addi sp, sp, 16
1619 ; RV32-NEXT: .cfi_def_cfa_offset 0
1622 ; RV64-LABEL: vsaddu_vx_nxv4i64:
1624 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1625 ; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t
1627 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1628 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1629 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1630 ret <vscale x 4 x i64> %v
1633 define <vscale x 4 x i64> @vsaddu_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1634 ; RV32-LABEL: vsaddu_vx_nxv4i64_unmasked:
1636 ; RV32-NEXT: addi sp, sp, -16
1637 ; RV32-NEXT: .cfi_def_cfa_offset 16
1638 ; RV32-NEXT: sw a0, 8(sp)
1639 ; RV32-NEXT: sw a1, 12(sp)
1640 ; RV32-NEXT: addi a0, sp, 8
1641 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1642 ; RV32-NEXT: vlse64.v v12, (a0), zero
1643 ; RV32-NEXT: vsaddu.vv v8, v8, v12
1644 ; RV32-NEXT: addi sp, sp, 16
1645 ; RV32-NEXT: .cfi_def_cfa_offset 0
1648 ; RV64-LABEL: vsaddu_vx_nxv4i64_unmasked:
1650 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1651 ; RV64-NEXT: vsaddu.vx v8, v8, a0
1653 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1654 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1655 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1656 ret <vscale x 4 x i64> %v
1659 define <vscale x 4 x i64> @vsaddu_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1660 ; CHECK-LABEL: vsaddu_vi_nxv4i64:
1662 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1663 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1665 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> %m, i32 %evl)
1666 ret <vscale x 4 x i64> %v
1669 define <vscale x 4 x i64> @vsaddu_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1670 ; CHECK-LABEL: vsaddu_vi_nxv4i64_unmasked:
1672 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1673 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1675 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1676 ret <vscale x 4 x i64> %v
1679 declare <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1681 define <vscale x 8 x i64> @vsaddu_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1682 ; CHECK-LABEL: vsaddu_vv_nxv8i64:
1684 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1685 ; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t
1687 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1688 ret <vscale x 8 x i64> %v
1691 define <vscale x 8 x i64> @vsaddu_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1692 ; CHECK-LABEL: vsaddu_vv_nxv8i64_unmasked:
1694 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1695 ; CHECK-NEXT: vsaddu.vv v8, v8, v16
1697 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1698 ret <vscale x 8 x i64> %v
1701 define <vscale x 8 x i64> @vsaddu_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1702 ; RV32-LABEL: vsaddu_vx_nxv8i64:
1704 ; RV32-NEXT: addi sp, sp, -16
1705 ; RV32-NEXT: .cfi_def_cfa_offset 16
1706 ; RV32-NEXT: sw a0, 8(sp)
1707 ; RV32-NEXT: sw a1, 12(sp)
1708 ; RV32-NEXT: addi a0, sp, 8
1709 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1710 ; RV32-NEXT: vlse64.v v16, (a0), zero
1711 ; RV32-NEXT: vsaddu.vv v8, v8, v16, v0.t
1712 ; RV32-NEXT: addi sp, sp, 16
1713 ; RV32-NEXT: .cfi_def_cfa_offset 0
1716 ; RV64-LABEL: vsaddu_vx_nxv8i64:
1718 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1719 ; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t
1721 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1722 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1723 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1724 ret <vscale x 8 x i64> %v
1727 define <vscale x 8 x i64> @vsaddu_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1728 ; RV32-LABEL: vsaddu_vx_nxv8i64_unmasked:
1730 ; RV32-NEXT: addi sp, sp, -16
1731 ; RV32-NEXT: .cfi_def_cfa_offset 16
1732 ; RV32-NEXT: sw a0, 8(sp)
1733 ; RV32-NEXT: sw a1, 12(sp)
1734 ; RV32-NEXT: addi a0, sp, 8
1735 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1736 ; RV32-NEXT: vlse64.v v16, (a0), zero
1737 ; RV32-NEXT: vsaddu.vv v8, v8, v16
1738 ; RV32-NEXT: addi sp, sp, 16
1739 ; RV32-NEXT: .cfi_def_cfa_offset 0
1742 ; RV64-LABEL: vsaddu_vx_nxv8i64_unmasked:
1744 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1745 ; RV64-NEXT: vsaddu.vx v8, v8, a0
1747 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1748 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1749 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1750 ret <vscale x 8 x i64> %v
1753 define <vscale x 8 x i64> @vsaddu_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1754 ; CHECK-LABEL: vsaddu_vi_nxv8i64:
1756 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1757 ; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t
1759 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> %m, i32 %evl)
1760 ret <vscale x 8 x i64> %v
1763 define <vscale x 8 x i64> @vsaddu_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1764 ; CHECK-LABEL: vsaddu_vi_nxv8i64_unmasked:
1766 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1767 ; CHECK-NEXT: vsaddu.vi v8, v8, -1
1769 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1770 ret <vscale x 8 x i64> %v