1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -riscv-v-vector-bits-min=128 -verify-machineinstrs < %s | FileCheck %s
3; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -riscv-v-vector-bits-min=128 -verify-machineinstrs < %s | FileCheck %s
4; RUN: llc -mtriple=riscv32 -mattr=+experimental-v -riscv-v-vector-bits-min=128 -verify-machineinstrs < %s | FileCheck %s
5; RUN: llc -mtriple=riscv64 -mattr=+experimental-v -riscv-v-vector-bits-min=128 -verify-machineinstrs < %s | FileCheck %s
6
7define void @and_v8i1(<8 x i1>* %x, <8 x i1>* %y) {
8; CHECK-LABEL: and_v8i1:
9; CHECK:       # %bb.0:
10; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
11; CHECK-NEXT:    vle1.v v25, (a0)
12; CHECK-NEXT:    vle1.v v26, (a1)
13; CHECK-NEXT:    vmand.mm v25, v25, v26
14; CHECK-NEXT:    vse1.v v25, (a0)
15; CHECK-NEXT:    ret
16  %a = load <8 x i1>, <8 x i1>* %x
17  %b = load <8 x i1>, <8 x i1>* %y
18  %c = and <8 x i1> %a, %b
19  store <8 x i1> %c, <8 x i1>* %x
20  ret void
21}
22
23define void @or_v16i1(<16 x i1>* %x, <16 x i1>* %y) {
24; CHECK-LABEL: or_v16i1:
25; CHECK:       # %bb.0:
26; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
27; CHECK-NEXT:    vle1.v v25, (a0)
28; CHECK-NEXT:    vle1.v v26, (a1)
29; CHECK-NEXT:    vmor.mm v25, v25, v26
30; CHECK-NEXT:    vse1.v v25, (a0)
31; CHECK-NEXT:    ret
32  %a = load <16 x i1>, <16 x i1>* %x
33  %b = load <16 x i1>, <16 x i1>* %y
34  %c = or <16 x i1> %a, %b
35  store <16 x i1> %c, <16 x i1>* %x
36  ret void
37}
38
39define void @xor_v32i1(<32 x i1>* %x, <32 x i1>* %y) {
40; CHECK-LABEL: xor_v32i1:
41; CHECK:       # %bb.0:
42; CHECK-NEXT:    addi a2, zero, 32
43; CHECK-NEXT:    vsetvli zero, a2, e8, m2, ta, mu
44; CHECK-NEXT:    vle1.v v25, (a0)
45; CHECK-NEXT:    vle1.v v26, (a1)
46; CHECK-NEXT:    vmxor.mm v25, v25, v26
47; CHECK-NEXT:    vse1.v v25, (a0)
48; CHECK-NEXT:    ret
49  %a = load <32 x i1>, <32 x i1>* %x
50  %b = load <32 x i1>, <32 x i1>* %y
51  %c = xor <32 x i1> %a, %b
52  store <32 x i1> %c, <32 x i1>* %x
53  ret void
54}
55
56define void @not_v64i1(<64 x i1>* %x, <64 x i1>* %y) {
57; CHECK-LABEL: not_v64i1:
58; CHECK:       # %bb.0:
59; CHECK-NEXT:    addi a1, zero, 64
60; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, mu
61; CHECK-NEXT:    vle1.v v25, (a0)
62; CHECK-NEXT:    vmnand.mm v25, v25, v25
63; CHECK-NEXT:    vse1.v v25, (a0)
64; CHECK-NEXT:    ret
65  %a = load <64 x i1>, <64 x i1>* %x
66  %b = load <64 x i1>, <64 x i1>* %y
67  %c = xor <64 x i1> %a, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>
68  store <64 x i1> %c, <64 x i1>* %x
69  ret void
70}
71
72define void @andnot_v8i1(<8 x i1>* %x, <8 x i1>* %y) {
73; CHECK-LABEL: andnot_v8i1:
74; CHECK:       # %bb.0:
75; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
76; CHECK-NEXT:    vle1.v v25, (a0)
77; CHECK-NEXT:    vle1.v v26, (a1)
78; CHECK-NEXT:    vmandnot.mm v25, v26, v25
79; CHECK-NEXT:    vse1.v v25, (a0)
80; CHECK-NEXT:    ret
81  %a = load <8 x i1>, <8 x i1>* %x
82  %b = load <8 x i1>, <8 x i1>* %y
83  %c = xor <8 x i1> %a, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>
84  %d = and <8 x i1> %b, %c
85  store <8 x i1> %d, <8 x i1>* %x
86  ret void
87}
88
89define void @ornot_v16i1(<16 x i1>* %x, <16 x i1>* %y) {
90; CHECK-LABEL: ornot_v16i1:
91; CHECK:       # %bb.0:
92; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
93; CHECK-NEXT:    vle1.v v25, (a0)
94; CHECK-NEXT:    vle1.v v26, (a1)
95; CHECK-NEXT:    vmornot.mm v25, v26, v25
96; CHECK-NEXT:    vse1.v v25, (a0)
97; CHECK-NEXT:    ret
98  %a = load <16 x i1>, <16 x i1>* %x
99  %b = load <16 x i1>, <16 x i1>* %y
100  %c = xor <16 x i1> %a, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>
101  %d = or <16 x i1> %b, %c
102  store <16 x i1> %d, <16 x i1>* %x
103  ret void
104}
105
106define void @xornot_v32i1(<32 x i1>* %x, <32 x i1>* %y) {
107; CHECK-LABEL: xornot_v32i1:
108; CHECK:       # %bb.0:
109; CHECK-NEXT:    addi a2, zero, 32
110; CHECK-NEXT:    vsetvli zero, a2, e8, m2, ta, mu
111; CHECK-NEXT:    vle1.v v25, (a0)
112; CHECK-NEXT:    vle1.v v26, (a1)
113; CHECK-NEXT:    vmxnor.mm v25, v25, v26
114; CHECK-NEXT:    vse1.v v25, (a0)
115; CHECK-NEXT:    ret
116  %a = load <32 x i1>, <32 x i1>* %x
117  %b = load <32 x i1>, <32 x i1>* %y
118  %c = xor <32 x i1> %a, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>
119  %d = xor <32 x i1> %b, %c
120  store <32 x i1> %d, <32 x i1>* %x
121  ret void
122}
123
124define void @nand_v8i1(<8 x i1>* %x, <8 x i1>* %y) {
125; CHECK-LABEL: nand_v8i1:
126; CHECK:       # %bb.0:
127; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
128; CHECK-NEXT:    vle1.v v25, (a0)
129; CHECK-NEXT:    vle1.v v26, (a1)
130; CHECK-NEXT:    vmnand.mm v25, v25, v26
131; CHECK-NEXT:    vse1.v v25, (a0)
132; CHECK-NEXT:    ret
133  %a = load <8 x i1>, <8 x i1>* %x
134  %b = load <8 x i1>, <8 x i1>* %y
135  %c = and <8 x i1> %a, %b
136  %d = xor <8 x i1> %c, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>
137  store <8 x i1> %d, <8 x i1>* %x
138  ret void
139}
140
141define void @nor_v16i1(<16 x i1>* %x, <16 x i1>* %y) {
142; CHECK-LABEL: nor_v16i1:
143; CHECK:       # %bb.0:
144; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
145; CHECK-NEXT:    vle1.v v25, (a0)
146; CHECK-NEXT:    vle1.v v26, (a1)
147; CHECK-NEXT:    vmnor.mm v25, v25, v26
148; CHECK-NEXT:    vse1.v v25, (a0)
149; CHECK-NEXT:    ret
150  %a = load <16 x i1>, <16 x i1>* %x
151  %b = load <16 x i1>, <16 x i1>* %y
152  %c = or <16 x i1> %a, %b
153  %d = xor <16 x i1> %c, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>
154  store <16 x i1> %d, <16 x i1>* %x
155  ret void
156}
157
158define void @xnor_v32i1(<32 x i1>* %x, <32 x i1>* %y) {
159; CHECK-LABEL: xnor_v32i1:
160; CHECK:       # %bb.0:
161; CHECK-NEXT:    addi a2, zero, 32
162; CHECK-NEXT:    vsetvli zero, a2, e8, m2, ta, mu
163; CHECK-NEXT:    vle1.v v25, (a0)
164; CHECK-NEXT:    vle1.v v26, (a1)
165; CHECK-NEXT:    vmxnor.mm v25, v25, v26
166; CHECK-NEXT:    vse1.v v25, (a0)
167; CHECK-NEXT:    ret
168  %a = load <32 x i1>, <32 x i1>* %x
169  %b = load <32 x i1>, <32 x i1>* %y
170  %c = xor <32 x i1> %a, %b
171  %d = xor <32 x i1> %c, <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>
172  store <32 x i1> %d, <32 x i1>* %x
173  ret void
174}
175