xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/marith-vp.ll (revision 74f985b793bf4005e49736f8c2cef8b5cbf7c1ab)
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
4
5declare <1 x i1> @llvm.vp.and.v1i1(<1 x i1>, <1 x i1>, <1 x i1>, i32)
6
7define <1 x i1> @and_v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 zeroext %evl) {
8; CHECK-LABEL: and_v1i1:
9; CHECK:       # %bb.0:
10; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
11; CHECK-NEXT:    vmand.mm v0, v0, v8
12; CHECK-NEXT:    ret
13  %v = call <1 x i1> @llvm.vp.and.v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 %evl)
14  ret <1 x i1> %v
15}
16
17declare <2 x i1> @llvm.vp.and.v2i1(<2 x i1>, <2 x i1>, <2 x i1>, i32)
18
19define <2 x i1> @and_v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 zeroext %evl) {
20; CHECK-LABEL: and_v2i1:
21; CHECK:       # %bb.0:
22; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
23; CHECK-NEXT:    vmand.mm v0, v0, v8
24; CHECK-NEXT:    ret
25  %v = call <2 x i1> @llvm.vp.and.v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 %evl)
26  ret <2 x i1> %v
27}
28
29declare <4 x i1> @llvm.vp.and.v4i1(<4 x i1>, <4 x i1>, <4 x i1>, i32)
30
31define <4 x i1> @and_v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 zeroext %evl) {
32; CHECK-LABEL: and_v4i1:
33; CHECK:       # %bb.0:
34; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
35; CHECK-NEXT:    vmand.mm v0, v0, v8
36; CHECK-NEXT:    ret
37  %v = call <4 x i1> @llvm.vp.and.v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 %evl)
38  ret <4 x i1> %v
39}
40
41declare <8 x i1> @llvm.vp.and.v8i1(<8 x i1>, <8 x i1>, <8 x i1>, i32)
42
43define <8 x i1> @and_v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 zeroext %evl) {
44; CHECK-LABEL: and_v8i1:
45; CHECK:       # %bb.0:
46; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
47; CHECK-NEXT:    vmand.mm v0, v0, v8
48; CHECK-NEXT:    ret
49  %v = call <8 x i1> @llvm.vp.and.v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 %evl)
50  ret <8 x i1> %v
51}
52
53declare <16 x i1> @llvm.vp.and.v16i1(<16 x i1>, <16 x i1>, <16 x i1>, i32)
54
55define <16 x i1> @and_v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 zeroext %evl) {
56; CHECK-LABEL: and_v16i1:
57; CHECK:       # %bb.0:
58; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
59; CHECK-NEXT:    vmand.mm v0, v0, v8
60; CHECK-NEXT:    ret
61  %v = call <16 x i1> @llvm.vp.and.v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 %evl)
62  ret <16 x i1> %v
63}
64
65declare <vscale x 1 x i1> @llvm.vp.and.nxv1i1(<vscale x 1 x i1>, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
66
67define <vscale x 1 x i1> @and_nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 zeroext %evl) {
68; CHECK-LABEL: and_nxv1i1:
69; CHECK:       # %bb.0:
70; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
71; CHECK-NEXT:    vmand.mm v0, v0, v8
72; CHECK-NEXT:    ret
73  %v = call <vscale x 1 x i1> @llvm.vp.and.nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 %evl)
74  ret <vscale x 1 x i1> %v
75}
76
77declare <vscale x 2 x i1> @llvm.vp.and.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
78
79define <vscale x 2 x i1> @and_nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 zeroext %evl) {
80; CHECK-LABEL: and_nxv2i1:
81; CHECK:       # %bb.0:
82; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
83; CHECK-NEXT:    vmand.mm v0, v0, v8
84; CHECK-NEXT:    ret
85  %v = call <vscale x 2 x i1> @llvm.vp.and.nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 %evl)
86  ret <vscale x 2 x i1> %v
87}
88
89declare <vscale x 4 x i1> @llvm.vp.and.nxv4i1(<vscale x 4 x i1>, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
90
91define <vscale x 4 x i1> @and_nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 zeroext %evl) {
92; CHECK-LABEL: and_nxv4i1:
93; CHECK:       # %bb.0:
94; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
95; CHECK-NEXT:    vmand.mm v0, v0, v8
96; CHECK-NEXT:    ret
97  %v = call <vscale x 4 x i1> @llvm.vp.and.nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 %evl)
98  ret <vscale x 4 x i1> %v
99}
100
101declare <vscale x 8 x i1> @llvm.vp.and.nxv8i1(<vscale x 8 x i1>, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
102
103define <vscale x 8 x i1> @and_nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 zeroext %evl) {
104; CHECK-LABEL: and_nxv8i1:
105; CHECK:       # %bb.0:
106; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
107; CHECK-NEXT:    vmand.mm v0, v0, v8
108; CHECK-NEXT:    ret
109  %v = call <vscale x 8 x i1> @llvm.vp.and.nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 %evl)
110  ret <vscale x 8 x i1> %v
111}
112
113declare <vscale x 16 x i1> @llvm.vp.and.nxv16i1(<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
114
115define <vscale x 16 x i1> @and_nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 zeroext %evl) {
116; CHECK-LABEL: and_nxv16i1:
117; CHECK:       # %bb.0:
118; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
119; CHECK-NEXT:    vmand.mm v0, v0, v8
120; CHECK-NEXT:    ret
121  %v = call <vscale x 16 x i1> @llvm.vp.and.nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 %evl)
122  ret <vscale x 16 x i1> %v
123}
124
125declare <vscale x 32 x i1> @llvm.vp.and.nxv32i1(<vscale x 32 x i1>, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
126
127define <vscale x 32 x i1> @and_nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 zeroext %evl) {
128; CHECK-LABEL: and_nxv32i1:
129; CHECK:       # %bb.0:
130; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
131; CHECK-NEXT:    vmand.mm v0, v0, v8
132; CHECK-NEXT:    ret
133  %v = call <vscale x 32 x i1> @llvm.vp.and.nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 %evl)
134  ret <vscale x 32 x i1> %v
135}
136
137declare <vscale x 64 x i1> @llvm.vp.and.nxv64i1(<vscale x 64 x i1>, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
138
139define <vscale x 64 x i1> @and_nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 zeroext %evl) {
140; CHECK-LABEL: and_nxv64i1:
141; CHECK:       # %bb.0:
142; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
143; CHECK-NEXT:    vmand.mm v0, v0, v8
144; CHECK-NEXT:    ret
145  %v = call <vscale x 64 x i1> @llvm.vp.and.nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 %evl)
146  ret <vscale x 64 x i1> %v
147}
148
149declare <1 x i1> @llvm.vp.or.v1i1(<1 x i1>, <1 x i1>, <1 x i1>, i32)
150
151define <1 x i1> @or_v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 zeroext %evl) {
152; CHECK-LABEL: or_v1i1:
153; CHECK:       # %bb.0:
154; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
155; CHECK-NEXT:    vmor.mm v0, v0, v8
156; CHECK-NEXT:    ret
157  %v = call <1 x i1> @llvm.vp.or.v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 %evl)
158  ret <1 x i1> %v
159}
160
161declare <2 x i1> @llvm.vp.or.v2i1(<2 x i1>, <2 x i1>, <2 x i1>, i32)
162
163define <2 x i1> @or_v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 zeroext %evl) {
164; CHECK-LABEL: or_v2i1:
165; CHECK:       # %bb.0:
166; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
167; CHECK-NEXT:    vmor.mm v0, v0, v8
168; CHECK-NEXT:    ret
169  %v = call <2 x i1> @llvm.vp.or.v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 %evl)
170  ret <2 x i1> %v
171}
172
173declare <4 x i1> @llvm.vp.or.v4i1(<4 x i1>, <4 x i1>, <4 x i1>, i32)
174
175define <4 x i1> @or_v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 zeroext %evl) {
176; CHECK-LABEL: or_v4i1:
177; CHECK:       # %bb.0:
178; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
179; CHECK-NEXT:    vmor.mm v0, v0, v8
180; CHECK-NEXT:    ret
181  %v = call <4 x i1> @llvm.vp.or.v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 %evl)
182  ret <4 x i1> %v
183}
184
185declare <8 x i1> @llvm.vp.or.v8i1(<8 x i1>, <8 x i1>, <8 x i1>, i32)
186
187define <8 x i1> @or_v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 zeroext %evl) {
188; CHECK-LABEL: or_v8i1:
189; CHECK:       # %bb.0:
190; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
191; CHECK-NEXT:    vmor.mm v0, v0, v8
192; CHECK-NEXT:    ret
193  %v = call <8 x i1> @llvm.vp.or.v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 %evl)
194  ret <8 x i1> %v
195}
196
197declare <16 x i1> @llvm.vp.or.v16i1(<16 x i1>, <16 x i1>, <16 x i1>, i32)
198
199define <16 x i1> @or_v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 zeroext %evl) {
200; CHECK-LABEL: or_v16i1:
201; CHECK:       # %bb.0:
202; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
203; CHECK-NEXT:    vmor.mm v0, v0, v8
204; CHECK-NEXT:    ret
205  %v = call <16 x i1> @llvm.vp.or.v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 %evl)
206  ret <16 x i1> %v
207}
208
209declare <vscale x 1 x i1> @llvm.vp.or.nxv1i1(<vscale x 1 x i1>, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
210
211define <vscale x 1 x i1> @or_nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 zeroext %evl) {
212; CHECK-LABEL: or_nxv1i1:
213; CHECK:       # %bb.0:
214; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
215; CHECK-NEXT:    vmor.mm v0, v0, v8
216; CHECK-NEXT:    ret
217  %v = call <vscale x 1 x i1> @llvm.vp.or.nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 %evl)
218  ret <vscale x 1 x i1> %v
219}
220
221declare <vscale x 2 x i1> @llvm.vp.or.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
222
223define <vscale x 2 x i1> @or_nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 zeroext %evl) {
224; CHECK-LABEL: or_nxv2i1:
225; CHECK:       # %bb.0:
226; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
227; CHECK-NEXT:    vmor.mm v0, v0, v8
228; CHECK-NEXT:    ret
229  %v = call <vscale x 2 x i1> @llvm.vp.or.nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 %evl)
230  ret <vscale x 2 x i1> %v
231}
232
233declare <vscale x 4 x i1> @llvm.vp.or.nxv4i1(<vscale x 4 x i1>, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
234
235define <vscale x 4 x i1> @or_nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 zeroext %evl) {
236; CHECK-LABEL: or_nxv4i1:
237; CHECK:       # %bb.0:
238; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
239; CHECK-NEXT:    vmor.mm v0, v0, v8
240; CHECK-NEXT:    ret
241  %v = call <vscale x 4 x i1> @llvm.vp.or.nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 %evl)
242  ret <vscale x 4 x i1> %v
243}
244
245declare <vscale x 8 x i1> @llvm.vp.or.nxv8i1(<vscale x 8 x i1>, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
246
247define <vscale x 8 x i1> @or_nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 zeroext %evl) {
248; CHECK-LABEL: or_nxv8i1:
249; CHECK:       # %bb.0:
250; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
251; CHECK-NEXT:    vmor.mm v0, v0, v8
252; CHECK-NEXT:    ret
253  %v = call <vscale x 8 x i1> @llvm.vp.or.nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 %evl)
254  ret <vscale x 8 x i1> %v
255}
256
257declare <vscale x 16 x i1> @llvm.vp.or.nxv16i1(<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
258
259define <vscale x 16 x i1> @or_nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 zeroext %evl) {
260; CHECK-LABEL: or_nxv16i1:
261; CHECK:       # %bb.0:
262; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
263; CHECK-NEXT:    vmor.mm v0, v0, v8
264; CHECK-NEXT:    ret
265  %v = call <vscale x 16 x i1> @llvm.vp.or.nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 %evl)
266  ret <vscale x 16 x i1> %v
267}
268
269declare <vscale x 32 x i1> @llvm.vp.or.nxv32i1(<vscale x 32 x i1>, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
270
271define <vscale x 32 x i1> @or_nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 zeroext %evl) {
272; CHECK-LABEL: or_nxv32i1:
273; CHECK:       # %bb.0:
274; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
275; CHECK-NEXT:    vmor.mm v0, v0, v8
276; CHECK-NEXT:    ret
277  %v = call <vscale x 32 x i1> @llvm.vp.or.nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 %evl)
278  ret <vscale x 32 x i1> %v
279}
280
281declare <vscale x 64 x i1> @llvm.vp.or.nxv64i1(<vscale x 64 x i1>, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
282
283define <vscale x 64 x i1> @or_nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 zeroext %evl) {
284; CHECK-LABEL: or_nxv64i1:
285; CHECK:       # %bb.0:
286; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
287; CHECK-NEXT:    vmor.mm v0, v0, v8
288; CHECK-NEXT:    ret
289  %v = call <vscale x 64 x i1> @llvm.vp.or.nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 %evl)
290  ret <vscale x 64 x i1> %v
291}
292
293declare <1 x i1> @llvm.vp.xor.v1i1(<1 x i1>, <1 x i1>, <1 x i1>, i32)
294
295define <1 x i1> @xor_v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 zeroext %evl) {
296; CHECK-LABEL: xor_v1i1:
297; CHECK:       # %bb.0:
298; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
299; CHECK-NEXT:    vmxor.mm v0, v0, v8
300; CHECK-NEXT:    ret
301  %v = call <1 x i1> @llvm.vp.xor.v1i1(<1 x i1> %b, <1 x i1> %c, <1 x i1> %a, i32 %evl)
302  ret <1 x i1> %v
303}
304
305declare <2 x i1> @llvm.vp.xor.v2i1(<2 x i1>, <2 x i1>, <2 x i1>, i32)
306
307define <2 x i1> @xor_v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 zeroext %evl) {
308; CHECK-LABEL: xor_v2i1:
309; CHECK:       # %bb.0:
310; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
311; CHECK-NEXT:    vmxor.mm v0, v0, v8
312; CHECK-NEXT:    ret
313  %v = call <2 x i1> @llvm.vp.xor.v2i1(<2 x i1> %b, <2 x i1> %c, <2 x i1> %a, i32 %evl)
314  ret <2 x i1> %v
315}
316
317declare <4 x i1> @llvm.vp.xor.v4i1(<4 x i1>, <4 x i1>, <4 x i1>, i32)
318
319define <4 x i1> @xor_v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 zeroext %evl) {
320; CHECK-LABEL: xor_v4i1:
321; CHECK:       # %bb.0:
322; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
323; CHECK-NEXT:    vmxor.mm v0, v0, v8
324; CHECK-NEXT:    ret
325  %v = call <4 x i1> @llvm.vp.xor.v4i1(<4 x i1> %b, <4 x i1> %c, <4 x i1> %a, i32 %evl)
326  ret <4 x i1> %v
327}
328
329declare <8 x i1> @llvm.vp.xor.v8i1(<8 x i1>, <8 x i1>, <8 x i1>, i32)
330
331define <8 x i1> @xor_v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 zeroext %evl) {
332; CHECK-LABEL: xor_v8i1:
333; CHECK:       # %bb.0:
334; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
335; CHECK-NEXT:    vmxor.mm v0, v0, v8
336; CHECK-NEXT:    ret
337  %v = call <8 x i1> @llvm.vp.xor.v8i1(<8 x i1> %b, <8 x i1> %c, <8 x i1> %a, i32 %evl)
338  ret <8 x i1> %v
339}
340
341declare <16 x i1> @llvm.vp.xor.v16i1(<16 x i1>, <16 x i1>, <16 x i1>, i32)
342
343define <16 x i1> @xor_v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 zeroext %evl) {
344; CHECK-LABEL: xor_v16i1:
345; CHECK:       # %bb.0:
346; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
347; CHECK-NEXT:    vmxor.mm v0, v0, v8
348; CHECK-NEXT:    ret
349  %v = call <16 x i1> @llvm.vp.xor.v16i1(<16 x i1> %b, <16 x i1> %c, <16 x i1> %a, i32 %evl)
350  ret <16 x i1> %v
351}
352
353declare <vscale x 1 x i1> @llvm.vp.xor.nxv1i1(<vscale x 1 x i1>, <vscale x 1 x i1>, <vscale x 1 x i1>, i32)
354
355define <vscale x 1 x i1> @xor_nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 zeroext %evl) {
356; CHECK-LABEL: xor_nxv1i1:
357; CHECK:       # %bb.0:
358; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
359; CHECK-NEXT:    vmxor.mm v0, v0, v8
360; CHECK-NEXT:    ret
361  %v = call <vscale x 1 x i1> @llvm.vp.xor.nxv1i1(<vscale x 1 x i1> %b, <vscale x 1 x i1> %c, <vscale x 1 x i1> %a, i32 %evl)
362  ret <vscale x 1 x i1> %v
363}
364
365declare <vscale x 2 x i1> @llvm.vp.xor.nxv2i1(<vscale x 2 x i1>, <vscale x 2 x i1>, <vscale x 2 x i1>, i32)
366
367define <vscale x 2 x i1> @xor_nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 zeroext %evl) {
368; CHECK-LABEL: xor_nxv2i1:
369; CHECK:       # %bb.0:
370; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
371; CHECK-NEXT:    vmxor.mm v0, v0, v8
372; CHECK-NEXT:    ret
373  %v = call <vscale x 2 x i1> @llvm.vp.xor.nxv2i1(<vscale x 2 x i1> %b, <vscale x 2 x i1> %c, <vscale x 2 x i1> %a, i32 %evl)
374  ret <vscale x 2 x i1> %v
375}
376
377declare <vscale x 4 x i1> @llvm.vp.xor.nxv4i1(<vscale x 4 x i1>, <vscale x 4 x i1>, <vscale x 4 x i1>, i32)
378
379define <vscale x 4 x i1> @xor_nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 zeroext %evl) {
380; CHECK-LABEL: xor_nxv4i1:
381; CHECK:       # %bb.0:
382; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
383; CHECK-NEXT:    vmxor.mm v0, v0, v8
384; CHECK-NEXT:    ret
385  %v = call <vscale x 4 x i1> @llvm.vp.xor.nxv4i1(<vscale x 4 x i1> %b, <vscale x 4 x i1> %c, <vscale x 4 x i1> %a, i32 %evl)
386  ret <vscale x 4 x i1> %v
387}
388
389declare <vscale x 8 x i1> @llvm.vp.xor.nxv8i1(<vscale x 8 x i1>, <vscale x 8 x i1>, <vscale x 8 x i1>, i32)
390
391define <vscale x 8 x i1> @xor_nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 zeroext %evl) {
392; CHECK-LABEL: xor_nxv8i1:
393; CHECK:       # %bb.0:
394; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
395; CHECK-NEXT:    vmxor.mm v0, v0, v8
396; CHECK-NEXT:    ret
397  %v = call <vscale x 8 x i1> @llvm.vp.xor.nxv8i1(<vscale x 8 x i1> %b, <vscale x 8 x i1> %c, <vscale x 8 x i1> %a, i32 %evl)
398  ret <vscale x 8 x i1> %v
399}
400
401declare <vscale x 16 x i1> @llvm.vp.xor.nxv16i1(<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, i32)
402
403define <vscale x 16 x i1> @xor_nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 zeroext %evl) {
404; CHECK-LABEL: xor_nxv16i1:
405; CHECK:       # %bb.0:
406; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
407; CHECK-NEXT:    vmxor.mm v0, v0, v8
408; CHECK-NEXT:    ret
409  %v = call <vscale x 16 x i1> @llvm.vp.xor.nxv16i1(<vscale x 16 x i1> %b, <vscale x 16 x i1> %c, <vscale x 16 x i1> %a, i32 %evl)
410  ret <vscale x 16 x i1> %v
411}
412
413declare <vscale x 32 x i1> @llvm.vp.xor.nxv32i1(<vscale x 32 x i1>, <vscale x 32 x i1>, <vscale x 32 x i1>, i32)
414
415define <vscale x 32 x i1> @xor_nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 zeroext %evl) {
416; CHECK-LABEL: xor_nxv32i1:
417; CHECK:       # %bb.0:
418; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
419; CHECK-NEXT:    vmxor.mm v0, v0, v8
420; CHECK-NEXT:    ret
421  %v = call <vscale x 32 x i1> @llvm.vp.xor.nxv32i1(<vscale x 32 x i1> %b, <vscale x 32 x i1> %c, <vscale x 32 x i1> %a, i32 %evl)
422  ret <vscale x 32 x i1> %v
423}
424
425declare <vscale x 64 x i1> @llvm.vp.xor.nxv64i1(<vscale x 64 x i1>, <vscale x 64 x i1>, <vscale x 64 x i1>, i32)
426
427define <vscale x 64 x i1> @xor_nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 zeroext %evl) {
428; CHECK-LABEL: xor_nxv64i1:
429; CHECK:       # %bb.0:
430; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
431; CHECK-NEXT:    vmxor.mm v0, v0, v8
432; CHECK-NEXT:    ret
433  %v = call <vscale x 64 x i1> @llvm.vp.xor.nxv64i1(<vscale x 64 x i1> %b, <vscale x 64 x i1> %c, <vscale x 64 x i1> %a, i32 %evl)
434  ret <vscale x 64 x i1> %v
435}
436