1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
5 define <vscale x 1 x i1> @vmand_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
6 ; CHECK-LABEL: vmand_vv_nxv1i1:
8 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
9 ; CHECK-NEXT: vmand.mm v0, v0, v8
11 %vc = and <vscale x 1 x i1> %va, %vb
12 ret <vscale x 1 x i1> %vc
15 define <vscale x 2 x i1> @vmand_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
16 ; CHECK-LABEL: vmand_vv_nxv2i1:
18 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
19 ; CHECK-NEXT: vmand.mm v0, v0, v8
21 %vc = and <vscale x 2 x i1> %va, %vb
22 ret <vscale x 2 x i1> %vc
25 define <vscale x 4 x i1> @vmand_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
26 ; CHECK-LABEL: vmand_vv_nxv4i1:
28 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
29 ; CHECK-NEXT: vmand.mm v0, v0, v8
31 %vc = and <vscale x 4 x i1> %va, %vb
32 ret <vscale x 4 x i1> %vc
35 define <vscale x 8 x i1> @vmand_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
36 ; CHECK-LABEL: vmand_vv_nxv8i1:
38 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
39 ; CHECK-NEXT: vmand.mm v0, v0, v8
41 %vc = and <vscale x 8 x i1> %va, %vb
42 ret <vscale x 8 x i1> %vc
45 define <vscale x 16 x i1> @vmand_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
46 ; CHECK-LABEL: vmand_vv_nxv16i1:
48 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
49 ; CHECK-NEXT: vmand.mm v0, v0, v8
51 %vc = and <vscale x 16 x i1> %va, %vb
52 ret <vscale x 16 x i1> %vc
55 define <vscale x 1 x i1> @vmor_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
56 ; CHECK-LABEL: vmor_vv_nxv1i1:
58 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
59 ; CHECK-NEXT: vmor.mm v0, v0, v8
61 %vc = or <vscale x 1 x i1> %va, %vb
62 ret <vscale x 1 x i1> %vc
65 define <vscale x 2 x i1> @vmor_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
66 ; CHECK-LABEL: vmor_vv_nxv2i1:
68 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
69 ; CHECK-NEXT: vmor.mm v0, v0, v8
71 %vc = or <vscale x 2 x i1> %va, %vb
72 ret <vscale x 2 x i1> %vc
75 define <vscale x 4 x i1> @vmor_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
76 ; CHECK-LABEL: vmor_vv_nxv4i1:
78 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
79 ; CHECK-NEXT: vmor.mm v0, v0, v8
81 %vc = or <vscale x 4 x i1> %va, %vb
82 ret <vscale x 4 x i1> %vc
85 define <vscale x 8 x i1> @vmor_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
86 ; CHECK-LABEL: vmor_vv_nxv8i1:
88 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
89 ; CHECK-NEXT: vmor.mm v0, v0, v8
91 %vc = or <vscale x 8 x i1> %va, %vb
92 ret <vscale x 8 x i1> %vc
95 define <vscale x 16 x i1> @vmor_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
96 ; CHECK-LABEL: vmor_vv_nxv16i1:
98 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
99 ; CHECK-NEXT: vmor.mm v0, v0, v8
101 %vc = or <vscale x 16 x i1> %va, %vb
102 ret <vscale x 16 x i1> %vc
105 define <vscale x 1 x i1> @vmxor_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
106 ; CHECK-LABEL: vmxor_vv_nxv1i1:
108 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
109 ; CHECK-NEXT: vmxor.mm v0, v0, v8
111 %vc = xor <vscale x 1 x i1> %va, %vb
112 ret <vscale x 1 x i1> %vc
115 define <vscale x 2 x i1> @vmxor_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
116 ; CHECK-LABEL: vmxor_vv_nxv2i1:
118 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
119 ; CHECK-NEXT: vmxor.mm v0, v0, v8
121 %vc = xor <vscale x 2 x i1> %va, %vb
122 ret <vscale x 2 x i1> %vc
125 define <vscale x 4 x i1> @vmxor_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
126 ; CHECK-LABEL: vmxor_vv_nxv4i1:
128 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
129 ; CHECK-NEXT: vmxor.mm v0, v0, v8
131 %vc = xor <vscale x 4 x i1> %va, %vb
132 ret <vscale x 4 x i1> %vc
135 define <vscale x 8 x i1> @vmxor_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
136 ; CHECK-LABEL: vmxor_vv_nxv8i1:
138 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
139 ; CHECK-NEXT: vmxor.mm v0, v0, v8
141 %vc = xor <vscale x 8 x i1> %va, %vb
142 ret <vscale x 8 x i1> %vc
145 define <vscale x 16 x i1> @vmxor_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
146 ; CHECK-LABEL: vmxor_vv_nxv16i1:
148 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
149 ; CHECK-NEXT: vmxor.mm v0, v0, v8
151 %vc = xor <vscale x 16 x i1> %va, %vb
152 ret <vscale x 16 x i1> %vc
155 define <vscale x 1 x i1> @vmnand_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
156 ; CHECK-LABEL: vmnand_vv_nxv1i1:
158 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
159 ; CHECK-NEXT: vmnand.mm v0, v0, v8
161 %vc = and <vscale x 1 x i1> %va, %vb
162 %not = xor <vscale x 1 x i1> %vc, splat (i1 1)
163 ret <vscale x 1 x i1> %not
166 define <vscale x 2 x i1> @vmnand_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
167 ; CHECK-LABEL: vmnand_vv_nxv2i1:
169 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
170 ; CHECK-NEXT: vmnand.mm v0, v0, v8
172 %vc = and <vscale x 2 x i1> %va, %vb
173 %not = xor <vscale x 2 x i1> %vc, splat (i1 1)
174 ret <vscale x 2 x i1> %not
177 define <vscale x 4 x i1> @vmnand_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
178 ; CHECK-LABEL: vmnand_vv_nxv4i1:
180 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
181 ; CHECK-NEXT: vmnand.mm v0, v0, v8
183 %vc = and <vscale x 4 x i1> %va, %vb
184 %not = xor <vscale x 4 x i1> %vc, splat (i1 1)
185 ret <vscale x 4 x i1> %not
188 define <vscale x 8 x i1> @vmnand_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
189 ; CHECK-LABEL: vmnand_vv_nxv8i1:
191 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
192 ; CHECK-NEXT: vmnand.mm v0, v0, v8
194 %vc = and <vscale x 8 x i1> %va, %vb
195 %not = xor <vscale x 8 x i1> %vc, splat (i1 1)
196 ret <vscale x 8 x i1> %not
199 define <vscale x 16 x i1> @vmnand_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
200 ; CHECK-LABEL: vmnand_vv_nxv16i1:
202 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
203 ; CHECK-NEXT: vmnand.mm v0, v0, v8
205 %vc = and <vscale x 16 x i1> %va, %vb
206 %not = xor <vscale x 16 x i1> %vc, splat (i1 1)
207 ret <vscale x 16 x i1> %not
210 define <vscale x 1 x i1> @vmnor_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
211 ; CHECK-LABEL: vmnor_vv_nxv1i1:
213 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
214 ; CHECK-NEXT: vmnor.mm v0, v0, v8
216 %vc = or <vscale x 1 x i1> %va, %vb
217 %not = xor <vscale x 1 x i1> %vc, splat (i1 1)
218 ret <vscale x 1 x i1> %not
221 define <vscale x 2 x i1> @vmnor_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
222 ; CHECK-LABEL: vmnor_vv_nxv2i1:
224 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
225 ; CHECK-NEXT: vmnor.mm v0, v0, v8
227 %vc = or <vscale x 2 x i1> %va, %vb
228 %not = xor <vscale x 2 x i1> %vc, splat (i1 1)
229 ret <vscale x 2 x i1> %not
232 define <vscale x 4 x i1> @vmnor_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
233 ; CHECK-LABEL: vmnor_vv_nxv4i1:
235 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
236 ; CHECK-NEXT: vmnor.mm v0, v0, v8
238 %vc = or <vscale x 4 x i1> %va, %vb
239 %not = xor <vscale x 4 x i1> %vc, splat (i1 1)
240 ret <vscale x 4 x i1> %not
243 define <vscale x 8 x i1> @vmnor_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
244 ; CHECK-LABEL: vmnor_vv_nxv8i1:
246 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
247 ; CHECK-NEXT: vmnor.mm v0, v0, v8
249 %vc = or <vscale x 8 x i1> %va, %vb
250 %not = xor <vscale x 8 x i1> %vc, splat (i1 1)
251 ret <vscale x 8 x i1> %not
254 define <vscale x 16 x i1> @vmnor_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
255 ; CHECK-LABEL: vmnor_vv_nxv16i1:
257 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
258 ; CHECK-NEXT: vmnor.mm v0, v0, v8
260 %vc = or <vscale x 16 x i1> %va, %vb
261 %not = xor <vscale x 16 x i1> %vc, splat (i1 1)
262 ret <vscale x 16 x i1> %not
265 define <vscale x 1 x i1> @vmxnor_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
266 ; CHECK-LABEL: vmxnor_vv_nxv1i1:
268 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
269 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
271 %vc = xor <vscale x 1 x i1> %va, %vb
272 %not = xor <vscale x 1 x i1> %vc, splat (i1 1)
273 ret <vscale x 1 x i1> %not
276 define <vscale x 2 x i1> @vmxnor_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
277 ; CHECK-LABEL: vmxnor_vv_nxv2i1:
279 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
280 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
282 %vc = xor <vscale x 2 x i1> %va, %vb
283 %not = xor <vscale x 2 x i1> %vc, splat (i1 1)
284 ret <vscale x 2 x i1> %not
287 define <vscale x 4 x i1> @vmxnor_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
288 ; CHECK-LABEL: vmxnor_vv_nxv4i1:
290 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
291 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
293 %vc = xor <vscale x 4 x i1> %va, %vb
294 %not = xor <vscale x 4 x i1> %vc, splat (i1 1)
295 ret <vscale x 4 x i1> %not
298 define <vscale x 8 x i1> @vmxnor_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
299 ; CHECK-LABEL: vmxnor_vv_nxv8i1:
301 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
302 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
304 %vc = xor <vscale x 8 x i1> %va, %vb
305 %not = xor <vscale x 8 x i1> %vc, splat (i1 1)
306 ret <vscale x 8 x i1> %not
309 define <vscale x 16 x i1> @vmxnor_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
310 ; CHECK-LABEL: vmxnor_vv_nxv16i1:
312 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
313 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
315 %vc = xor <vscale x 16 x i1> %va, %vb
316 %not = xor <vscale x 16 x i1> %vc, splat (i1 1)
317 ret <vscale x 16 x i1> %not
320 define <vscale x 1 x i1> @vmandn_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
321 ; CHECK-LABEL: vmandn_vv_nxv1i1:
323 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
324 ; CHECK-NEXT: vmandn.mm v0, v0, v8
326 %not = xor <vscale x 1 x i1> %vb, splat (i1 1)
327 %vc = and <vscale x 1 x i1> %va, %not
328 ret <vscale x 1 x i1> %vc
331 define <vscale x 2 x i1> @vmandn_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
332 ; CHECK-LABEL: vmandn_vv_nxv2i1:
334 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
335 ; CHECK-NEXT: vmandn.mm v0, v0, v8
337 %not = xor <vscale x 2 x i1> %vb, splat (i1 1)
338 %vc = and <vscale x 2 x i1> %va, %not
339 ret <vscale x 2 x i1> %vc
342 define <vscale x 4 x i1> @vmandn_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
343 ; CHECK-LABEL: vmandn_vv_nxv4i1:
345 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
346 ; CHECK-NEXT: vmandn.mm v0, v0, v8
348 %not = xor <vscale x 4 x i1> %vb, splat (i1 1)
349 %vc = and <vscale x 4 x i1> %va, %not
350 ret <vscale x 4 x i1> %vc
353 define <vscale x 8 x i1> @vmandn_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
354 ; CHECK-LABEL: vmandn_vv_nxv8i1:
356 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
357 ; CHECK-NEXT: vmandn.mm v0, v0, v8
359 %not = xor <vscale x 8 x i1> %vb, splat (i1 1)
360 %vc = and <vscale x 8 x i1> %va, %not
361 ret <vscale x 8 x i1> %vc
364 define <vscale x 16 x i1> @vmandn_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
365 ; CHECK-LABEL: vmandn_vv_nxv16i1:
367 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
368 ; CHECK-NEXT: vmandn.mm v0, v0, v8
370 %not = xor <vscale x 16 x i1> %vb, splat (i1 1)
371 %vc = and <vscale x 16 x i1> %va, %not
372 ret <vscale x 16 x i1> %vc
375 define <vscale x 1 x i1> @vmorn_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
376 ; CHECK-LABEL: vmorn_vv_nxv1i1:
378 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
379 ; CHECK-NEXT: vmorn.mm v0, v0, v8
381 %not = xor <vscale x 1 x i1> %vb, splat (i1 1)
382 %vc = or <vscale x 1 x i1> %va, %not
383 ret <vscale x 1 x i1> %vc
386 define <vscale x 2 x i1> @vmorn_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
387 ; CHECK-LABEL: vmorn_vv_nxv2i1:
389 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
390 ; CHECK-NEXT: vmorn.mm v0, v0, v8
392 %not = xor <vscale x 2 x i1> %vb, splat (i1 1)
393 %vc = or <vscale x 2 x i1> %va, %not
394 ret <vscale x 2 x i1> %vc
397 define <vscale x 4 x i1> @vmorn_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
398 ; CHECK-LABEL: vmorn_vv_nxv4i1:
400 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
401 ; CHECK-NEXT: vmorn.mm v0, v0, v8
403 %not = xor <vscale x 4 x i1> %vb, splat (i1 1)
404 %vc = or <vscale x 4 x i1> %va, %not
405 ret <vscale x 4 x i1> %vc
408 define <vscale x 8 x i1> @vmorn_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
409 ; CHECK-LABEL: vmorn_vv_nxv8i1:
411 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
412 ; CHECK-NEXT: vmorn.mm v0, v0, v8
414 %not = xor <vscale x 8 x i1> %vb, splat (i1 1)
415 %vc = or <vscale x 8 x i1> %va, %not
416 ret <vscale x 8 x i1> %vc
419 define <vscale x 16 x i1> @vmorn_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
420 ; CHECK-LABEL: vmorn_vv_nxv16i1:
422 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
423 ; CHECK-NEXT: vmorn.mm v0, v0, v8
425 %not = xor <vscale x 16 x i1> %vb, splat (i1 1)
426 %vc = or <vscale x 16 x i1> %va, %not
427 ret <vscale x 16 x i1> %vc