1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV32
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV64
4 ; RUN: llc -mtriple=riscv32 -mattr=+v,+zvkb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVKB,CHECK-ZVKB-NOZBB,CHECK-ZVKB32
5 ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvkb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVKB,CHECK-ZVKB-NOZBB,CHECK-ZVKB64
6 ; RUN: llc -mtriple=riscv32 -mattr=+v,+zvkb,+zbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVKB,CHECK-ZVKB-ZBB,CHECK-ZVKB32
7 ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvkb,+zbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVKB,CHECK-ZVKB-ZBB,CHECK-ZVKB64
9 define <vscale x 1 x i8> @vandn_vv_nxv1i8(<vscale x 1 x i8> %x, <vscale x 1 x i8> %y) {
10 ; CHECK-LABEL: vandn_vv_nxv1i8:
12 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
13 ; CHECK-NEXT: vnot.v v8, v8
14 ; CHECK-NEXT: vand.vv v8, v8, v9
17 ; CHECK-ZVKB-LABEL: vandn_vv_nxv1i8:
18 ; CHECK-ZVKB: # %bb.0:
19 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
20 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
21 ; CHECK-ZVKB-NEXT: ret
22 %a = xor <vscale x 1 x i8> %x, splat (i8 -1)
23 %b = and <vscale x 1 x i8> %a, %y
24 ret <vscale x 1 x i8> %b
27 define <vscale x 1 x i8> @vandn_vv_swapped_nxv1i8(<vscale x 1 x i8> %x, <vscale x 1 x i8> %y) {
28 ; CHECK-LABEL: vandn_vv_swapped_nxv1i8:
30 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
31 ; CHECK-NEXT: vnot.v v8, v8
32 ; CHECK-NEXT: vand.vv v8, v9, v8
35 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv1i8:
36 ; CHECK-ZVKB: # %bb.0:
37 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
38 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
39 ; CHECK-ZVKB-NEXT: ret
40 %a = xor <vscale x 1 x i8> %x, splat (i8 -1)
41 %b = and <vscale x 1 x i8> %y, %a
42 ret <vscale x 1 x i8> %b
45 define <vscale x 1 x i8> @vandn_vx_nxv1i8(i8 %x, <vscale x 1 x i8> %y) {
46 ; CHECK-LABEL: vandn_vx_nxv1i8:
48 ; CHECK-NEXT: not a0, a0
49 ; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
50 ; CHECK-NEXT: vand.vx v8, v8, a0
53 ; CHECK-ZVKB-LABEL: vandn_vx_nxv1i8:
54 ; CHECK-ZVKB: # %bb.0:
55 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
56 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
57 ; CHECK-ZVKB-NEXT: ret
59 %head = insertelement <vscale x 1 x i8> poison, i8 %a, i32 0
60 %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
61 %b = and <vscale x 1 x i8> %splat, %y
62 ret <vscale x 1 x i8> %b
65 define <vscale x 1 x i8> @vandn_vx_swapped_nxv1i8(i8 %x, <vscale x 1 x i8> %y) {
66 ; CHECK-LABEL: vandn_vx_swapped_nxv1i8:
68 ; CHECK-NEXT: not a0, a0
69 ; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
70 ; CHECK-NEXT: vand.vx v8, v8, a0
73 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv1i8:
74 ; CHECK-ZVKB: # %bb.0:
75 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
76 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
77 ; CHECK-ZVKB-NEXT: ret
79 %head = insertelement <vscale x 1 x i8> poison, i8 %a, i32 0
80 %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
81 %b = and <vscale x 1 x i8> %splat, %y
82 ret <vscale x 1 x i8> %b
85 define <vscale x 2 x i8> @vandn_vv_nxv2i8(<vscale x 2 x i8> %x, <vscale x 2 x i8> %y) {
86 ; CHECK-LABEL: vandn_vv_nxv2i8:
88 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
89 ; CHECK-NEXT: vnot.v v8, v8
90 ; CHECK-NEXT: vand.vv v8, v8, v9
93 ; CHECK-ZVKB-LABEL: vandn_vv_nxv2i8:
94 ; CHECK-ZVKB: # %bb.0:
95 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
96 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
97 ; CHECK-ZVKB-NEXT: ret
98 %a = xor <vscale x 2 x i8> %x, splat (i8 -1)
99 %b = and <vscale x 2 x i8> %a, %y
100 ret <vscale x 2 x i8> %b
103 define <vscale x 2 x i8> @vandn_vv_swapped_nxv2i8(<vscale x 2 x i8> %x, <vscale x 2 x i8> %y) {
104 ; CHECK-LABEL: vandn_vv_swapped_nxv2i8:
106 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
107 ; CHECK-NEXT: vnot.v v8, v8
108 ; CHECK-NEXT: vand.vv v8, v9, v8
111 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv2i8:
112 ; CHECK-ZVKB: # %bb.0:
113 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
114 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
115 ; CHECK-ZVKB-NEXT: ret
116 %a = xor <vscale x 2 x i8> %x, splat (i8 -1)
117 %b = and <vscale x 2 x i8> %y, %a
118 ret <vscale x 2 x i8> %b
121 define <vscale x 2 x i8> @vandn_vx_nxv2i8(i8 %x, <vscale x 2 x i8> %y) {
122 ; CHECK-LABEL: vandn_vx_nxv2i8:
124 ; CHECK-NEXT: not a0, a0
125 ; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
126 ; CHECK-NEXT: vand.vx v8, v8, a0
129 ; CHECK-ZVKB-LABEL: vandn_vx_nxv2i8:
130 ; CHECK-ZVKB: # %bb.0:
131 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
132 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
133 ; CHECK-ZVKB-NEXT: ret
135 %head = insertelement <vscale x 2 x i8> poison, i8 %a, i32 0
136 %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
137 %b = and <vscale x 2 x i8> %splat, %y
138 ret <vscale x 2 x i8> %b
141 define <vscale x 2 x i8> @vandn_vx_swapped_nxv2i8(i8 %x, <vscale x 2 x i8> %y) {
142 ; CHECK-LABEL: vandn_vx_swapped_nxv2i8:
144 ; CHECK-NEXT: not a0, a0
145 ; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
146 ; CHECK-NEXT: vand.vx v8, v8, a0
149 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv2i8:
150 ; CHECK-ZVKB: # %bb.0:
151 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, mf4, ta, ma
152 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
153 ; CHECK-ZVKB-NEXT: ret
155 %head = insertelement <vscale x 2 x i8> poison, i8 %a, i32 0
156 %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
157 %b = and <vscale x 2 x i8> %splat, %y
158 ret <vscale x 2 x i8> %b
161 define <vscale x 4 x i8> @vandn_vv_nxv4i8(<vscale x 4 x i8> %x, <vscale x 4 x i8> %y) {
162 ; CHECK-LABEL: vandn_vv_nxv4i8:
164 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
165 ; CHECK-NEXT: vnot.v v8, v8
166 ; CHECK-NEXT: vand.vv v8, v8, v9
169 ; CHECK-ZVKB-LABEL: vandn_vv_nxv4i8:
170 ; CHECK-ZVKB: # %bb.0:
171 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
172 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
173 ; CHECK-ZVKB-NEXT: ret
174 %a = xor <vscale x 4 x i8> %x, splat (i8 -1)
175 %b = and <vscale x 4 x i8> %a, %y
176 ret <vscale x 4 x i8> %b
179 define <vscale x 4 x i8> @vandn_vv_swapped_nxv4i8(<vscale x 4 x i8> %x, <vscale x 4 x i8> %y) {
180 ; CHECK-LABEL: vandn_vv_swapped_nxv4i8:
182 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
183 ; CHECK-NEXT: vnot.v v8, v8
184 ; CHECK-NEXT: vand.vv v8, v9, v8
187 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv4i8:
188 ; CHECK-ZVKB: # %bb.0:
189 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
190 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
191 ; CHECK-ZVKB-NEXT: ret
192 %a = xor <vscale x 4 x i8> %x, splat (i8 -1)
193 %b = and <vscale x 4 x i8> %y, %a
194 ret <vscale x 4 x i8> %b
197 define <vscale x 4 x i8> @vandn_vx_nxv4i8(i8 %x, <vscale x 4 x i8> %y) {
198 ; CHECK-LABEL: vandn_vx_nxv4i8:
200 ; CHECK-NEXT: not a0, a0
201 ; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
202 ; CHECK-NEXT: vand.vx v8, v8, a0
205 ; CHECK-ZVKB-LABEL: vandn_vx_nxv4i8:
206 ; CHECK-ZVKB: # %bb.0:
207 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
208 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
209 ; CHECK-ZVKB-NEXT: ret
211 %head = insertelement <vscale x 4 x i8> poison, i8 %a, i32 0
212 %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
213 %b = and <vscale x 4 x i8> %splat, %y
214 ret <vscale x 4 x i8> %b
217 define <vscale x 4 x i8> @vandn_vx_swapped_nxv4i8(i8 %x, <vscale x 4 x i8> %y) {
218 ; CHECK-LABEL: vandn_vx_swapped_nxv4i8:
220 ; CHECK-NEXT: not a0, a0
221 ; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
222 ; CHECK-NEXT: vand.vx v8, v8, a0
225 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv4i8:
226 ; CHECK-ZVKB: # %bb.0:
227 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, mf2, ta, ma
228 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
229 ; CHECK-ZVKB-NEXT: ret
231 %head = insertelement <vscale x 4 x i8> poison, i8 %a, i32 0
232 %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
233 %b = and <vscale x 4 x i8> %splat, %y
234 ret <vscale x 4 x i8> %b
237 define <vscale x 8 x i8> @vandn_vv_nxv8i8(<vscale x 8 x i8> %x, <vscale x 8 x i8> %y) {
238 ; CHECK-LABEL: vandn_vv_nxv8i8:
240 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
241 ; CHECK-NEXT: vnot.v v8, v8
242 ; CHECK-NEXT: vand.vv v8, v8, v9
245 ; CHECK-ZVKB-LABEL: vandn_vv_nxv8i8:
246 ; CHECK-ZVKB: # %bb.0:
247 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, m1, ta, ma
248 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
249 ; CHECK-ZVKB-NEXT: ret
250 %a = xor <vscale x 8 x i8> %x, splat (i8 -1)
251 %b = and <vscale x 8 x i8> %a, %y
252 ret <vscale x 8 x i8> %b
255 define <vscale x 8 x i8> @vandn_vv_swapped_nxv8i8(<vscale x 8 x i8> %x, <vscale x 8 x i8> %y) {
256 ; CHECK-LABEL: vandn_vv_swapped_nxv8i8:
258 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
259 ; CHECK-NEXT: vnot.v v8, v8
260 ; CHECK-NEXT: vand.vv v8, v9, v8
263 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv8i8:
264 ; CHECK-ZVKB: # %bb.0:
265 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, m1, ta, ma
266 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
267 ; CHECK-ZVKB-NEXT: ret
268 %a = xor <vscale x 8 x i8> %x, splat (i8 -1)
269 %b = and <vscale x 8 x i8> %y, %a
270 ret <vscale x 8 x i8> %b
273 define <vscale x 8 x i8> @vandn_vx_nxv8i8(i8 %x, <vscale x 8 x i8> %y) {
274 ; CHECK-LABEL: vandn_vx_nxv8i8:
276 ; CHECK-NEXT: not a0, a0
277 ; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma
278 ; CHECK-NEXT: vand.vx v8, v8, a0
281 ; CHECK-ZVKB-LABEL: vandn_vx_nxv8i8:
282 ; CHECK-ZVKB: # %bb.0:
283 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, m1, ta, ma
284 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
285 ; CHECK-ZVKB-NEXT: ret
287 %head = insertelement <vscale x 8 x i8> poison, i8 %a, i32 0
288 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
289 %b = and <vscale x 8 x i8> %splat, %y
290 ret <vscale x 8 x i8> %b
293 define <vscale x 8 x i8> @vandn_vx_swapped_nxv8i8(i8 %x, <vscale x 8 x i8> %y) {
294 ; CHECK-LABEL: vandn_vx_swapped_nxv8i8:
296 ; CHECK-NEXT: not a0, a0
297 ; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma
298 ; CHECK-NEXT: vand.vx v8, v8, a0
301 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv8i8:
302 ; CHECK-ZVKB: # %bb.0:
303 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, m1, ta, ma
304 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
305 ; CHECK-ZVKB-NEXT: ret
307 %head = insertelement <vscale x 8 x i8> poison, i8 %a, i32 0
308 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
309 %b = and <vscale x 8 x i8> %splat, %y
310 ret <vscale x 8 x i8> %b
313 define <vscale x 16 x i8> @vandn_vv_nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {
314 ; CHECK-LABEL: vandn_vv_nxv16i8:
316 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
317 ; CHECK-NEXT: vnot.v v8, v8
318 ; CHECK-NEXT: vand.vv v8, v8, v10
321 ; CHECK-ZVKB-LABEL: vandn_vv_nxv16i8:
322 ; CHECK-ZVKB: # %bb.0:
323 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, m2, ta, ma
324 ; CHECK-ZVKB-NEXT: vandn.vv v8, v10, v8
325 ; CHECK-ZVKB-NEXT: ret
326 %a = xor <vscale x 16 x i8> %x, splat (i8 -1)
327 %b = and <vscale x 16 x i8> %a, %y
328 ret <vscale x 16 x i8> %b
331 define <vscale x 16 x i8> @vandn_vv_swapped_nxv16i8(<vscale x 16 x i8> %x, <vscale x 16 x i8> %y) {
332 ; CHECK-LABEL: vandn_vv_swapped_nxv16i8:
334 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
335 ; CHECK-NEXT: vnot.v v8, v8
336 ; CHECK-NEXT: vand.vv v8, v10, v8
339 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv16i8:
340 ; CHECK-ZVKB: # %bb.0:
341 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, m2, ta, ma
342 ; CHECK-ZVKB-NEXT: vandn.vv v8, v10, v8
343 ; CHECK-ZVKB-NEXT: ret
344 %a = xor <vscale x 16 x i8> %x, splat (i8 -1)
345 %b = and <vscale x 16 x i8> %y, %a
346 ret <vscale x 16 x i8> %b
349 define <vscale x 16 x i8> @vandn_vx_nxv16i8(i8 %x, <vscale x 16 x i8> %y) {
350 ; CHECK-LABEL: vandn_vx_nxv16i8:
352 ; CHECK-NEXT: not a0, a0
353 ; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma
354 ; CHECK-NEXT: vand.vx v8, v8, a0
357 ; CHECK-ZVKB-LABEL: vandn_vx_nxv16i8:
358 ; CHECK-ZVKB: # %bb.0:
359 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, m2, ta, ma
360 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
361 ; CHECK-ZVKB-NEXT: ret
363 %head = insertelement <vscale x 16 x i8> poison, i8 %a, i32 0
364 %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
365 %b = and <vscale x 16 x i8> %splat, %y
366 ret <vscale x 16 x i8> %b
369 define <vscale x 16 x i8> @vandn_vx_swapped_nxv16i8(i8 %x, <vscale x 16 x i8> %y) {
370 ; CHECK-LABEL: vandn_vx_swapped_nxv16i8:
372 ; CHECK-NEXT: not a0, a0
373 ; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma
374 ; CHECK-NEXT: vand.vx v8, v8, a0
377 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv16i8:
378 ; CHECK-ZVKB: # %bb.0:
379 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, m2, ta, ma
380 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
381 ; CHECK-ZVKB-NEXT: ret
383 %head = insertelement <vscale x 16 x i8> poison, i8 %a, i32 0
384 %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
385 %b = and <vscale x 16 x i8> %splat, %y
386 ret <vscale x 16 x i8> %b
389 define <vscale x 32 x i8> @vandn_vv_nxv32i8(<vscale x 32 x i8> %x, <vscale x 32 x i8> %y) {
390 ; CHECK-LABEL: vandn_vv_nxv32i8:
392 ; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma
393 ; CHECK-NEXT: vnot.v v8, v8
394 ; CHECK-NEXT: vand.vv v8, v8, v12
397 ; CHECK-ZVKB-LABEL: vandn_vv_nxv32i8:
398 ; CHECK-ZVKB: # %bb.0:
399 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, m4, ta, ma
400 ; CHECK-ZVKB-NEXT: vandn.vv v8, v12, v8
401 ; CHECK-ZVKB-NEXT: ret
402 %a = xor <vscale x 32 x i8> %x, splat (i8 -1)
403 %b = and <vscale x 32 x i8> %a, %y
404 ret <vscale x 32 x i8> %b
407 define <vscale x 32 x i8> @vandn_vv_swapped_nxv32i8(<vscale x 32 x i8> %x, <vscale x 32 x i8> %y) {
408 ; CHECK-LABEL: vandn_vv_swapped_nxv32i8:
410 ; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma
411 ; CHECK-NEXT: vnot.v v8, v8
412 ; CHECK-NEXT: vand.vv v8, v12, v8
415 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv32i8:
416 ; CHECK-ZVKB: # %bb.0:
417 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, m4, ta, ma
418 ; CHECK-ZVKB-NEXT: vandn.vv v8, v12, v8
419 ; CHECK-ZVKB-NEXT: ret
420 %a = xor <vscale x 32 x i8> %x, splat (i8 -1)
421 %b = and <vscale x 32 x i8> %y, %a
422 ret <vscale x 32 x i8> %b
425 define <vscale x 32 x i8> @vandn_vx_nxv32i8(i8 %x, <vscale x 32 x i8> %y) {
426 ; CHECK-LABEL: vandn_vx_nxv32i8:
428 ; CHECK-NEXT: not a0, a0
429 ; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma
430 ; CHECK-NEXT: vand.vx v8, v8, a0
433 ; CHECK-ZVKB-LABEL: vandn_vx_nxv32i8:
434 ; CHECK-ZVKB: # %bb.0:
435 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, m4, ta, ma
436 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
437 ; CHECK-ZVKB-NEXT: ret
439 %head = insertelement <vscale x 32 x i8> poison, i8 %a, i32 0
440 %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
441 %b = and <vscale x 32 x i8> %splat, %y
442 ret <vscale x 32 x i8> %b
445 define <vscale x 32 x i8> @vandn_vx_swapped_nxv32i8(i8 %x, <vscale x 32 x i8> %y) {
446 ; CHECK-LABEL: vandn_vx_swapped_nxv32i8:
448 ; CHECK-NEXT: not a0, a0
449 ; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma
450 ; CHECK-NEXT: vand.vx v8, v8, a0
453 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv32i8:
454 ; CHECK-ZVKB: # %bb.0:
455 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, m4, ta, ma
456 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
457 ; CHECK-ZVKB-NEXT: ret
459 %head = insertelement <vscale x 32 x i8> poison, i8 %a, i32 0
460 %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
461 %b = and <vscale x 32 x i8> %splat, %y
462 ret <vscale x 32 x i8> %b
465 define <vscale x 64 x i8> @vandn_vv_nxv64i8(<vscale x 64 x i8> %x, <vscale x 64 x i8> %y) {
466 ; CHECK-LABEL: vandn_vv_nxv64i8:
468 ; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma
469 ; CHECK-NEXT: vnot.v v8, v8
470 ; CHECK-NEXT: vand.vv v8, v8, v16
473 ; CHECK-ZVKB-LABEL: vandn_vv_nxv64i8:
474 ; CHECK-ZVKB: # %bb.0:
475 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, m8, ta, ma
476 ; CHECK-ZVKB-NEXT: vandn.vv v8, v16, v8
477 ; CHECK-ZVKB-NEXT: ret
478 %a = xor <vscale x 64 x i8> %x, splat (i8 -1)
479 %b = and <vscale x 64 x i8> %a, %y
480 ret <vscale x 64 x i8> %b
483 define <vscale x 64 x i8> @vandn_vv_swapped_nxv64i8(<vscale x 64 x i8> %x, <vscale x 64 x i8> %y) {
484 ; CHECK-LABEL: vandn_vv_swapped_nxv64i8:
486 ; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma
487 ; CHECK-NEXT: vnot.v v8, v8
488 ; CHECK-NEXT: vand.vv v8, v16, v8
491 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv64i8:
492 ; CHECK-ZVKB: # %bb.0:
493 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e8, m8, ta, ma
494 ; CHECK-ZVKB-NEXT: vandn.vv v8, v16, v8
495 ; CHECK-ZVKB-NEXT: ret
496 %a = xor <vscale x 64 x i8> %x, splat (i8 -1)
497 %b = and <vscale x 64 x i8> %y, %a
498 ret <vscale x 64 x i8> %b
501 define <vscale x 64 x i8> @vandn_vx_nxv64i8(i8 %x, <vscale x 64 x i8> %y) {
502 ; CHECK-LABEL: vandn_vx_nxv64i8:
504 ; CHECK-NEXT: not a0, a0
505 ; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma
506 ; CHECK-NEXT: vand.vx v8, v8, a0
509 ; CHECK-ZVKB-LABEL: vandn_vx_nxv64i8:
510 ; CHECK-ZVKB: # %bb.0:
511 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, m8, ta, ma
512 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
513 ; CHECK-ZVKB-NEXT: ret
515 %head = insertelement <vscale x 64 x i8> poison, i8 %a, i32 0
516 %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
517 %b = and <vscale x 64 x i8> %splat, %y
518 ret <vscale x 64 x i8> %b
521 define <vscale x 64 x i8> @vandn_vx_swapped_nxv64i8(i8 %x, <vscale x 64 x i8> %y) {
522 ; CHECK-LABEL: vandn_vx_swapped_nxv64i8:
524 ; CHECK-NEXT: not a0, a0
525 ; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma
526 ; CHECK-NEXT: vand.vx v8, v8, a0
529 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv64i8:
530 ; CHECK-ZVKB: # %bb.0:
531 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e8, m8, ta, ma
532 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
533 ; CHECK-ZVKB-NEXT: ret
535 %head = insertelement <vscale x 64 x i8> poison, i8 %a, i32 0
536 %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
537 %b = and <vscale x 64 x i8> %splat, %y
538 ret <vscale x 64 x i8> %b
541 define <vscale x 1 x i16> @vandn_vv_nxv1i16(<vscale x 1 x i16> %x, <vscale x 1 x i16> %y) {
542 ; CHECK-LABEL: vandn_vv_nxv1i16:
544 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
545 ; CHECK-NEXT: vnot.v v8, v8
546 ; CHECK-NEXT: vand.vv v8, v8, v9
549 ; CHECK-ZVKB-LABEL: vandn_vv_nxv1i16:
550 ; CHECK-ZVKB: # %bb.0:
551 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
552 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
553 ; CHECK-ZVKB-NEXT: ret
554 %a = xor <vscale x 1 x i16> %x, splat (i16 -1)
555 %b = and <vscale x 1 x i16> %a, %y
556 ret <vscale x 1 x i16> %b
559 define <vscale x 1 x i16> @vandn_vv_swapped_nxv1i16(<vscale x 1 x i16> %x, <vscale x 1 x i16> %y) {
560 ; CHECK-LABEL: vandn_vv_swapped_nxv1i16:
562 ; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
563 ; CHECK-NEXT: vnot.v v8, v8
564 ; CHECK-NEXT: vand.vv v8, v9, v8
567 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv1i16:
568 ; CHECK-ZVKB: # %bb.0:
569 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, mf4, ta, ma
570 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
571 ; CHECK-ZVKB-NEXT: ret
572 %a = xor <vscale x 1 x i16> %x, splat (i16 -1)
573 %b = and <vscale x 1 x i16> %y, %a
574 ret <vscale x 1 x i16> %b
577 define <vscale x 1 x i16> @vandn_vx_nxv1i16(i16 %x, <vscale x 1 x i16> %y) {
578 ; CHECK-LABEL: vandn_vx_nxv1i16:
580 ; CHECK-NEXT: not a0, a0
581 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
582 ; CHECK-NEXT: vand.vx v8, v8, a0
585 ; CHECK-ZVKB-LABEL: vandn_vx_nxv1i16:
586 ; CHECK-ZVKB: # %bb.0:
587 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
588 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
589 ; CHECK-ZVKB-NEXT: ret
591 %head = insertelement <vscale x 1 x i16> poison, i16 %a, i32 0
592 %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
593 %b = and <vscale x 1 x i16> %splat, %y
594 ret <vscale x 1 x i16> %b
597 define <vscale x 1 x i16> @vandn_vx_swapped_nxv1i16(i16 %x, <vscale x 1 x i16> %y) {
598 ; CHECK-LABEL: vandn_vx_swapped_nxv1i16:
600 ; CHECK-NEXT: not a0, a0
601 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
602 ; CHECK-NEXT: vand.vx v8, v8, a0
605 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv1i16:
606 ; CHECK-ZVKB: # %bb.0:
607 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
608 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
609 ; CHECK-ZVKB-NEXT: ret
611 %head = insertelement <vscale x 1 x i16> poison, i16 %a, i32 0
612 %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
613 %b = and <vscale x 1 x i16> %splat, %y
614 ret <vscale x 1 x i16> %b
617 define <vscale x 2 x i16> @vandn_vv_nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %y) {
618 ; CHECK-LABEL: vandn_vv_nxv2i16:
620 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
621 ; CHECK-NEXT: vnot.v v8, v8
622 ; CHECK-NEXT: vand.vv v8, v8, v9
625 ; CHECK-ZVKB-LABEL: vandn_vv_nxv2i16:
626 ; CHECK-ZVKB: # %bb.0:
627 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
628 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
629 ; CHECK-ZVKB-NEXT: ret
630 %a = xor <vscale x 2 x i16> %x, splat (i16 -1)
631 %b = and <vscale x 2 x i16> %a, %y
632 ret <vscale x 2 x i16> %b
635 define <vscale x 2 x i16> @vandn_vv_swapped_nxv2i16(<vscale x 2 x i16> %x, <vscale x 2 x i16> %y) {
636 ; CHECK-LABEL: vandn_vv_swapped_nxv2i16:
638 ; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
639 ; CHECK-NEXT: vnot.v v8, v8
640 ; CHECK-NEXT: vand.vv v8, v9, v8
643 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv2i16:
644 ; CHECK-ZVKB: # %bb.0:
645 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
646 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
647 ; CHECK-ZVKB-NEXT: ret
648 %a = xor <vscale x 2 x i16> %x, splat (i16 -1)
649 %b = and <vscale x 2 x i16> %y, %a
650 ret <vscale x 2 x i16> %b
653 define <vscale x 2 x i16> @vandn_vx_nxv2i16(i16 %x, <vscale x 2 x i16> %y) {
654 ; CHECK-LABEL: vandn_vx_nxv2i16:
656 ; CHECK-NEXT: not a0, a0
657 ; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
658 ; CHECK-NEXT: vand.vx v8, v8, a0
661 ; CHECK-ZVKB-LABEL: vandn_vx_nxv2i16:
662 ; CHECK-ZVKB: # %bb.0:
663 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
664 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
665 ; CHECK-ZVKB-NEXT: ret
667 %head = insertelement <vscale x 2 x i16> poison, i16 %a, i32 0
668 %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
669 %b = and <vscale x 2 x i16> %splat, %y
670 ret <vscale x 2 x i16> %b
673 define <vscale x 2 x i16> @vandn_vx_swapped_nxv2i16(i16 %x, <vscale x 2 x i16> %y) {
674 ; CHECK-LABEL: vandn_vx_swapped_nxv2i16:
676 ; CHECK-NEXT: not a0, a0
677 ; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
678 ; CHECK-NEXT: vand.vx v8, v8, a0
681 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv2i16:
682 ; CHECK-ZVKB: # %bb.0:
683 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
684 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
685 ; CHECK-ZVKB-NEXT: ret
687 %head = insertelement <vscale x 2 x i16> poison, i16 %a, i32 0
688 %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
689 %b = and <vscale x 2 x i16> %splat, %y
690 ret <vscale x 2 x i16> %b
693 define <vscale x 4 x i16> @vandn_vv_nxv4i16(<vscale x 4 x i16> %x, <vscale x 4 x i16> %y) {
694 ; CHECK-LABEL: vandn_vv_nxv4i16:
696 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
697 ; CHECK-NEXT: vnot.v v8, v8
698 ; CHECK-NEXT: vand.vv v8, v8, v9
701 ; CHECK-ZVKB-LABEL: vandn_vv_nxv4i16:
702 ; CHECK-ZVKB: # %bb.0:
703 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, m1, ta, ma
704 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
705 ; CHECK-ZVKB-NEXT: ret
706 %a = xor <vscale x 4 x i16> %x, splat (i16 -1)
707 %b = and <vscale x 4 x i16> %a, %y
708 ret <vscale x 4 x i16> %b
711 define <vscale x 4 x i16> @vandn_vv_swapped_nxv4i16(<vscale x 4 x i16> %x, <vscale x 4 x i16> %y) {
712 ; CHECK-LABEL: vandn_vv_swapped_nxv4i16:
714 ; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma
715 ; CHECK-NEXT: vnot.v v8, v8
716 ; CHECK-NEXT: vand.vv v8, v9, v8
719 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv4i16:
720 ; CHECK-ZVKB: # %bb.0:
721 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, m1, ta, ma
722 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
723 ; CHECK-ZVKB-NEXT: ret
724 %a = xor <vscale x 4 x i16> %x, splat (i16 -1)
725 %b = and <vscale x 4 x i16> %y, %a
726 ret <vscale x 4 x i16> %b
729 define <vscale x 4 x i16> @vandn_vx_nxv4i16(i16 %x, <vscale x 4 x i16> %y) {
730 ; CHECK-LABEL: vandn_vx_nxv4i16:
732 ; CHECK-NEXT: not a0, a0
733 ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
734 ; CHECK-NEXT: vand.vx v8, v8, a0
737 ; CHECK-ZVKB-LABEL: vandn_vx_nxv4i16:
738 ; CHECK-ZVKB: # %bb.0:
739 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, m1, ta, ma
740 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
741 ; CHECK-ZVKB-NEXT: ret
743 %head = insertelement <vscale x 4 x i16> poison, i16 %a, i32 0
744 %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
745 %b = and <vscale x 4 x i16> %splat, %y
746 ret <vscale x 4 x i16> %b
749 define <vscale x 4 x i16> @vandn_vx_swapped_nxv4i16(i16 %x, <vscale x 4 x i16> %y) {
750 ; CHECK-LABEL: vandn_vx_swapped_nxv4i16:
752 ; CHECK-NEXT: not a0, a0
753 ; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
754 ; CHECK-NEXT: vand.vx v8, v8, a0
757 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv4i16:
758 ; CHECK-ZVKB: # %bb.0:
759 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, m1, ta, ma
760 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
761 ; CHECK-ZVKB-NEXT: ret
763 %head = insertelement <vscale x 4 x i16> poison, i16 %a, i32 0
764 %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
765 %b = and <vscale x 4 x i16> %splat, %y
766 ret <vscale x 4 x i16> %b
769 define <vscale x 8 x i16> @vandn_vv_nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {
770 ; CHECK-LABEL: vandn_vv_nxv8i16:
772 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
773 ; CHECK-NEXT: vnot.v v8, v8
774 ; CHECK-NEXT: vand.vv v8, v8, v10
777 ; CHECK-ZVKB-LABEL: vandn_vv_nxv8i16:
778 ; CHECK-ZVKB: # %bb.0:
779 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, m2, ta, ma
780 ; CHECK-ZVKB-NEXT: vandn.vv v8, v10, v8
781 ; CHECK-ZVKB-NEXT: ret
782 %a = xor <vscale x 8 x i16> %x, splat (i16 -1)
783 %b = and <vscale x 8 x i16> %a, %y
784 ret <vscale x 8 x i16> %b
787 define <vscale x 8 x i16> @vandn_vv_swapped_nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i16> %y) {
788 ; CHECK-LABEL: vandn_vv_swapped_nxv8i16:
790 ; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma
791 ; CHECK-NEXT: vnot.v v8, v8
792 ; CHECK-NEXT: vand.vv v8, v10, v8
795 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv8i16:
796 ; CHECK-ZVKB: # %bb.0:
797 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, m2, ta, ma
798 ; CHECK-ZVKB-NEXT: vandn.vv v8, v10, v8
799 ; CHECK-ZVKB-NEXT: ret
800 %a = xor <vscale x 8 x i16> %x, splat (i16 -1)
801 %b = and <vscale x 8 x i16> %y, %a
802 ret <vscale x 8 x i16> %b
805 define <vscale x 8 x i16> @vandn_vx_nxv8i16(i16 %x, <vscale x 8 x i16> %y) {
806 ; CHECK-LABEL: vandn_vx_nxv8i16:
808 ; CHECK-NEXT: not a0, a0
809 ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma
810 ; CHECK-NEXT: vand.vx v8, v8, a0
813 ; CHECK-ZVKB-LABEL: vandn_vx_nxv8i16:
814 ; CHECK-ZVKB: # %bb.0:
815 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, m2, ta, ma
816 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
817 ; CHECK-ZVKB-NEXT: ret
819 %head = insertelement <vscale x 8 x i16> poison, i16 %a, i32 0
820 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
821 %b = and <vscale x 8 x i16> %splat, %y
822 ret <vscale x 8 x i16> %b
825 define <vscale x 8 x i16> @vandn_vx_swapped_nxv8i16(i16 %x, <vscale x 8 x i16> %y) {
826 ; CHECK-LABEL: vandn_vx_swapped_nxv8i16:
828 ; CHECK-NEXT: not a0, a0
829 ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma
830 ; CHECK-NEXT: vand.vx v8, v8, a0
833 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv8i16:
834 ; CHECK-ZVKB: # %bb.0:
835 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, m2, ta, ma
836 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
837 ; CHECK-ZVKB-NEXT: ret
839 %head = insertelement <vscale x 8 x i16> poison, i16 %a, i32 0
840 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
841 %b = and <vscale x 8 x i16> %splat, %y
842 ret <vscale x 8 x i16> %b
845 define <vscale x 16 x i16> @vandn_vv_nxv16i16(<vscale x 16 x i16> %x, <vscale x 16 x i16> %y) {
846 ; CHECK-LABEL: vandn_vv_nxv16i16:
848 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
849 ; CHECK-NEXT: vnot.v v8, v8
850 ; CHECK-NEXT: vand.vv v8, v8, v12
853 ; CHECK-ZVKB-LABEL: vandn_vv_nxv16i16:
854 ; CHECK-ZVKB: # %bb.0:
855 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, m4, ta, ma
856 ; CHECK-ZVKB-NEXT: vandn.vv v8, v12, v8
857 ; CHECK-ZVKB-NEXT: ret
858 %a = xor <vscale x 16 x i16> %x, splat (i16 -1)
859 %b = and <vscale x 16 x i16> %a, %y
860 ret <vscale x 16 x i16> %b
863 define <vscale x 16 x i16> @vandn_vv_swapped_nxv16i16(<vscale x 16 x i16> %x, <vscale x 16 x i16> %y) {
864 ; CHECK-LABEL: vandn_vv_swapped_nxv16i16:
866 ; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma
867 ; CHECK-NEXT: vnot.v v8, v8
868 ; CHECK-NEXT: vand.vv v8, v12, v8
871 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv16i16:
872 ; CHECK-ZVKB: # %bb.0:
873 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, m4, ta, ma
874 ; CHECK-ZVKB-NEXT: vandn.vv v8, v12, v8
875 ; CHECK-ZVKB-NEXT: ret
876 %a = xor <vscale x 16 x i16> %x, splat (i16 -1)
877 %b = and <vscale x 16 x i16> %y, %a
878 ret <vscale x 16 x i16> %b
881 define <vscale x 16 x i16> @vandn_vx_nxv16i16(i16 %x, <vscale x 16 x i16> %y) {
882 ; CHECK-LABEL: vandn_vx_nxv16i16:
884 ; CHECK-NEXT: not a0, a0
885 ; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma
886 ; CHECK-NEXT: vand.vx v8, v8, a0
889 ; CHECK-ZVKB-LABEL: vandn_vx_nxv16i16:
890 ; CHECK-ZVKB: # %bb.0:
891 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, m4, ta, ma
892 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
893 ; CHECK-ZVKB-NEXT: ret
895 %head = insertelement <vscale x 16 x i16> poison, i16 %a, i32 0
896 %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
897 %b = and <vscale x 16 x i16> %splat, %y
898 ret <vscale x 16 x i16> %b
901 define <vscale x 16 x i16> @vandn_vx_swapped_nxv16i16(i16 %x, <vscale x 16 x i16> %y) {
902 ; CHECK-LABEL: vandn_vx_swapped_nxv16i16:
904 ; CHECK-NEXT: not a0, a0
905 ; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma
906 ; CHECK-NEXT: vand.vx v8, v8, a0
909 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv16i16:
910 ; CHECK-ZVKB: # %bb.0:
911 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, m4, ta, ma
912 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
913 ; CHECK-ZVKB-NEXT: ret
915 %head = insertelement <vscale x 16 x i16> poison, i16 %a, i32 0
916 %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
917 %b = and <vscale x 16 x i16> %splat, %y
918 ret <vscale x 16 x i16> %b
921 define <vscale x 32 x i16> @vandn_vv_nxv32i16(<vscale x 32 x i16> %x, <vscale x 32 x i16> %y) {
922 ; CHECK-LABEL: vandn_vv_nxv32i16:
924 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
925 ; CHECK-NEXT: vnot.v v8, v8
926 ; CHECK-NEXT: vand.vv v8, v8, v16
929 ; CHECK-ZVKB-LABEL: vandn_vv_nxv32i16:
930 ; CHECK-ZVKB: # %bb.0:
931 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, m8, ta, ma
932 ; CHECK-ZVKB-NEXT: vandn.vv v8, v16, v8
933 ; CHECK-ZVKB-NEXT: ret
934 %a = xor <vscale x 32 x i16> %x, splat (i16 -1)
935 %b = and <vscale x 32 x i16> %a, %y
936 ret <vscale x 32 x i16> %b
939 define <vscale x 32 x i16> @vandn_vv_swapped_nxv32i16(<vscale x 32 x i16> %x, <vscale x 32 x i16> %y) {
940 ; CHECK-LABEL: vandn_vv_swapped_nxv32i16:
942 ; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma
943 ; CHECK-NEXT: vnot.v v8, v8
944 ; CHECK-NEXT: vand.vv v8, v16, v8
947 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv32i16:
948 ; CHECK-ZVKB: # %bb.0:
949 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e16, m8, ta, ma
950 ; CHECK-ZVKB-NEXT: vandn.vv v8, v16, v8
951 ; CHECK-ZVKB-NEXT: ret
952 %a = xor <vscale x 32 x i16> %x, splat (i16 -1)
953 %b = and <vscale x 32 x i16> %y, %a
954 ret <vscale x 32 x i16> %b
957 define <vscale x 32 x i16> @vandn_vx_nxv32i16(i16 %x, <vscale x 32 x i16> %y) {
958 ; CHECK-LABEL: vandn_vx_nxv32i16:
960 ; CHECK-NEXT: not a0, a0
961 ; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma
962 ; CHECK-NEXT: vand.vx v8, v8, a0
965 ; CHECK-ZVKB-LABEL: vandn_vx_nxv32i16:
966 ; CHECK-ZVKB: # %bb.0:
967 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, m8, ta, ma
968 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
969 ; CHECK-ZVKB-NEXT: ret
971 %head = insertelement <vscale x 32 x i16> poison, i16 %a, i32 0
972 %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
973 %b = and <vscale x 32 x i16> %splat, %y
974 ret <vscale x 32 x i16> %b
977 define <vscale x 32 x i16> @vandn_vx_swapped_nxv32i16(i16 %x, <vscale x 32 x i16> %y) {
978 ; CHECK-LABEL: vandn_vx_swapped_nxv32i16:
980 ; CHECK-NEXT: not a0, a0
981 ; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma
982 ; CHECK-NEXT: vand.vx v8, v8, a0
985 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv32i16:
986 ; CHECK-ZVKB: # %bb.0:
987 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, m8, ta, ma
988 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
989 ; CHECK-ZVKB-NEXT: ret
991 %head = insertelement <vscale x 32 x i16> poison, i16 %a, i32 0
992 %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
993 %b = and <vscale x 32 x i16> %splat, %y
994 ret <vscale x 32 x i16> %b
997 define <vscale x 1 x i32> @vandn_vv_nxv1i32(<vscale x 1 x i32> %x, <vscale x 1 x i32> %y) {
998 ; CHECK-LABEL: vandn_vv_nxv1i32:
1000 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
1001 ; CHECK-NEXT: vnot.v v8, v8
1002 ; CHECK-NEXT: vand.vv v8, v8, v9
1005 ; CHECK-ZVKB-LABEL: vandn_vv_nxv1i32:
1006 ; CHECK-ZVKB: # %bb.0:
1007 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
1008 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
1009 ; CHECK-ZVKB-NEXT: ret
1010 %a = xor <vscale x 1 x i32> %x, splat (i32 -1)
1011 %b = and <vscale x 1 x i32> %a, %y
1012 ret <vscale x 1 x i32> %b
1015 define <vscale x 1 x i32> @vandn_vv_swapped_nxv1i32(<vscale x 1 x i32> %x, <vscale x 1 x i32> %y) {
1016 ; CHECK-LABEL: vandn_vv_swapped_nxv1i32:
1018 ; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
1019 ; CHECK-NEXT: vnot.v v8, v8
1020 ; CHECK-NEXT: vand.vv v8, v9, v8
1023 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv1i32:
1024 ; CHECK-ZVKB: # %bb.0:
1025 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
1026 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
1027 ; CHECK-ZVKB-NEXT: ret
1028 %a = xor <vscale x 1 x i32> %x, splat (i32 -1)
1029 %b = and <vscale x 1 x i32> %y, %a
1030 ret <vscale x 1 x i32> %b
1033 define <vscale x 1 x i32> @vandn_vx_nxv1i32(i32 %x, <vscale x 1 x i32> %y) {
1034 ; CHECK-LABEL: vandn_vx_nxv1i32:
1036 ; CHECK-NEXT: not a0, a0
1037 ; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
1038 ; CHECK-NEXT: vand.vx v8, v8, a0
1041 ; CHECK-ZVKB-LABEL: vandn_vx_nxv1i32:
1042 ; CHECK-ZVKB: # %bb.0:
1043 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
1044 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1045 ; CHECK-ZVKB-NEXT: ret
1047 %head = insertelement <vscale x 1 x i32> poison, i32 %a, i32 0
1048 %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1049 %b = and <vscale x 1 x i32> %splat, %y
1050 ret <vscale x 1 x i32> %b
1053 define <vscale x 1 x i32> @vandn_vx_swapped_nxv1i32(i32 %x, <vscale x 1 x i32> %y) {
1054 ; CHECK-LABEL: vandn_vx_swapped_nxv1i32:
1056 ; CHECK-NEXT: not a0, a0
1057 ; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
1058 ; CHECK-NEXT: vand.vx v8, v8, a0
1061 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv1i32:
1062 ; CHECK-ZVKB: # %bb.0:
1063 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
1064 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1065 ; CHECK-ZVKB-NEXT: ret
1067 %head = insertelement <vscale x 1 x i32> poison, i32 %a, i32 0
1068 %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1069 %b = and <vscale x 1 x i32> %splat, %y
1070 ret <vscale x 1 x i32> %b
1073 define <vscale x 2 x i32> @vandn_vv_nxv2i32(<vscale x 2 x i32> %x, <vscale x 2 x i32> %y) {
1074 ; CHECK-LABEL: vandn_vv_nxv2i32:
1076 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1077 ; CHECK-NEXT: vnot.v v8, v8
1078 ; CHECK-NEXT: vand.vv v8, v8, v9
1081 ; CHECK-ZVKB-LABEL: vandn_vv_nxv2i32:
1082 ; CHECK-ZVKB: # %bb.0:
1083 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1084 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
1085 ; CHECK-ZVKB-NEXT: ret
1086 %a = xor <vscale x 2 x i32> %x, splat (i32 -1)
1087 %b = and <vscale x 2 x i32> %a, %y
1088 ret <vscale x 2 x i32> %b
1091 define <vscale x 2 x i32> @vandn_vv_swapped_nxv2i32(<vscale x 2 x i32> %x, <vscale x 2 x i32> %y) {
1092 ; CHECK-LABEL: vandn_vv_swapped_nxv2i32:
1094 ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1095 ; CHECK-NEXT: vnot.v v8, v8
1096 ; CHECK-NEXT: vand.vv v8, v9, v8
1099 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv2i32:
1100 ; CHECK-ZVKB: # %bb.0:
1101 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1102 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
1103 ; CHECK-ZVKB-NEXT: ret
1104 %a = xor <vscale x 2 x i32> %x, splat (i32 -1)
1105 %b = and <vscale x 2 x i32> %y, %a
1106 ret <vscale x 2 x i32> %b
1109 define <vscale x 2 x i32> @vandn_vx_nxv2i32(i32 %x, <vscale x 2 x i32> %y) {
1110 ; CHECK-LABEL: vandn_vx_nxv2i32:
1112 ; CHECK-NEXT: not a0, a0
1113 ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
1114 ; CHECK-NEXT: vand.vx v8, v8, a0
1117 ; CHECK-ZVKB-LABEL: vandn_vx_nxv2i32:
1118 ; CHECK-ZVKB: # %bb.0:
1119 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, m1, ta, ma
1120 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1121 ; CHECK-ZVKB-NEXT: ret
1123 %head = insertelement <vscale x 2 x i32> poison, i32 %a, i32 0
1124 %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1125 %b = and <vscale x 2 x i32> %splat, %y
1126 ret <vscale x 2 x i32> %b
1129 define <vscale x 2 x i32> @vandn_vx_swapped_nxv2i32(i32 %x, <vscale x 2 x i32> %y) {
1130 ; CHECK-LABEL: vandn_vx_swapped_nxv2i32:
1132 ; CHECK-NEXT: not a0, a0
1133 ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
1134 ; CHECK-NEXT: vand.vx v8, v8, a0
1137 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv2i32:
1138 ; CHECK-ZVKB: # %bb.0:
1139 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, m1, ta, ma
1140 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1141 ; CHECK-ZVKB-NEXT: ret
1143 %head = insertelement <vscale x 2 x i32> poison, i32 %a, i32 0
1144 %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1145 %b = and <vscale x 2 x i32> %splat, %y
1146 ret <vscale x 2 x i32> %b
1149 define <vscale x 4 x i32> @vandn_vv_nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {
1150 ; CHECK-LABEL: vandn_vv_nxv4i32:
1152 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
1153 ; CHECK-NEXT: vnot.v v8, v8
1154 ; CHECK-NEXT: vand.vv v8, v8, v10
1157 ; CHECK-ZVKB-LABEL: vandn_vv_nxv4i32:
1158 ; CHECK-ZVKB: # %bb.0:
1159 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, m2, ta, ma
1160 ; CHECK-ZVKB-NEXT: vandn.vv v8, v10, v8
1161 ; CHECK-ZVKB-NEXT: ret
1162 %a = xor <vscale x 4 x i32> %x, splat (i32 -1)
1163 %b = and <vscale x 4 x i32> %a, %y
1164 ret <vscale x 4 x i32> %b
1167 define <vscale x 4 x i32> @vandn_vv_swapped_nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i32> %y) {
1168 ; CHECK-LABEL: vandn_vv_swapped_nxv4i32:
1170 ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma
1171 ; CHECK-NEXT: vnot.v v8, v8
1172 ; CHECK-NEXT: vand.vv v8, v10, v8
1175 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv4i32:
1176 ; CHECK-ZVKB: # %bb.0:
1177 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, m2, ta, ma
1178 ; CHECK-ZVKB-NEXT: vandn.vv v8, v10, v8
1179 ; CHECK-ZVKB-NEXT: ret
1180 %a = xor <vscale x 4 x i32> %x, splat (i32 -1)
1181 %b = and <vscale x 4 x i32> %y, %a
1182 ret <vscale x 4 x i32> %b
1185 define <vscale x 4 x i32> @vandn_vx_nxv4i32(i32 %x, <vscale x 4 x i32> %y) {
1186 ; CHECK-LABEL: vandn_vx_nxv4i32:
1188 ; CHECK-NEXT: not a0, a0
1189 ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1190 ; CHECK-NEXT: vand.vx v8, v8, a0
1193 ; CHECK-ZVKB-LABEL: vandn_vx_nxv4i32:
1194 ; CHECK-ZVKB: # %bb.0:
1195 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1196 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1197 ; CHECK-ZVKB-NEXT: ret
1199 %head = insertelement <vscale x 4 x i32> poison, i32 %a, i32 0
1200 %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1201 %b = and <vscale x 4 x i32> %splat, %y
1202 ret <vscale x 4 x i32> %b
1205 define <vscale x 4 x i32> @vandn_vx_swapped_nxv4i32(i32 %x, <vscale x 4 x i32> %y) {
1206 ; CHECK-LABEL: vandn_vx_swapped_nxv4i32:
1208 ; CHECK-NEXT: not a0, a0
1209 ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1210 ; CHECK-NEXT: vand.vx v8, v8, a0
1213 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv4i32:
1214 ; CHECK-ZVKB: # %bb.0:
1215 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1216 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1217 ; CHECK-ZVKB-NEXT: ret
1219 %head = insertelement <vscale x 4 x i32> poison, i32 %a, i32 0
1220 %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1221 %b = and <vscale x 4 x i32> %splat, %y
1222 ret <vscale x 4 x i32> %b
1225 define <vscale x 8 x i32> @vandn_vv_nxv8i32(<vscale x 8 x i32> %x, <vscale x 8 x i32> %y) {
1226 ; CHECK-LABEL: vandn_vv_nxv8i32:
1228 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1229 ; CHECK-NEXT: vnot.v v8, v8
1230 ; CHECK-NEXT: vand.vv v8, v8, v12
1233 ; CHECK-ZVKB-LABEL: vandn_vv_nxv8i32:
1234 ; CHECK-ZVKB: # %bb.0:
1235 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1236 ; CHECK-ZVKB-NEXT: vandn.vv v8, v12, v8
1237 ; CHECK-ZVKB-NEXT: ret
1238 %a = xor <vscale x 8 x i32> %x, splat (i32 -1)
1239 %b = and <vscale x 8 x i32> %a, %y
1240 ret <vscale x 8 x i32> %b
1243 define <vscale x 8 x i32> @vandn_vv_swapped_nxv8i32(<vscale x 8 x i32> %x, <vscale x 8 x i32> %y) {
1244 ; CHECK-LABEL: vandn_vv_swapped_nxv8i32:
1246 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1247 ; CHECK-NEXT: vnot.v v8, v8
1248 ; CHECK-NEXT: vand.vv v8, v12, v8
1251 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv8i32:
1252 ; CHECK-ZVKB: # %bb.0:
1253 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1254 ; CHECK-ZVKB-NEXT: vandn.vv v8, v12, v8
1255 ; CHECK-ZVKB-NEXT: ret
1256 %a = xor <vscale x 8 x i32> %x, splat (i32 -1)
1257 %b = and <vscale x 8 x i32> %y, %a
1258 ret <vscale x 8 x i32> %b
1261 define <vscale x 8 x i32> @vandn_vx_nxv8i32(i32 %x, <vscale x 8 x i32> %y) {
1262 ; CHECK-LABEL: vandn_vx_nxv8i32:
1264 ; CHECK-NEXT: not a0, a0
1265 ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma
1266 ; CHECK-NEXT: vand.vx v8, v8, a0
1269 ; CHECK-ZVKB-LABEL: vandn_vx_nxv8i32:
1270 ; CHECK-ZVKB: # %bb.0:
1271 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, m4, ta, ma
1272 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1273 ; CHECK-ZVKB-NEXT: ret
1275 %head = insertelement <vscale x 8 x i32> poison, i32 %a, i32 0
1276 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1277 %b = and <vscale x 8 x i32> %splat, %y
1278 ret <vscale x 8 x i32> %b
1281 define <vscale x 8 x i32> @vandn_vx_swapped_nxv8i32(i32 %x, <vscale x 8 x i32> %y) {
1282 ; CHECK-LABEL: vandn_vx_swapped_nxv8i32:
1284 ; CHECK-NEXT: not a0, a0
1285 ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma
1286 ; CHECK-NEXT: vand.vx v8, v8, a0
1289 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv8i32:
1290 ; CHECK-ZVKB: # %bb.0:
1291 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, m4, ta, ma
1292 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1293 ; CHECK-ZVKB-NEXT: ret
1295 %head = insertelement <vscale x 8 x i32> poison, i32 %a, i32 0
1296 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1297 %b = and <vscale x 8 x i32> %splat, %y
1298 ret <vscale x 8 x i32> %b
1301 define <vscale x 16 x i32> @vandn_vv_nxv16i32(<vscale x 16 x i32> %x, <vscale x 16 x i32> %y) {
1302 ; CHECK-LABEL: vandn_vv_nxv16i32:
1304 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
1305 ; CHECK-NEXT: vnot.v v8, v8
1306 ; CHECK-NEXT: vand.vv v8, v8, v16
1309 ; CHECK-ZVKB-LABEL: vandn_vv_nxv16i32:
1310 ; CHECK-ZVKB: # %bb.0:
1311 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, m8, ta, ma
1312 ; CHECK-ZVKB-NEXT: vandn.vv v8, v16, v8
1313 ; CHECK-ZVKB-NEXT: ret
1314 %a = xor <vscale x 16 x i32> %x, splat (i32 -1)
1315 %b = and <vscale x 16 x i32> %a, %y
1316 ret <vscale x 16 x i32> %b
1319 define <vscale x 16 x i32> @vandn_vv_swapped_nxv16i32(<vscale x 16 x i32> %x, <vscale x 16 x i32> %y) {
1320 ; CHECK-LABEL: vandn_vv_swapped_nxv16i32:
1322 ; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma
1323 ; CHECK-NEXT: vnot.v v8, v8
1324 ; CHECK-NEXT: vand.vv v8, v16, v8
1327 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv16i32:
1328 ; CHECK-ZVKB: # %bb.0:
1329 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e32, m8, ta, ma
1330 ; CHECK-ZVKB-NEXT: vandn.vv v8, v16, v8
1331 ; CHECK-ZVKB-NEXT: ret
1332 %a = xor <vscale x 16 x i32> %x, splat (i32 -1)
1333 %b = and <vscale x 16 x i32> %y, %a
1334 ret <vscale x 16 x i32> %b
1337 define <vscale x 16 x i32> @vandn_vx_nxv16i32(i32 %x, <vscale x 16 x i32> %y) {
1338 ; CHECK-LABEL: vandn_vx_nxv16i32:
1340 ; CHECK-NEXT: not a0, a0
1341 ; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma
1342 ; CHECK-NEXT: vand.vx v8, v8, a0
1345 ; CHECK-ZVKB-LABEL: vandn_vx_nxv16i32:
1346 ; CHECK-ZVKB: # %bb.0:
1347 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, m8, ta, ma
1348 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1349 ; CHECK-ZVKB-NEXT: ret
1351 %head = insertelement <vscale x 16 x i32> poison, i32 %a, i32 0
1352 %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1353 %b = and <vscale x 16 x i32> %splat, %y
1354 ret <vscale x 16 x i32> %b
1357 define <vscale x 16 x i32> @vandn_vx_swapped_nxv16i32(i32 %x, <vscale x 16 x i32> %y) {
1358 ; CHECK-LABEL: vandn_vx_swapped_nxv16i32:
1360 ; CHECK-NEXT: not a0, a0
1361 ; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma
1362 ; CHECK-NEXT: vand.vx v8, v8, a0
1365 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_nxv16i32:
1366 ; CHECK-ZVKB: # %bb.0:
1367 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e32, m8, ta, ma
1368 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1369 ; CHECK-ZVKB-NEXT: ret
1371 %head = insertelement <vscale x 16 x i32> poison, i32 %a, i32 0
1372 %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1373 %b = and <vscale x 16 x i32> %splat, %y
1374 ret <vscale x 16 x i32> %b
1377 define <vscale x 1 x i64> @vandn_vv_nxv1i64(<vscale x 1 x i64> %x, <vscale x 1 x i64> %y) {
1378 ; CHECK-LABEL: vandn_vv_nxv1i64:
1380 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
1381 ; CHECK-NEXT: vnot.v v8, v8
1382 ; CHECK-NEXT: vand.vv v8, v8, v9
1385 ; CHECK-ZVKB-LABEL: vandn_vv_nxv1i64:
1386 ; CHECK-ZVKB: # %bb.0:
1387 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e64, m1, ta, ma
1388 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
1389 ; CHECK-ZVKB-NEXT: ret
1390 %a = xor <vscale x 1 x i64> %x, splat (i64 -1)
1391 %b = and <vscale x 1 x i64> %a, %y
1392 ret <vscale x 1 x i64> %b
1395 define <vscale x 1 x i64> @vandn_vv_swapped_nxv1i64(<vscale x 1 x i64> %x, <vscale x 1 x i64> %y) {
1396 ; CHECK-LABEL: vandn_vv_swapped_nxv1i64:
1398 ; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma
1399 ; CHECK-NEXT: vnot.v v8, v8
1400 ; CHECK-NEXT: vand.vv v8, v9, v8
1403 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv1i64:
1404 ; CHECK-ZVKB: # %bb.0:
1405 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e64, m1, ta, ma
1406 ; CHECK-ZVKB-NEXT: vandn.vv v8, v9, v8
1407 ; CHECK-ZVKB-NEXT: ret
1408 %a = xor <vscale x 1 x i64> %x, splat (i64 -1)
1409 %b = and <vscale x 1 x i64> %y, %a
1410 ret <vscale x 1 x i64> %b
1413 define <vscale x 1 x i64> @vandn_vx_nxv1i64(i64 %x, <vscale x 1 x i64> %y) {
1414 ; CHECK-RV32-LABEL: vandn_vx_nxv1i64:
1415 ; CHECK-RV32: # %bb.0:
1416 ; CHECK-RV32-NEXT: addi sp, sp, -16
1417 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
1418 ; CHECK-RV32-NEXT: not a0, a0
1419 ; CHECK-RV32-NEXT: not a1, a1
1420 ; CHECK-RV32-NEXT: sw a0, 8(sp)
1421 ; CHECK-RV32-NEXT: sw a1, 12(sp)
1422 ; CHECK-RV32-NEXT: addi a0, sp, 8
1423 ; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1424 ; CHECK-RV32-NEXT: vlse64.v v9, (a0), zero
1425 ; CHECK-RV32-NEXT: vand.vv v8, v9, v8
1426 ; CHECK-RV32-NEXT: addi sp, sp, 16
1427 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 0
1428 ; CHECK-RV32-NEXT: ret
1430 ; CHECK-RV64-LABEL: vandn_vx_nxv1i64:
1431 ; CHECK-RV64: # %bb.0:
1432 ; CHECK-RV64-NEXT: not a0, a0
1433 ; CHECK-RV64-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1434 ; CHECK-RV64-NEXT: vand.vx v8, v8, a0
1435 ; CHECK-RV64-NEXT: ret
1437 ; CHECK-ZVKB32-LABEL: vandn_vx_nxv1i64:
1438 ; CHECK-ZVKB32: # %bb.0:
1439 ; CHECK-ZVKB32-NEXT: addi sp, sp, -16
1440 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 16
1441 ; CHECK-ZVKB32-NEXT: not a0, a0
1442 ; CHECK-ZVKB32-NEXT: not a1, a1
1443 ; CHECK-ZVKB32-NEXT: sw a0, 8(sp)
1444 ; CHECK-ZVKB32-NEXT: sw a1, 12(sp)
1445 ; CHECK-ZVKB32-NEXT: addi a0, sp, 8
1446 ; CHECK-ZVKB32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1447 ; CHECK-ZVKB32-NEXT: vlse64.v v9, (a0), zero
1448 ; CHECK-ZVKB32-NEXT: vand.vv v8, v9, v8
1449 ; CHECK-ZVKB32-NEXT: addi sp, sp, 16
1450 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 0
1451 ; CHECK-ZVKB32-NEXT: ret
1453 ; CHECK-ZVKB64-LABEL: vandn_vx_nxv1i64:
1454 ; CHECK-ZVKB64: # %bb.0:
1455 ; CHECK-ZVKB64-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1456 ; CHECK-ZVKB64-NEXT: vandn.vx v8, v8, a0
1457 ; CHECK-ZVKB64-NEXT: ret
1459 %head = insertelement <vscale x 1 x i64> poison, i64 %a, i32 0
1460 %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1461 %b = and <vscale x 1 x i64> %splat, %y
1462 ret <vscale x 1 x i64> %b
1465 define <vscale x 1 x i64> @vandn_vx_swapped_nxv1i64(i64 %x, <vscale x 1 x i64> %y) {
1466 ; CHECK-RV32-LABEL: vandn_vx_swapped_nxv1i64:
1467 ; CHECK-RV32: # %bb.0:
1468 ; CHECK-RV32-NEXT: addi sp, sp, -16
1469 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
1470 ; CHECK-RV32-NEXT: not a0, a0
1471 ; CHECK-RV32-NEXT: not a1, a1
1472 ; CHECK-RV32-NEXT: sw a0, 8(sp)
1473 ; CHECK-RV32-NEXT: sw a1, 12(sp)
1474 ; CHECK-RV32-NEXT: addi a0, sp, 8
1475 ; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1476 ; CHECK-RV32-NEXT: vlse64.v v9, (a0), zero
1477 ; CHECK-RV32-NEXT: vand.vv v8, v9, v8
1478 ; CHECK-RV32-NEXT: addi sp, sp, 16
1479 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 0
1480 ; CHECK-RV32-NEXT: ret
1482 ; CHECK-RV64-LABEL: vandn_vx_swapped_nxv1i64:
1483 ; CHECK-RV64: # %bb.0:
1484 ; CHECK-RV64-NEXT: not a0, a0
1485 ; CHECK-RV64-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1486 ; CHECK-RV64-NEXT: vand.vx v8, v8, a0
1487 ; CHECK-RV64-NEXT: ret
1489 ; CHECK-ZVKB32-LABEL: vandn_vx_swapped_nxv1i64:
1490 ; CHECK-ZVKB32: # %bb.0:
1491 ; CHECK-ZVKB32-NEXT: addi sp, sp, -16
1492 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 16
1493 ; CHECK-ZVKB32-NEXT: not a0, a0
1494 ; CHECK-ZVKB32-NEXT: not a1, a1
1495 ; CHECK-ZVKB32-NEXT: sw a0, 8(sp)
1496 ; CHECK-ZVKB32-NEXT: sw a1, 12(sp)
1497 ; CHECK-ZVKB32-NEXT: addi a0, sp, 8
1498 ; CHECK-ZVKB32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1499 ; CHECK-ZVKB32-NEXT: vlse64.v v9, (a0), zero
1500 ; CHECK-ZVKB32-NEXT: vand.vv v8, v9, v8
1501 ; CHECK-ZVKB32-NEXT: addi sp, sp, 16
1502 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 0
1503 ; CHECK-ZVKB32-NEXT: ret
1505 ; CHECK-ZVKB64-LABEL: vandn_vx_swapped_nxv1i64:
1506 ; CHECK-ZVKB64: # %bb.0:
1507 ; CHECK-ZVKB64-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1508 ; CHECK-ZVKB64-NEXT: vandn.vx v8, v8, a0
1509 ; CHECK-ZVKB64-NEXT: ret
1511 %head = insertelement <vscale x 1 x i64> poison, i64 %a, i32 0
1512 %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1513 %b = and <vscale x 1 x i64> %splat, %y
1514 ret <vscale x 1 x i64> %b
1517 define <vscale x 2 x i64> @vandn_vv_nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {
1518 ; CHECK-LABEL: vandn_vv_nxv2i64:
1520 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
1521 ; CHECK-NEXT: vnot.v v8, v8
1522 ; CHECK-NEXT: vand.vv v8, v8, v10
1525 ; CHECK-ZVKB-LABEL: vandn_vv_nxv2i64:
1526 ; CHECK-ZVKB: # %bb.0:
1527 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e64, m2, ta, ma
1528 ; CHECK-ZVKB-NEXT: vandn.vv v8, v10, v8
1529 ; CHECK-ZVKB-NEXT: ret
1530 %a = xor <vscale x 2 x i64> %x, splat (i64 -1)
1531 %b = and <vscale x 2 x i64> %a, %y
1532 ret <vscale x 2 x i64> %b
1535 define <vscale x 2 x i64> @vandn_vv_swapped_nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i64> %y) {
1536 ; CHECK-LABEL: vandn_vv_swapped_nxv2i64:
1538 ; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma
1539 ; CHECK-NEXT: vnot.v v8, v8
1540 ; CHECK-NEXT: vand.vv v8, v10, v8
1543 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv2i64:
1544 ; CHECK-ZVKB: # %bb.0:
1545 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e64, m2, ta, ma
1546 ; CHECK-ZVKB-NEXT: vandn.vv v8, v10, v8
1547 ; CHECK-ZVKB-NEXT: ret
1548 %a = xor <vscale x 2 x i64> %x, splat (i64 -1)
1549 %b = and <vscale x 2 x i64> %y, %a
1550 ret <vscale x 2 x i64> %b
1553 define <vscale x 2 x i64> @vandn_vx_nxv2i64(i64 %x, <vscale x 2 x i64> %y) {
1554 ; CHECK-RV32-LABEL: vandn_vx_nxv2i64:
1555 ; CHECK-RV32: # %bb.0:
1556 ; CHECK-RV32-NEXT: addi sp, sp, -16
1557 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
1558 ; CHECK-RV32-NEXT: not a0, a0
1559 ; CHECK-RV32-NEXT: not a1, a1
1560 ; CHECK-RV32-NEXT: sw a0, 8(sp)
1561 ; CHECK-RV32-NEXT: sw a1, 12(sp)
1562 ; CHECK-RV32-NEXT: addi a0, sp, 8
1563 ; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1564 ; CHECK-RV32-NEXT: vlse64.v v10, (a0), zero
1565 ; CHECK-RV32-NEXT: vand.vv v8, v10, v8
1566 ; CHECK-RV32-NEXT: addi sp, sp, 16
1567 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 0
1568 ; CHECK-RV32-NEXT: ret
1570 ; CHECK-RV64-LABEL: vandn_vx_nxv2i64:
1571 ; CHECK-RV64: # %bb.0:
1572 ; CHECK-RV64-NEXT: not a0, a0
1573 ; CHECK-RV64-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1574 ; CHECK-RV64-NEXT: vand.vx v8, v8, a0
1575 ; CHECK-RV64-NEXT: ret
1577 ; CHECK-ZVKB32-LABEL: vandn_vx_nxv2i64:
1578 ; CHECK-ZVKB32: # %bb.0:
1579 ; CHECK-ZVKB32-NEXT: addi sp, sp, -16
1580 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 16
1581 ; CHECK-ZVKB32-NEXT: not a0, a0
1582 ; CHECK-ZVKB32-NEXT: not a1, a1
1583 ; CHECK-ZVKB32-NEXT: sw a0, 8(sp)
1584 ; CHECK-ZVKB32-NEXT: sw a1, 12(sp)
1585 ; CHECK-ZVKB32-NEXT: addi a0, sp, 8
1586 ; CHECK-ZVKB32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1587 ; CHECK-ZVKB32-NEXT: vlse64.v v10, (a0), zero
1588 ; CHECK-ZVKB32-NEXT: vand.vv v8, v10, v8
1589 ; CHECK-ZVKB32-NEXT: addi sp, sp, 16
1590 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 0
1591 ; CHECK-ZVKB32-NEXT: ret
1593 ; CHECK-ZVKB64-LABEL: vandn_vx_nxv2i64:
1594 ; CHECK-ZVKB64: # %bb.0:
1595 ; CHECK-ZVKB64-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1596 ; CHECK-ZVKB64-NEXT: vandn.vx v8, v8, a0
1597 ; CHECK-ZVKB64-NEXT: ret
1599 %head = insertelement <vscale x 2 x i64> poison, i64 %a, i32 0
1600 %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1601 %b = and <vscale x 2 x i64> %splat, %y
1602 ret <vscale x 2 x i64> %b
1605 define <vscale x 2 x i64> @vandn_vx_swapped_nxv2i64(i64 %x, <vscale x 2 x i64> %y) {
1606 ; CHECK-RV32-LABEL: vandn_vx_swapped_nxv2i64:
1607 ; CHECK-RV32: # %bb.0:
1608 ; CHECK-RV32-NEXT: addi sp, sp, -16
1609 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
1610 ; CHECK-RV32-NEXT: not a0, a0
1611 ; CHECK-RV32-NEXT: not a1, a1
1612 ; CHECK-RV32-NEXT: sw a0, 8(sp)
1613 ; CHECK-RV32-NEXT: sw a1, 12(sp)
1614 ; CHECK-RV32-NEXT: addi a0, sp, 8
1615 ; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1616 ; CHECK-RV32-NEXT: vlse64.v v10, (a0), zero
1617 ; CHECK-RV32-NEXT: vand.vv v8, v10, v8
1618 ; CHECK-RV32-NEXT: addi sp, sp, 16
1619 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 0
1620 ; CHECK-RV32-NEXT: ret
1622 ; CHECK-RV64-LABEL: vandn_vx_swapped_nxv2i64:
1623 ; CHECK-RV64: # %bb.0:
1624 ; CHECK-RV64-NEXT: not a0, a0
1625 ; CHECK-RV64-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1626 ; CHECK-RV64-NEXT: vand.vx v8, v8, a0
1627 ; CHECK-RV64-NEXT: ret
1629 ; CHECK-ZVKB32-LABEL: vandn_vx_swapped_nxv2i64:
1630 ; CHECK-ZVKB32: # %bb.0:
1631 ; CHECK-ZVKB32-NEXT: addi sp, sp, -16
1632 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 16
1633 ; CHECK-ZVKB32-NEXT: not a0, a0
1634 ; CHECK-ZVKB32-NEXT: not a1, a1
1635 ; CHECK-ZVKB32-NEXT: sw a0, 8(sp)
1636 ; CHECK-ZVKB32-NEXT: sw a1, 12(sp)
1637 ; CHECK-ZVKB32-NEXT: addi a0, sp, 8
1638 ; CHECK-ZVKB32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1639 ; CHECK-ZVKB32-NEXT: vlse64.v v10, (a0), zero
1640 ; CHECK-ZVKB32-NEXT: vand.vv v8, v10, v8
1641 ; CHECK-ZVKB32-NEXT: addi sp, sp, 16
1642 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 0
1643 ; CHECK-ZVKB32-NEXT: ret
1645 ; CHECK-ZVKB64-LABEL: vandn_vx_swapped_nxv2i64:
1646 ; CHECK-ZVKB64: # %bb.0:
1647 ; CHECK-ZVKB64-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1648 ; CHECK-ZVKB64-NEXT: vandn.vx v8, v8, a0
1649 ; CHECK-ZVKB64-NEXT: ret
1651 %head = insertelement <vscale x 2 x i64> poison, i64 %a, i32 0
1652 %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1653 %b = and <vscale x 2 x i64> %splat, %y
1654 ret <vscale x 2 x i64> %b
1657 define <vscale x 4 x i64> @vandn_vv_nxv4i64(<vscale x 4 x i64> %x, <vscale x 4 x i64> %y) {
1658 ; CHECK-LABEL: vandn_vv_nxv4i64:
1660 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
1661 ; CHECK-NEXT: vnot.v v8, v8
1662 ; CHECK-NEXT: vand.vv v8, v8, v12
1665 ; CHECK-ZVKB-LABEL: vandn_vv_nxv4i64:
1666 ; CHECK-ZVKB: # %bb.0:
1667 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e64, m4, ta, ma
1668 ; CHECK-ZVKB-NEXT: vandn.vv v8, v12, v8
1669 ; CHECK-ZVKB-NEXT: ret
1670 %a = xor <vscale x 4 x i64> %x, splat (i64 -1)
1671 %b = and <vscale x 4 x i64> %a, %y
1672 ret <vscale x 4 x i64> %b
1675 define <vscale x 4 x i64> @vandn_vv_swapped_nxv4i64(<vscale x 4 x i64> %x, <vscale x 4 x i64> %y) {
1676 ; CHECK-LABEL: vandn_vv_swapped_nxv4i64:
1678 ; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma
1679 ; CHECK-NEXT: vnot.v v8, v8
1680 ; CHECK-NEXT: vand.vv v8, v12, v8
1683 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv4i64:
1684 ; CHECK-ZVKB: # %bb.0:
1685 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e64, m4, ta, ma
1686 ; CHECK-ZVKB-NEXT: vandn.vv v8, v12, v8
1687 ; CHECK-ZVKB-NEXT: ret
1688 %a = xor <vscale x 4 x i64> %x, splat (i64 -1)
1689 %b = and <vscale x 4 x i64> %y, %a
1690 ret <vscale x 4 x i64> %b
1693 define <vscale x 4 x i64> @vandn_vx_nxv4i64(i64 %x, <vscale x 4 x i64> %y) {
1694 ; CHECK-RV32-LABEL: vandn_vx_nxv4i64:
1695 ; CHECK-RV32: # %bb.0:
1696 ; CHECK-RV32-NEXT: addi sp, sp, -16
1697 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
1698 ; CHECK-RV32-NEXT: not a0, a0
1699 ; CHECK-RV32-NEXT: not a1, a1
1700 ; CHECK-RV32-NEXT: sw a0, 8(sp)
1701 ; CHECK-RV32-NEXT: sw a1, 12(sp)
1702 ; CHECK-RV32-NEXT: addi a0, sp, 8
1703 ; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1704 ; CHECK-RV32-NEXT: vlse64.v v12, (a0), zero
1705 ; CHECK-RV32-NEXT: vand.vv v8, v12, v8
1706 ; CHECK-RV32-NEXT: addi sp, sp, 16
1707 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 0
1708 ; CHECK-RV32-NEXT: ret
1710 ; CHECK-RV64-LABEL: vandn_vx_nxv4i64:
1711 ; CHECK-RV64: # %bb.0:
1712 ; CHECK-RV64-NEXT: not a0, a0
1713 ; CHECK-RV64-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1714 ; CHECK-RV64-NEXT: vand.vx v8, v8, a0
1715 ; CHECK-RV64-NEXT: ret
1717 ; CHECK-ZVKB32-LABEL: vandn_vx_nxv4i64:
1718 ; CHECK-ZVKB32: # %bb.0:
1719 ; CHECK-ZVKB32-NEXT: addi sp, sp, -16
1720 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 16
1721 ; CHECK-ZVKB32-NEXT: not a0, a0
1722 ; CHECK-ZVKB32-NEXT: not a1, a1
1723 ; CHECK-ZVKB32-NEXT: sw a0, 8(sp)
1724 ; CHECK-ZVKB32-NEXT: sw a1, 12(sp)
1725 ; CHECK-ZVKB32-NEXT: addi a0, sp, 8
1726 ; CHECK-ZVKB32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1727 ; CHECK-ZVKB32-NEXT: vlse64.v v12, (a0), zero
1728 ; CHECK-ZVKB32-NEXT: vand.vv v8, v12, v8
1729 ; CHECK-ZVKB32-NEXT: addi sp, sp, 16
1730 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 0
1731 ; CHECK-ZVKB32-NEXT: ret
1733 ; CHECK-ZVKB64-LABEL: vandn_vx_nxv4i64:
1734 ; CHECK-ZVKB64: # %bb.0:
1735 ; CHECK-ZVKB64-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1736 ; CHECK-ZVKB64-NEXT: vandn.vx v8, v8, a0
1737 ; CHECK-ZVKB64-NEXT: ret
1739 %head = insertelement <vscale x 4 x i64> poison, i64 %a, i32 0
1740 %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1741 %b = and <vscale x 4 x i64> %splat, %y
1742 ret <vscale x 4 x i64> %b
1745 define <vscale x 4 x i64> @vandn_vx_swapped_nxv4i64(i64 %x, <vscale x 4 x i64> %y) {
1746 ; CHECK-RV32-LABEL: vandn_vx_swapped_nxv4i64:
1747 ; CHECK-RV32: # %bb.0:
1748 ; CHECK-RV32-NEXT: addi sp, sp, -16
1749 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
1750 ; CHECK-RV32-NEXT: not a0, a0
1751 ; CHECK-RV32-NEXT: not a1, a1
1752 ; CHECK-RV32-NEXT: sw a0, 8(sp)
1753 ; CHECK-RV32-NEXT: sw a1, 12(sp)
1754 ; CHECK-RV32-NEXT: addi a0, sp, 8
1755 ; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1756 ; CHECK-RV32-NEXT: vlse64.v v12, (a0), zero
1757 ; CHECK-RV32-NEXT: vand.vv v8, v12, v8
1758 ; CHECK-RV32-NEXT: addi sp, sp, 16
1759 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 0
1760 ; CHECK-RV32-NEXT: ret
1762 ; CHECK-RV64-LABEL: vandn_vx_swapped_nxv4i64:
1763 ; CHECK-RV64: # %bb.0:
1764 ; CHECK-RV64-NEXT: not a0, a0
1765 ; CHECK-RV64-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1766 ; CHECK-RV64-NEXT: vand.vx v8, v8, a0
1767 ; CHECK-RV64-NEXT: ret
1769 ; CHECK-ZVKB32-LABEL: vandn_vx_swapped_nxv4i64:
1770 ; CHECK-ZVKB32: # %bb.0:
1771 ; CHECK-ZVKB32-NEXT: addi sp, sp, -16
1772 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 16
1773 ; CHECK-ZVKB32-NEXT: not a0, a0
1774 ; CHECK-ZVKB32-NEXT: not a1, a1
1775 ; CHECK-ZVKB32-NEXT: sw a0, 8(sp)
1776 ; CHECK-ZVKB32-NEXT: sw a1, 12(sp)
1777 ; CHECK-ZVKB32-NEXT: addi a0, sp, 8
1778 ; CHECK-ZVKB32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1779 ; CHECK-ZVKB32-NEXT: vlse64.v v12, (a0), zero
1780 ; CHECK-ZVKB32-NEXT: vand.vv v8, v12, v8
1781 ; CHECK-ZVKB32-NEXT: addi sp, sp, 16
1782 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 0
1783 ; CHECK-ZVKB32-NEXT: ret
1785 ; CHECK-ZVKB64-LABEL: vandn_vx_swapped_nxv4i64:
1786 ; CHECK-ZVKB64: # %bb.0:
1787 ; CHECK-ZVKB64-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1788 ; CHECK-ZVKB64-NEXT: vandn.vx v8, v8, a0
1789 ; CHECK-ZVKB64-NEXT: ret
1791 %head = insertelement <vscale x 4 x i64> poison, i64 %a, i32 0
1792 %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1793 %b = and <vscale x 4 x i64> %splat, %y
1794 ret <vscale x 4 x i64> %b
1797 define <vscale x 8 x i64> @vandn_vv_nxv8i64(<vscale x 8 x i64> %x, <vscale x 8 x i64> %y) {
1798 ; CHECK-LABEL: vandn_vv_nxv8i64:
1800 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
1801 ; CHECK-NEXT: vnot.v v8, v8
1802 ; CHECK-NEXT: vand.vv v8, v8, v16
1805 ; CHECK-ZVKB-LABEL: vandn_vv_nxv8i64:
1806 ; CHECK-ZVKB: # %bb.0:
1807 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e64, m8, ta, ma
1808 ; CHECK-ZVKB-NEXT: vandn.vv v8, v16, v8
1809 ; CHECK-ZVKB-NEXT: ret
1810 %a = xor <vscale x 8 x i64> %x, splat (i64 -1)
1811 %b = and <vscale x 8 x i64> %a, %y
1812 ret <vscale x 8 x i64> %b
1815 define <vscale x 8 x i64> @vandn_vv_swapped_nxv8i64(<vscale x 8 x i64> %x, <vscale x 8 x i64> %y) {
1816 ; CHECK-LABEL: vandn_vv_swapped_nxv8i64:
1818 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
1819 ; CHECK-NEXT: vnot.v v8, v8
1820 ; CHECK-NEXT: vand.vv v8, v16, v8
1823 ; CHECK-ZVKB-LABEL: vandn_vv_swapped_nxv8i64:
1824 ; CHECK-ZVKB: # %bb.0:
1825 ; CHECK-ZVKB-NEXT: vsetvli a0, zero, e64, m8, ta, ma
1826 ; CHECK-ZVKB-NEXT: vandn.vv v8, v16, v8
1827 ; CHECK-ZVKB-NEXT: ret
1828 %a = xor <vscale x 8 x i64> %x, splat (i64 -1)
1829 %b = and <vscale x 8 x i64> %y, %a
1830 ret <vscale x 8 x i64> %b
1833 define <vscale x 8 x i64> @vandn_vx_nxv8i64(i64 %x, <vscale x 8 x i64> %y) {
1834 ; CHECK-RV32-LABEL: vandn_vx_nxv8i64:
1835 ; CHECK-RV32: # %bb.0:
1836 ; CHECK-RV32-NEXT: addi sp, sp, -16
1837 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
1838 ; CHECK-RV32-NEXT: not a0, a0
1839 ; CHECK-RV32-NEXT: not a1, a1
1840 ; CHECK-RV32-NEXT: sw a0, 8(sp)
1841 ; CHECK-RV32-NEXT: sw a1, 12(sp)
1842 ; CHECK-RV32-NEXT: addi a0, sp, 8
1843 ; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1844 ; CHECK-RV32-NEXT: vlse64.v v16, (a0), zero
1845 ; CHECK-RV32-NEXT: vand.vv v8, v16, v8
1846 ; CHECK-RV32-NEXT: addi sp, sp, 16
1847 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 0
1848 ; CHECK-RV32-NEXT: ret
1850 ; CHECK-RV64-LABEL: vandn_vx_nxv8i64:
1851 ; CHECK-RV64: # %bb.0:
1852 ; CHECK-RV64-NEXT: not a0, a0
1853 ; CHECK-RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1854 ; CHECK-RV64-NEXT: vand.vx v8, v8, a0
1855 ; CHECK-RV64-NEXT: ret
1857 ; CHECK-ZVKB32-LABEL: vandn_vx_nxv8i64:
1858 ; CHECK-ZVKB32: # %bb.0:
1859 ; CHECK-ZVKB32-NEXT: addi sp, sp, -16
1860 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 16
1861 ; CHECK-ZVKB32-NEXT: not a0, a0
1862 ; CHECK-ZVKB32-NEXT: not a1, a1
1863 ; CHECK-ZVKB32-NEXT: sw a0, 8(sp)
1864 ; CHECK-ZVKB32-NEXT: sw a1, 12(sp)
1865 ; CHECK-ZVKB32-NEXT: addi a0, sp, 8
1866 ; CHECK-ZVKB32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1867 ; CHECK-ZVKB32-NEXT: vlse64.v v16, (a0), zero
1868 ; CHECK-ZVKB32-NEXT: vand.vv v8, v16, v8
1869 ; CHECK-ZVKB32-NEXT: addi sp, sp, 16
1870 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 0
1871 ; CHECK-ZVKB32-NEXT: ret
1873 ; CHECK-ZVKB64-LABEL: vandn_vx_nxv8i64:
1874 ; CHECK-ZVKB64: # %bb.0:
1875 ; CHECK-ZVKB64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1876 ; CHECK-ZVKB64-NEXT: vandn.vx v8, v8, a0
1877 ; CHECK-ZVKB64-NEXT: ret
1879 %head = insertelement <vscale x 8 x i64> poison, i64 %a, i32 0
1880 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1881 %b = and <vscale x 8 x i64> %splat, %y
1882 ret <vscale x 8 x i64> %b
1885 define <vscale x 8 x i64> @vandn_vx_swapped_nxv8i64(i64 %x, <vscale x 8 x i64> %y) {
1886 ; CHECK-RV32-LABEL: vandn_vx_swapped_nxv8i64:
1887 ; CHECK-RV32: # %bb.0:
1888 ; CHECK-RV32-NEXT: addi sp, sp, -16
1889 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
1890 ; CHECK-RV32-NEXT: not a0, a0
1891 ; CHECK-RV32-NEXT: not a1, a1
1892 ; CHECK-RV32-NEXT: sw a0, 8(sp)
1893 ; CHECK-RV32-NEXT: sw a1, 12(sp)
1894 ; CHECK-RV32-NEXT: addi a0, sp, 8
1895 ; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1896 ; CHECK-RV32-NEXT: vlse64.v v16, (a0), zero
1897 ; CHECK-RV32-NEXT: vand.vv v8, v16, v8
1898 ; CHECK-RV32-NEXT: addi sp, sp, 16
1899 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 0
1900 ; CHECK-RV32-NEXT: ret
1902 ; CHECK-RV64-LABEL: vandn_vx_swapped_nxv8i64:
1903 ; CHECK-RV64: # %bb.0:
1904 ; CHECK-RV64-NEXT: not a0, a0
1905 ; CHECK-RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1906 ; CHECK-RV64-NEXT: vand.vx v8, v8, a0
1907 ; CHECK-RV64-NEXT: ret
1909 ; CHECK-ZVKB32-LABEL: vandn_vx_swapped_nxv8i64:
1910 ; CHECK-ZVKB32: # %bb.0:
1911 ; CHECK-ZVKB32-NEXT: addi sp, sp, -16
1912 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 16
1913 ; CHECK-ZVKB32-NEXT: not a0, a0
1914 ; CHECK-ZVKB32-NEXT: not a1, a1
1915 ; CHECK-ZVKB32-NEXT: sw a0, 8(sp)
1916 ; CHECK-ZVKB32-NEXT: sw a1, 12(sp)
1917 ; CHECK-ZVKB32-NEXT: addi a0, sp, 8
1918 ; CHECK-ZVKB32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1919 ; CHECK-ZVKB32-NEXT: vlse64.v v16, (a0), zero
1920 ; CHECK-ZVKB32-NEXT: vand.vv v8, v16, v8
1921 ; CHECK-ZVKB32-NEXT: addi sp, sp, 16
1922 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 0
1923 ; CHECK-ZVKB32-NEXT: ret
1925 ; CHECK-ZVKB64-LABEL: vandn_vx_swapped_nxv8i64:
1926 ; CHECK-ZVKB64: # %bb.0:
1927 ; CHECK-ZVKB64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1928 ; CHECK-ZVKB64-NEXT: vandn.vx v8, v8, a0
1929 ; CHECK-ZVKB64-NEXT: ret
1931 %head = insertelement <vscale x 8 x i64> poison, i64 %a, i32 0
1932 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1933 %b = and <vscale x 8 x i64> %splat, %y
1934 ret <vscale x 8 x i64> %b
1937 define <vscale x 1 x i16> @vandn_vx_imm16(<vscale x 1 x i16> %x) {
1938 ; CHECK-LABEL: vandn_vx_imm16:
1940 ; CHECK-NEXT: lui a0, 8
1941 ; CHECK-NEXT: addi a0, a0, -1
1942 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
1943 ; CHECK-NEXT: vand.vx v8, v8, a0
1946 ; CHECK-ZVKB-LABEL: vandn_vx_imm16:
1947 ; CHECK-ZVKB: # %bb.0:
1948 ; CHECK-ZVKB-NEXT: lui a0, 1048568
1949 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
1950 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1951 ; CHECK-ZVKB-NEXT: ret
1952 %a = and <vscale x 1 x i16> splat (i16 32767), %x
1953 ret <vscale x 1 x i16> %a
1956 define <vscale x 1 x i16> @vandn_vx_swapped_imm16(<vscale x 1 x i16> %x) {
1957 ; CHECK-LABEL: vandn_vx_swapped_imm16:
1959 ; CHECK-NEXT: lui a0, 8
1960 ; CHECK-NEXT: addi a0, a0, -1
1961 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
1962 ; CHECK-NEXT: vand.vx v8, v8, a0
1965 ; CHECK-ZVKB-LABEL: vandn_vx_swapped_imm16:
1966 ; CHECK-ZVKB: # %bb.0:
1967 ; CHECK-ZVKB-NEXT: lui a0, 1048568
1968 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
1969 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
1970 ; CHECK-ZVKB-NEXT: ret
1971 %a = and <vscale x 1 x i16> %x, splat (i16 32767)
1972 ret <vscale x 1 x i16> %a
1975 define <vscale x 1 x i64> @vandn_vx_imm64(<vscale x 1 x i64> %x) {
1976 ; CHECK-RV32-LABEL: vandn_vx_imm64:
1977 ; CHECK-RV32: # %bb.0:
1978 ; CHECK-RV32-NEXT: addi sp, sp, -16
1979 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
1980 ; CHECK-RV32-NEXT: lui a0, 1044480
1981 ; CHECK-RV32-NEXT: li a1, 255
1982 ; CHECK-RV32-NEXT: sw a1, 8(sp)
1983 ; CHECK-RV32-NEXT: sw a0, 12(sp)
1984 ; CHECK-RV32-NEXT: addi a0, sp, 8
1985 ; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1986 ; CHECK-RV32-NEXT: vlse64.v v9, (a0), zero
1987 ; CHECK-RV32-NEXT: vand.vv v8, v8, v9
1988 ; CHECK-RV32-NEXT: addi sp, sp, 16
1989 ; CHECK-RV32-NEXT: .cfi_def_cfa_offset 0
1990 ; CHECK-RV32-NEXT: ret
1992 ; CHECK-RV64-LABEL: vandn_vx_imm64:
1993 ; CHECK-RV64: # %bb.0:
1994 ; CHECK-RV64-NEXT: li a0, -1
1995 ; CHECK-RV64-NEXT: slli a0, a0, 56
1996 ; CHECK-RV64-NEXT: addi a0, a0, 255
1997 ; CHECK-RV64-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1998 ; CHECK-RV64-NEXT: vand.vx v8, v8, a0
1999 ; CHECK-RV64-NEXT: ret
2001 ; CHECK-ZVKB32-LABEL: vandn_vx_imm64:
2002 ; CHECK-ZVKB32: # %bb.0:
2003 ; CHECK-ZVKB32-NEXT: addi sp, sp, -16
2004 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 16
2005 ; CHECK-ZVKB32-NEXT: lui a0, 1044480
2006 ; CHECK-ZVKB32-NEXT: li a1, 255
2007 ; CHECK-ZVKB32-NEXT: sw a1, 8(sp)
2008 ; CHECK-ZVKB32-NEXT: sw a0, 12(sp)
2009 ; CHECK-ZVKB32-NEXT: addi a0, sp, 8
2010 ; CHECK-ZVKB32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
2011 ; CHECK-ZVKB32-NEXT: vlse64.v v9, (a0), zero
2012 ; CHECK-ZVKB32-NEXT: vand.vv v8, v8, v9
2013 ; CHECK-ZVKB32-NEXT: addi sp, sp, 16
2014 ; CHECK-ZVKB32-NEXT: .cfi_def_cfa_offset 0
2015 ; CHECK-ZVKB32-NEXT: ret
2017 ; CHECK-ZVKB64-LABEL: vandn_vx_imm64:
2018 ; CHECK-ZVKB64: # %bb.0:
2019 ; CHECK-ZVKB64-NEXT: lui a0, 1048560
2020 ; CHECK-ZVKB64-NEXT: srli a0, a0, 8
2021 ; CHECK-ZVKB64-NEXT: vsetvli a1, zero, e64, m1, ta, ma
2022 ; CHECK-ZVKB64-NEXT: vandn.vx v8, v8, a0
2023 ; CHECK-ZVKB64-NEXT: ret
2024 %a = and <vscale x 1 x i64> %x, splat (i64 -72057594037927681)
2025 ret <vscale x 1 x i64> %a
2028 define <vscale x 1 x i16> @vandn_vx_multi_imm16(<vscale x 1 x i16> %x, <vscale x 1 x i16> %y) {
2029 ; CHECK-LABEL: vandn_vx_multi_imm16:
2031 ; CHECK-NEXT: lui a0, 4
2032 ; CHECK-NEXT: addi a0, a0, -1
2033 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
2034 ; CHECK-NEXT: vand.vx v8, v8, a0
2035 ; CHECK-NEXT: vand.vx v9, v9, a0
2036 ; CHECK-NEXT: vadd.vv v8, v8, v9
2039 ; CHECK-ZVKB-LABEL: vandn_vx_multi_imm16:
2040 ; CHECK-ZVKB: # %bb.0:
2041 ; CHECK-ZVKB-NEXT: lui a0, 1048572
2042 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
2043 ; CHECK-ZVKB-NEXT: vandn.vx v8, v8, a0
2044 ; CHECK-ZVKB-NEXT: vandn.vx v9, v9, a0
2045 ; CHECK-ZVKB-NEXT: vadd.vv v8, v8, v9
2046 ; CHECK-ZVKB-NEXT: ret
2047 %a = and <vscale x 1 x i16> %x, splat (i16 16383)
2048 %b = and <vscale x 1 x i16> %y, splat (i16 16383)
2049 %c = add <vscale x 1 x i16> %a, %b
2050 ret <vscale x 1 x i16> %c
2053 define <vscale x 1 x i16> @vandn_vx_multi_scalar_imm16(<vscale x 1 x i16> %x, i16 %y) {
2054 ; CHECK-LABEL: vandn_vx_multi_scalar_imm16:
2056 ; CHECK-NEXT: lui a1, 8
2057 ; CHECK-NEXT: addi a1, a1, -1
2058 ; CHECK-NEXT: vsetvli a2, zero, e16, mf4, ta, ma
2059 ; CHECK-NEXT: vand.vx v8, v8, a1
2060 ; CHECK-NEXT: or a0, a0, a1
2061 ; CHECK-NEXT: vadd.vx v8, v8, a0
2064 ; CHECK-ZVKB-NOZBB-LABEL: vandn_vx_multi_scalar_imm16:
2065 ; CHECK-ZVKB-NOZBB: # %bb.0:
2066 ; CHECK-ZVKB-NOZBB-NEXT: lui a1, 8
2067 ; CHECK-ZVKB-NOZBB-NEXT: addi a1, a1, -1
2068 ; CHECK-ZVKB-NOZBB-NEXT: vsetvli a2, zero, e16, mf4, ta, ma
2069 ; CHECK-ZVKB-NOZBB-NEXT: vand.vx v8, v8, a1
2070 ; CHECK-ZVKB-NOZBB-NEXT: or a0, a0, a1
2071 ; CHECK-ZVKB-NOZBB-NEXT: vadd.vx v8, v8, a0
2072 ; CHECK-ZVKB-NOZBB-NEXT: ret
2074 ; CHECK-ZVKB-ZBB-LABEL: vandn_vx_multi_scalar_imm16:
2075 ; CHECK-ZVKB-ZBB: # %bb.0:
2076 ; CHECK-ZVKB-ZBB-NEXT: lui a1, 1048568
2077 ; CHECK-ZVKB-ZBB-NEXT: vsetvli a2, zero, e16, mf4, ta, ma
2078 ; CHECK-ZVKB-ZBB-NEXT: vandn.vx v8, v8, a1
2079 ; CHECK-ZVKB-ZBB-NEXT: orn a0, a0, a1
2080 ; CHECK-ZVKB-ZBB-NEXT: vadd.vx v8, v8, a0
2081 ; CHECK-ZVKB-ZBB-NEXT: ret
2082 %a = and <vscale x 1 x i16> %x, splat (i16 32767)
2083 %b = or i16 %y, 32767
2084 %head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
2085 %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
2086 %c = add <vscale x 1 x i16> %a, %splat
2087 ret <vscale x 1 x i16> %c
2090 define <vscale x 1 x i16> @vand_vadd_vx_imm16(<vscale x 1 x i16> %x) {
2091 ; CHECK-LABEL: vand_vadd_vx_imm16:
2093 ; CHECK-NEXT: lui a0, 8
2094 ; CHECK-NEXT: addi a0, a0, -1
2095 ; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
2096 ; CHECK-NEXT: vand.vx v8, v8, a0
2097 ; CHECK-NEXT: vadd.vx v8, v8, a0
2100 ; CHECK-ZVKB-LABEL: vand_vadd_vx_imm16:
2101 ; CHECK-ZVKB: # %bb.0:
2102 ; CHECK-ZVKB-NEXT: lui a0, 8
2103 ; CHECK-ZVKB-NEXT: addi a0, a0, -1
2104 ; CHECK-ZVKB-NEXT: vsetvli a1, zero, e16, mf4, ta, ma
2105 ; CHECK-ZVKB-NEXT: vand.vx v8, v8, a0
2106 ; CHECK-ZVKB-NEXT: vadd.vx v8, v8, a0
2107 ; CHECK-ZVKB-NEXT: ret
2108 %a = and <vscale x 1 x i16> %x, splat (i16 32767)
2109 %b = add <vscale x 1 x i16> %a, splat (i16 32767)
2110 ret <vscale x 1 x i16> %b