[VPlan] Allow setting IR name for VPDerivedIVRecipe (NFCI).
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vxor-sdnode.ll
blob510f4f62b18863ccdecdad44cd6a37e2c0800498
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 --check-prefixes=CHECK,RV32
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
5 define <vscale x 1 x i8> @vxor_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb) {
6 ; CHECK-LABEL: vxor_vv_nxv1i8:
7 ; CHECK:       # %bb.0:
8 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
9 ; CHECK-NEXT:    vxor.vv v8, v8, v9
10 ; CHECK-NEXT:    ret
11   %vc = xor <vscale x 1 x i8> %va, %vb
12   ret <vscale x 1 x i8> %vc
15 define <vscale x 1 x i8> @vxor_vx_nxv1i8(<vscale x 1 x i8> %va, i8 signext %b) {
16 ; CHECK-LABEL: vxor_vx_nxv1i8:
17 ; CHECK:       # %bb.0:
18 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
19 ; CHECK-NEXT:    vxor.vx v8, v8, a0
20 ; CHECK-NEXT:    ret
21   %head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
22   %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
23   %vc = xor <vscale x 1 x i8> %va, %splat
24   ret <vscale x 1 x i8> %vc
27 define <vscale x 1 x i8> @vxor_vi_nxv1i8_0(<vscale x 1 x i8> %va) {
28 ; CHECK-LABEL: vxor_vi_nxv1i8_0:
29 ; CHECK:       # %bb.0:
30 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
31 ; CHECK-NEXT:    vnot.v v8, v8
32 ; CHECK-NEXT:    ret
33   %vc = xor <vscale x 1 x i8> %va, splat (i8 -1)
34   ret <vscale x 1 x i8> %vc
37 define <vscale x 1 x i8> @vxor_vi_nxv1i8_1(<vscale x 1 x i8> %va) {
38 ; CHECK-LABEL: vxor_vi_nxv1i8_1:
39 ; CHECK:       # %bb.0:
40 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
41 ; CHECK-NEXT:    vxor.vi v8, v8, 8
42 ; CHECK-NEXT:    ret
43   %vc = xor <vscale x 1 x i8> %va, splat (i8 8)
44   ret <vscale x 1 x i8> %vc
47 define <vscale x 1 x i8> @vxor_vi_nxv1i8_2(<vscale x 1 x i8> %va) {
48 ; CHECK-LABEL: vxor_vi_nxv1i8_2:
49 ; CHECK:       # %bb.0:
50 ; CHECK-NEXT:    li a0, 16
51 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
52 ; CHECK-NEXT:    vxor.vx v8, v8, a0
53 ; CHECK-NEXT:    ret
54   %vc = xor <vscale x 1 x i8> %va, splat (i8 16)
55   ret <vscale x 1 x i8> %vc
58 define <vscale x 2 x i8> @vxor_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb) {
59 ; CHECK-LABEL: vxor_vv_nxv2i8:
60 ; CHECK:       # %bb.0:
61 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
62 ; CHECK-NEXT:    vxor.vv v8, v8, v9
63 ; CHECK-NEXT:    ret
64   %vc = xor <vscale x 2 x i8> %va, %vb
65   ret <vscale x 2 x i8> %vc
68 define <vscale x 2 x i8> @vxor_vx_nxv2i8(<vscale x 2 x i8> %va, i8 signext %b) {
69 ; CHECK-LABEL: vxor_vx_nxv2i8:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
72 ; CHECK-NEXT:    vxor.vx v8, v8, a0
73 ; CHECK-NEXT:    ret
74   %head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
75   %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
76   %vc = xor <vscale x 2 x i8> %va, %splat
77   ret <vscale x 2 x i8> %vc
80 define <vscale x 2 x i8> @vxor_vi_nxv2i8_0(<vscale x 2 x i8> %va) {
81 ; CHECK-LABEL: vxor_vi_nxv2i8_0:
82 ; CHECK:       # %bb.0:
83 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
84 ; CHECK-NEXT:    vnot.v v8, v8
85 ; CHECK-NEXT:    ret
86   %vc = xor <vscale x 2 x i8> %va, splat (i8 -1)
87   ret <vscale x 2 x i8> %vc
90 define <vscale x 2 x i8> @vxor_vi_nxv2i8_1(<vscale x 2 x i8> %va) {
91 ; CHECK-LABEL: vxor_vi_nxv2i8_1:
92 ; CHECK:       # %bb.0:
93 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
94 ; CHECK-NEXT:    vxor.vi v8, v8, 8
95 ; CHECK-NEXT:    ret
96   %vc = xor <vscale x 2 x i8> %va, splat (i8 8)
97   ret <vscale x 2 x i8> %vc
100 define <vscale x 2 x i8> @vxor_vi_nxv2i8_2(<vscale x 2 x i8> %va) {
101 ; CHECK-LABEL: vxor_vi_nxv2i8_2:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    li a0, 16
104 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
105 ; CHECK-NEXT:    vxor.vx v8, v8, a0
106 ; CHECK-NEXT:    ret
107   %vc = xor <vscale x 2 x i8> %va, splat (i8 16)
108   ret <vscale x 2 x i8> %vc
111 define <vscale x 4 x i8> @vxor_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb) {
112 ; CHECK-LABEL: vxor_vv_nxv4i8:
113 ; CHECK:       # %bb.0:
114 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
115 ; CHECK-NEXT:    vxor.vv v8, v8, v9
116 ; CHECK-NEXT:    ret
117   %vc = xor <vscale x 4 x i8> %va, %vb
118   ret <vscale x 4 x i8> %vc
121 define <vscale x 4 x i8> @vxor_vx_nxv4i8(<vscale x 4 x i8> %va, i8 signext %b) {
122 ; CHECK-LABEL: vxor_vx_nxv4i8:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
125 ; CHECK-NEXT:    vxor.vx v8, v8, a0
126 ; CHECK-NEXT:    ret
127   %head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
128   %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
129   %vc = xor <vscale x 4 x i8> %va, %splat
130   ret <vscale x 4 x i8> %vc
133 define <vscale x 4 x i8> @vxor_vi_nxv4i8_0(<vscale x 4 x i8> %va) {
134 ; CHECK-LABEL: vxor_vi_nxv4i8_0:
135 ; CHECK:       # %bb.0:
136 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
137 ; CHECK-NEXT:    vnot.v v8, v8
138 ; CHECK-NEXT:    ret
139   %vc = xor <vscale x 4 x i8> %va, splat (i8 -1)
140   ret <vscale x 4 x i8> %vc
143 define <vscale x 4 x i8> @vxor_vi_nxv4i8_1(<vscale x 4 x i8> %va) {
144 ; CHECK-LABEL: vxor_vi_nxv4i8_1:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
147 ; CHECK-NEXT:    vxor.vi v8, v8, 8
148 ; CHECK-NEXT:    ret
149   %vc = xor <vscale x 4 x i8> %va, splat (i8 8)
150   ret <vscale x 4 x i8> %vc
153 define <vscale x 4 x i8> @vxor_vi_nxv4i8_2(<vscale x 4 x i8> %va) {
154 ; CHECK-LABEL: vxor_vi_nxv4i8_2:
155 ; CHECK:       # %bb.0:
156 ; CHECK-NEXT:    li a0, 16
157 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
158 ; CHECK-NEXT:    vxor.vx v8, v8, a0
159 ; CHECK-NEXT:    ret
160   %vc = xor <vscale x 4 x i8> %va, splat (i8 16)
161   ret <vscale x 4 x i8> %vc
164 define <vscale x 8 x i8> @vxor_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) {
165 ; CHECK-LABEL: vxor_vv_nxv8i8:
166 ; CHECK:       # %bb.0:
167 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
168 ; CHECK-NEXT:    vxor.vv v8, v8, v9
169 ; CHECK-NEXT:    ret
170   %vc = xor <vscale x 8 x i8> %va, %vb
171   ret <vscale x 8 x i8> %vc
174 define <vscale x 8 x i8> @vxor_vx_nxv8i8(<vscale x 8 x i8> %va, i8 signext %b) {
175 ; CHECK-LABEL: vxor_vx_nxv8i8:
176 ; CHECK:       # %bb.0:
177 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
178 ; CHECK-NEXT:    vxor.vx v8, v8, a0
179 ; CHECK-NEXT:    ret
180   %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
181   %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
182   %vc = xor <vscale x 8 x i8> %va, %splat
183   ret <vscale x 8 x i8> %vc
186 define <vscale x 8 x i8> @vxor_vi_nxv8i8_0(<vscale x 8 x i8> %va) {
187 ; CHECK-LABEL: vxor_vi_nxv8i8_0:
188 ; CHECK:       # %bb.0:
189 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
190 ; CHECK-NEXT:    vnot.v v8, v8
191 ; CHECK-NEXT:    ret
192   %vc = xor <vscale x 8 x i8> %va, splat (i8 -1)
193   ret <vscale x 8 x i8> %vc
196 define <vscale x 8 x i8> @vxor_vi_nxv8i8_1(<vscale x 8 x i8> %va) {
197 ; CHECK-LABEL: vxor_vi_nxv8i8_1:
198 ; CHECK:       # %bb.0:
199 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
200 ; CHECK-NEXT:    vxor.vi v8, v8, 8
201 ; CHECK-NEXT:    ret
202   %vc = xor <vscale x 8 x i8> %va, splat (i8 8)
203   ret <vscale x 8 x i8> %vc
206 define <vscale x 8 x i8> @vxor_vi_nxv8i8_2(<vscale x 8 x i8> %va) {
207 ; CHECK-LABEL: vxor_vi_nxv8i8_2:
208 ; CHECK:       # %bb.0:
209 ; CHECK-NEXT:    li a0, 16
210 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
211 ; CHECK-NEXT:    vxor.vx v8, v8, a0
212 ; CHECK-NEXT:    ret
213   %vc = xor <vscale x 8 x i8> %va, splat (i8 16)
214   ret <vscale x 8 x i8> %vc
217 define <vscale x 16 x i8> @vxor_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb) {
218 ; CHECK-LABEL: vxor_vv_nxv16i8:
219 ; CHECK:       # %bb.0:
220 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
221 ; CHECK-NEXT:    vxor.vv v8, v8, v10
222 ; CHECK-NEXT:    ret
223   %vc = xor <vscale x 16 x i8> %va, %vb
224   ret <vscale x 16 x i8> %vc
227 define <vscale x 16 x i8> @vxor_vx_nxv16i8(<vscale x 16 x i8> %va, i8 signext %b) {
228 ; CHECK-LABEL: vxor_vx_nxv16i8:
229 ; CHECK:       # %bb.0:
230 ; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
231 ; CHECK-NEXT:    vxor.vx v8, v8, a0
232 ; CHECK-NEXT:    ret
233   %head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
234   %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
235   %vc = xor <vscale x 16 x i8> %va, %splat
236   ret <vscale x 16 x i8> %vc
239 define <vscale x 16 x i8> @vxor_vi_nxv16i8_0(<vscale x 16 x i8> %va) {
240 ; CHECK-LABEL: vxor_vi_nxv16i8_0:
241 ; CHECK:       # %bb.0:
242 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
243 ; CHECK-NEXT:    vnot.v v8, v8
244 ; CHECK-NEXT:    ret
245   %vc = xor <vscale x 16 x i8> %va, splat (i8 -1)
246   ret <vscale x 16 x i8> %vc
249 define <vscale x 16 x i8> @vxor_vi_nxv16i8_1(<vscale x 16 x i8> %va) {
250 ; CHECK-LABEL: vxor_vi_nxv16i8_1:
251 ; CHECK:       # %bb.0:
252 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
253 ; CHECK-NEXT:    vxor.vi v8, v8, 8
254 ; CHECK-NEXT:    ret
255   %vc = xor <vscale x 16 x i8> %va, splat (i8 8)
256   ret <vscale x 16 x i8> %vc
259 define <vscale x 16 x i8> @vxor_vi_nxv16i8_2(<vscale x 16 x i8> %va) {
260 ; CHECK-LABEL: vxor_vi_nxv16i8_2:
261 ; CHECK:       # %bb.0:
262 ; CHECK-NEXT:    li a0, 16
263 ; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
264 ; CHECK-NEXT:    vxor.vx v8, v8, a0
265 ; CHECK-NEXT:    ret
266   %vc = xor <vscale x 16 x i8> %va, splat (i8 16)
267   ret <vscale x 16 x i8> %vc
270 define <vscale x 32 x i8> @vxor_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb) {
271 ; CHECK-LABEL: vxor_vv_nxv32i8:
272 ; CHECK:       # %bb.0:
273 ; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
274 ; CHECK-NEXT:    vxor.vv v8, v8, v12
275 ; CHECK-NEXT:    ret
276   %vc = xor <vscale x 32 x i8> %va, %vb
277   ret <vscale x 32 x i8> %vc
280 define <vscale x 32 x i8> @vxor_vx_nxv32i8(<vscale x 32 x i8> %va, i8 signext %b) {
281 ; CHECK-LABEL: vxor_vx_nxv32i8:
282 ; CHECK:       # %bb.0:
283 ; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
284 ; CHECK-NEXT:    vxor.vx v8, v8, a0
285 ; CHECK-NEXT:    ret
286   %head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
287   %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
288   %vc = xor <vscale x 32 x i8> %va, %splat
289   ret <vscale x 32 x i8> %vc
292 define <vscale x 32 x i8> @vxor_vi_nxv32i8_0(<vscale x 32 x i8> %va) {
293 ; CHECK-LABEL: vxor_vi_nxv32i8_0:
294 ; CHECK:       # %bb.0:
295 ; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
296 ; CHECK-NEXT:    vnot.v v8, v8
297 ; CHECK-NEXT:    ret
298   %vc = xor <vscale x 32 x i8> %va, splat (i8 -1)
299   ret <vscale x 32 x i8> %vc
302 define <vscale x 32 x i8> @vxor_vi_nxv32i8_1(<vscale x 32 x i8> %va) {
303 ; CHECK-LABEL: vxor_vi_nxv32i8_1:
304 ; CHECK:       # %bb.0:
305 ; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
306 ; CHECK-NEXT:    vxor.vi v8, v8, 8
307 ; CHECK-NEXT:    ret
308   %vc = xor <vscale x 32 x i8> %va, splat (i8 8)
309   ret <vscale x 32 x i8> %vc
312 define <vscale x 32 x i8> @vxor_vi_nxv32i8_2(<vscale x 32 x i8> %va) {
313 ; CHECK-LABEL: vxor_vi_nxv32i8_2:
314 ; CHECK:       # %bb.0:
315 ; CHECK-NEXT:    li a0, 16
316 ; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
317 ; CHECK-NEXT:    vxor.vx v8, v8, a0
318 ; CHECK-NEXT:    ret
319   %vc = xor <vscale x 32 x i8> %va, splat (i8 16)
320   ret <vscale x 32 x i8> %vc
323 define <vscale x 64 x i8> @vxor_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb) {
324 ; CHECK-LABEL: vxor_vv_nxv64i8:
325 ; CHECK:       # %bb.0:
326 ; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
327 ; CHECK-NEXT:    vxor.vv v8, v8, v16
328 ; CHECK-NEXT:    ret
329   %vc = xor <vscale x 64 x i8> %va, %vb
330   ret <vscale x 64 x i8> %vc
333 define <vscale x 64 x i8> @vxor_vx_nxv64i8(<vscale x 64 x i8> %va, i8 signext %b) {
334 ; CHECK-LABEL: vxor_vx_nxv64i8:
335 ; CHECK:       # %bb.0:
336 ; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma
337 ; CHECK-NEXT:    vxor.vx v8, v8, a0
338 ; CHECK-NEXT:    ret
339   %head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
340   %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
341   %vc = xor <vscale x 64 x i8> %va, %splat
342   ret <vscale x 64 x i8> %vc
345 define <vscale x 64 x i8> @vxor_vi_nxv64i8_0(<vscale x 64 x i8> %va) {
346 ; CHECK-LABEL: vxor_vi_nxv64i8_0:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
349 ; CHECK-NEXT:    vnot.v v8, v8
350 ; CHECK-NEXT:    ret
351   %vc = xor <vscale x 64 x i8> %va, splat (i8 -1)
352   ret <vscale x 64 x i8> %vc
355 define <vscale x 64 x i8> @vxor_vi_nxv64i8_1(<vscale x 64 x i8> %va) {
356 ; CHECK-LABEL: vxor_vi_nxv64i8_1:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
359 ; CHECK-NEXT:    vxor.vi v8, v8, 8
360 ; CHECK-NEXT:    ret
361   %vc = xor <vscale x 64 x i8> %va, splat (i8 8)
362   ret <vscale x 64 x i8> %vc
365 define <vscale x 64 x i8> @vxor_vi_nxv64i8_2(<vscale x 64 x i8> %va) {
366 ; CHECK-LABEL: vxor_vi_nxv64i8_2:
367 ; CHECK:       # %bb.0:
368 ; CHECK-NEXT:    li a0, 16
369 ; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma
370 ; CHECK-NEXT:    vxor.vx v8, v8, a0
371 ; CHECK-NEXT:    ret
372   %vc = xor <vscale x 64 x i8> %va, splat (i8 16)
373   ret <vscale x 64 x i8> %vc
376 define <vscale x 1 x i16> @vxor_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb) {
377 ; CHECK-LABEL: vxor_vv_nxv1i16:
378 ; CHECK:       # %bb.0:
379 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
380 ; CHECK-NEXT:    vxor.vv v8, v8, v9
381 ; CHECK-NEXT:    ret
382   %vc = xor <vscale x 1 x i16> %va, %vb
383   ret <vscale x 1 x i16> %vc
386 define <vscale x 1 x i16> @vxor_vx_nxv1i16(<vscale x 1 x i16> %va, i16 signext %b) {
387 ; CHECK-LABEL: vxor_vx_nxv1i16:
388 ; CHECK:       # %bb.0:
389 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
390 ; CHECK-NEXT:    vxor.vx v8, v8, a0
391 ; CHECK-NEXT:    ret
392   %head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
393   %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
394   %vc = xor <vscale x 1 x i16> %va, %splat
395   ret <vscale x 1 x i16> %vc
398 define <vscale x 1 x i16> @vxor_vi_nxv1i16_0(<vscale x 1 x i16> %va) {
399 ; CHECK-LABEL: vxor_vi_nxv1i16_0:
400 ; CHECK:       # %bb.0:
401 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
402 ; CHECK-NEXT:    vnot.v v8, v8
403 ; CHECK-NEXT:    ret
404   %vc = xor <vscale x 1 x i16> %va, splat (i16 -1)
405   ret <vscale x 1 x i16> %vc
408 define <vscale x 1 x i16> @vxor_vi_nxv1i16_1(<vscale x 1 x i16> %va) {
409 ; CHECK-LABEL: vxor_vi_nxv1i16_1:
410 ; CHECK:       # %bb.0:
411 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
412 ; CHECK-NEXT:    vxor.vi v8, v8, 8
413 ; CHECK-NEXT:    ret
414   %vc = xor <vscale x 1 x i16> %va, splat (i16 8)
415   ret <vscale x 1 x i16> %vc
418 define <vscale x 1 x i16> @vxor_vi_nxv1i16_2(<vscale x 1 x i16> %va) {
419 ; CHECK-LABEL: vxor_vi_nxv1i16_2:
420 ; CHECK:       # %bb.0:
421 ; CHECK-NEXT:    li a0, 16
422 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
423 ; CHECK-NEXT:    vxor.vx v8, v8, a0
424 ; CHECK-NEXT:    ret
425   %vc = xor <vscale x 1 x i16> %va, splat (i16 16)
426   ret <vscale x 1 x i16> %vc
429 define <vscale x 2 x i16> @vxor_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb) {
430 ; CHECK-LABEL: vxor_vv_nxv2i16:
431 ; CHECK:       # %bb.0:
432 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
433 ; CHECK-NEXT:    vxor.vv v8, v8, v9
434 ; CHECK-NEXT:    ret
435   %vc = xor <vscale x 2 x i16> %va, %vb
436   ret <vscale x 2 x i16> %vc
439 define <vscale x 2 x i16> @vxor_vx_nxv2i16(<vscale x 2 x i16> %va, i16 signext %b) {
440 ; CHECK-LABEL: vxor_vx_nxv2i16:
441 ; CHECK:       # %bb.0:
442 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
443 ; CHECK-NEXT:    vxor.vx v8, v8, a0
444 ; CHECK-NEXT:    ret
445   %head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
446   %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
447   %vc = xor <vscale x 2 x i16> %va, %splat
448   ret <vscale x 2 x i16> %vc
451 define <vscale x 2 x i16> @vxor_vi_nxv2i16_0(<vscale x 2 x i16> %va) {
452 ; CHECK-LABEL: vxor_vi_nxv2i16_0:
453 ; CHECK:       # %bb.0:
454 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
455 ; CHECK-NEXT:    vnot.v v8, v8
456 ; CHECK-NEXT:    ret
457   %vc = xor <vscale x 2 x i16> %va, splat (i16 -1)
458   ret <vscale x 2 x i16> %vc
461 define <vscale x 2 x i16> @vxor_vi_nxv2i16_1(<vscale x 2 x i16> %va) {
462 ; CHECK-LABEL: vxor_vi_nxv2i16_1:
463 ; CHECK:       # %bb.0:
464 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
465 ; CHECK-NEXT:    vxor.vi v8, v8, 8
466 ; CHECK-NEXT:    ret
467   %vc = xor <vscale x 2 x i16> %va, splat (i16 8)
468   ret <vscale x 2 x i16> %vc
471 define <vscale x 2 x i16> @vxor_vi_nxv2i16_2(<vscale x 2 x i16> %va) {
472 ; CHECK-LABEL: vxor_vi_nxv2i16_2:
473 ; CHECK:       # %bb.0:
474 ; CHECK-NEXT:    li a0, 16
475 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
476 ; CHECK-NEXT:    vxor.vx v8, v8, a0
477 ; CHECK-NEXT:    ret
478   %vc = xor <vscale x 2 x i16> %va, splat (i16 16)
479   ret <vscale x 2 x i16> %vc
482 define <vscale x 4 x i16> @vxor_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb) {
483 ; CHECK-LABEL: vxor_vv_nxv4i16:
484 ; CHECK:       # %bb.0:
485 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
486 ; CHECK-NEXT:    vxor.vv v8, v8, v9
487 ; CHECK-NEXT:    ret
488   %vc = xor <vscale x 4 x i16> %va, %vb
489   ret <vscale x 4 x i16> %vc
492 define <vscale x 4 x i16> @vxor_vx_nxv4i16(<vscale x 4 x i16> %va, i16 signext %b) {
493 ; CHECK-LABEL: vxor_vx_nxv4i16:
494 ; CHECK:       # %bb.0:
495 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
496 ; CHECK-NEXT:    vxor.vx v8, v8, a0
497 ; CHECK-NEXT:    ret
498   %head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
499   %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
500   %vc = xor <vscale x 4 x i16> %va, %splat
501   ret <vscale x 4 x i16> %vc
504 define <vscale x 4 x i16> @vxor_vi_nxv4i16_0(<vscale x 4 x i16> %va) {
505 ; CHECK-LABEL: vxor_vi_nxv4i16_0:
506 ; CHECK:       # %bb.0:
507 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
508 ; CHECK-NEXT:    vnot.v v8, v8
509 ; CHECK-NEXT:    ret
510   %vc = xor <vscale x 4 x i16> %va, splat (i16 -1)
511   ret <vscale x 4 x i16> %vc
514 define <vscale x 4 x i16> @vxor_vi_nxv4i16_1(<vscale x 4 x i16> %va) {
515 ; CHECK-LABEL: vxor_vi_nxv4i16_1:
516 ; CHECK:       # %bb.0:
517 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
518 ; CHECK-NEXT:    vxor.vi v8, v8, 8
519 ; CHECK-NEXT:    ret
520   %vc = xor <vscale x 4 x i16> %va, splat (i16 8)
521   ret <vscale x 4 x i16> %vc
524 define <vscale x 4 x i16> @vxor_vi_nxv4i16_2(<vscale x 4 x i16> %va) {
525 ; CHECK-LABEL: vxor_vi_nxv4i16_2:
526 ; CHECK:       # %bb.0:
527 ; CHECK-NEXT:    li a0, 16
528 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
529 ; CHECK-NEXT:    vxor.vx v8, v8, a0
530 ; CHECK-NEXT:    ret
531   %vc = xor <vscale x 4 x i16> %va, splat (i16 16)
532   ret <vscale x 4 x i16> %vc
535 define <vscale x 8 x i16> @vxor_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) {
536 ; CHECK-LABEL: vxor_vv_nxv8i16:
537 ; CHECK:       # %bb.0:
538 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
539 ; CHECK-NEXT:    vxor.vv v8, v8, v10
540 ; CHECK-NEXT:    ret
541   %vc = xor <vscale x 8 x i16> %va, %vb
542   ret <vscale x 8 x i16> %vc
545 define <vscale x 8 x i16> @vxor_vx_nxv8i16(<vscale x 8 x i16> %va, i16 signext %b) {
546 ; CHECK-LABEL: vxor_vx_nxv8i16:
547 ; CHECK:       # %bb.0:
548 ; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
549 ; CHECK-NEXT:    vxor.vx v8, v8, a0
550 ; CHECK-NEXT:    ret
551   %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
552   %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
553   %vc = xor <vscale x 8 x i16> %va, %splat
554   ret <vscale x 8 x i16> %vc
557 define <vscale x 8 x i16> @vxor_vi_nxv8i16_0(<vscale x 8 x i16> %va) {
558 ; CHECK-LABEL: vxor_vi_nxv8i16_0:
559 ; CHECK:       # %bb.0:
560 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
561 ; CHECK-NEXT:    vnot.v v8, v8
562 ; CHECK-NEXT:    ret
563   %vc = xor <vscale x 8 x i16> %va, splat (i16 -1)
564   ret <vscale x 8 x i16> %vc
567 define <vscale x 8 x i16> @vxor_vi_nxv8i16_1(<vscale x 8 x i16> %va) {
568 ; CHECK-LABEL: vxor_vi_nxv8i16_1:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
571 ; CHECK-NEXT:    vxor.vi v8, v8, 8
572 ; CHECK-NEXT:    ret
573   %vc = xor <vscale x 8 x i16> %va, splat (i16 8)
574   ret <vscale x 8 x i16> %vc
577 define <vscale x 8 x i16> @vxor_vi_nxv8i16_2(<vscale x 8 x i16> %va) {
578 ; CHECK-LABEL: vxor_vi_nxv8i16_2:
579 ; CHECK:       # %bb.0:
580 ; CHECK-NEXT:    li a0, 16
581 ; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
582 ; CHECK-NEXT:    vxor.vx v8, v8, a0
583 ; CHECK-NEXT:    ret
584   %vc = xor <vscale x 8 x i16> %va, splat (i16 16)
585   ret <vscale x 8 x i16> %vc
588 define <vscale x 16 x i16> @vxor_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb) {
589 ; CHECK-LABEL: vxor_vv_nxv16i16:
590 ; CHECK:       # %bb.0:
591 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
592 ; CHECK-NEXT:    vxor.vv v8, v8, v12
593 ; CHECK-NEXT:    ret
594   %vc = xor <vscale x 16 x i16> %va, %vb
595   ret <vscale x 16 x i16> %vc
598 define <vscale x 16 x i16> @vxor_vx_nxv16i16(<vscale x 16 x i16> %va, i16 signext %b) {
599 ; CHECK-LABEL: vxor_vx_nxv16i16:
600 ; CHECK:       # %bb.0:
601 ; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
602 ; CHECK-NEXT:    vxor.vx v8, v8, a0
603 ; CHECK-NEXT:    ret
604   %head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
605   %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
606   %vc = xor <vscale x 16 x i16> %va, %splat
607   ret <vscale x 16 x i16> %vc
610 define <vscale x 16 x i16> @vxor_vi_nxv16i16_0(<vscale x 16 x i16> %va) {
611 ; CHECK-LABEL: vxor_vi_nxv16i16_0:
612 ; CHECK:       # %bb.0:
613 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
614 ; CHECK-NEXT:    vnot.v v8, v8
615 ; CHECK-NEXT:    ret
616   %vc = xor <vscale x 16 x i16> %va, splat (i16 -1)
617   ret <vscale x 16 x i16> %vc
620 define <vscale x 16 x i16> @vxor_vi_nxv16i16_1(<vscale x 16 x i16> %va) {
621 ; CHECK-LABEL: vxor_vi_nxv16i16_1:
622 ; CHECK:       # %bb.0:
623 ; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
624 ; CHECK-NEXT:    vxor.vi v8, v8, 8
625 ; CHECK-NEXT:    ret
626   %vc = xor <vscale x 16 x i16> %va, splat (i16 8)
627   ret <vscale x 16 x i16> %vc
630 define <vscale x 16 x i16> @vxor_vi_nxv16i16_2(<vscale x 16 x i16> %va) {
631 ; CHECK-LABEL: vxor_vi_nxv16i16_2:
632 ; CHECK:       # %bb.0:
633 ; CHECK-NEXT:    li a0, 16
634 ; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
635 ; CHECK-NEXT:    vxor.vx v8, v8, a0
636 ; CHECK-NEXT:    ret
637   %vc = xor <vscale x 16 x i16> %va, splat (i16 16)
638   ret <vscale x 16 x i16> %vc
641 define <vscale x 32 x i16> @vxor_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb) {
642 ; CHECK-LABEL: vxor_vv_nxv32i16:
643 ; CHECK:       # %bb.0:
644 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
645 ; CHECK-NEXT:    vxor.vv v8, v8, v16
646 ; CHECK-NEXT:    ret
647   %vc = xor <vscale x 32 x i16> %va, %vb
648   ret <vscale x 32 x i16> %vc
651 define <vscale x 32 x i16> @vxor_vx_nxv32i16(<vscale x 32 x i16> %va, i16 signext %b) {
652 ; CHECK-LABEL: vxor_vx_nxv32i16:
653 ; CHECK:       # %bb.0:
654 ; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
655 ; CHECK-NEXT:    vxor.vx v8, v8, a0
656 ; CHECK-NEXT:    ret
657   %head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
658   %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
659   %vc = xor <vscale x 32 x i16> %va, %splat
660   ret <vscale x 32 x i16> %vc
663 define <vscale x 32 x i16> @vxor_vi_nxv32i16_0(<vscale x 32 x i16> %va) {
664 ; CHECK-LABEL: vxor_vi_nxv32i16_0:
665 ; CHECK:       # %bb.0:
666 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
667 ; CHECK-NEXT:    vnot.v v8, v8
668 ; CHECK-NEXT:    ret
669   %vc = xor <vscale x 32 x i16> %va, splat (i16 -1)
670   ret <vscale x 32 x i16> %vc
673 define <vscale x 32 x i16> @vxor_vi_nxv32i16_1(<vscale x 32 x i16> %va) {
674 ; CHECK-LABEL: vxor_vi_nxv32i16_1:
675 ; CHECK:       # %bb.0:
676 ; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
677 ; CHECK-NEXT:    vxor.vi v8, v8, 8
678 ; CHECK-NEXT:    ret
679   %vc = xor <vscale x 32 x i16> %va, splat (i16 8)
680   ret <vscale x 32 x i16> %vc
683 define <vscale x 32 x i16> @vxor_vi_nxv32i16_2(<vscale x 32 x i16> %va) {
684 ; CHECK-LABEL: vxor_vi_nxv32i16_2:
685 ; CHECK:       # %bb.0:
686 ; CHECK-NEXT:    li a0, 16
687 ; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
688 ; CHECK-NEXT:    vxor.vx v8, v8, a0
689 ; CHECK-NEXT:    ret
690   %vc = xor <vscale x 32 x i16> %va, splat (i16 16)
691   ret <vscale x 32 x i16> %vc
694 define <vscale x 1 x i32> @vxor_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb) {
695 ; CHECK-LABEL: vxor_vv_nxv1i32:
696 ; CHECK:       # %bb.0:
697 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
698 ; CHECK-NEXT:    vxor.vv v8, v8, v9
699 ; CHECK-NEXT:    ret
700   %vc = xor <vscale x 1 x i32> %va, %vb
701   ret <vscale x 1 x i32> %vc
704 define <vscale x 1 x i32> @vxor_vx_nxv1i32(<vscale x 1 x i32> %va, i32 signext %b) {
705 ; CHECK-LABEL: vxor_vx_nxv1i32:
706 ; CHECK:       # %bb.0:
707 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
708 ; CHECK-NEXT:    vxor.vx v8, v8, a0
709 ; CHECK-NEXT:    ret
710   %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
711   %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
712   %vc = xor <vscale x 1 x i32> %va, %splat
713   ret <vscale x 1 x i32> %vc
716 define <vscale x 1 x i32> @vxor_vi_nxv1i32_0(<vscale x 1 x i32> %va) {
717 ; CHECK-LABEL: vxor_vi_nxv1i32_0:
718 ; CHECK:       # %bb.0:
719 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
720 ; CHECK-NEXT:    vnot.v v8, v8
721 ; CHECK-NEXT:    ret
722   %vc = xor <vscale x 1 x i32> %va, splat (i32 -1)
723   ret <vscale x 1 x i32> %vc
726 define <vscale x 1 x i32> @vxor_vi_nxv1i32_1(<vscale x 1 x i32> %va) {
727 ; CHECK-LABEL: vxor_vi_nxv1i32_1:
728 ; CHECK:       # %bb.0:
729 ; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
730 ; CHECK-NEXT:    vxor.vi v8, v8, 8
731 ; CHECK-NEXT:    ret
732   %vc = xor <vscale x 1 x i32> %va, splat (i32 8)
733   ret <vscale x 1 x i32> %vc
736 define <vscale x 1 x i32> @vxor_vi_nxv1i32_2(<vscale x 1 x i32> %va) {
737 ; CHECK-LABEL: vxor_vi_nxv1i32_2:
738 ; CHECK:       # %bb.0:
739 ; CHECK-NEXT:    li a0, 16
740 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
741 ; CHECK-NEXT:    vxor.vx v8, v8, a0
742 ; CHECK-NEXT:    ret
743   %vc = xor <vscale x 1 x i32> %va, splat (i32 16)
744   ret <vscale x 1 x i32> %vc
747 define <vscale x 2 x i32> @vxor_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb) {
748 ; CHECK-LABEL: vxor_vv_nxv2i32:
749 ; CHECK:       # %bb.0:
750 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
751 ; CHECK-NEXT:    vxor.vv v8, v8, v9
752 ; CHECK-NEXT:    ret
753   %vc = xor <vscale x 2 x i32> %va, %vb
754   ret <vscale x 2 x i32> %vc
757 define <vscale x 2 x i32> @vxor_vx_nxv2i32(<vscale x 2 x i32> %va, i32 signext %b) {
758 ; CHECK-LABEL: vxor_vx_nxv2i32:
759 ; CHECK:       # %bb.0:
760 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
761 ; CHECK-NEXT:    vxor.vx v8, v8, a0
762 ; CHECK-NEXT:    ret
763   %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
764   %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
765   %vc = xor <vscale x 2 x i32> %va, %splat
766   ret <vscale x 2 x i32> %vc
769 define <vscale x 2 x i32> @vxor_vi_nxv2i32_0(<vscale x 2 x i32> %va) {
770 ; CHECK-LABEL: vxor_vi_nxv2i32_0:
771 ; CHECK:       # %bb.0:
772 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
773 ; CHECK-NEXT:    vnot.v v8, v8
774 ; CHECK-NEXT:    ret
775   %vc = xor <vscale x 2 x i32> %va, splat (i32 -1)
776   ret <vscale x 2 x i32> %vc
779 define <vscale x 2 x i32> @vxor_vi_nxv2i32_1(<vscale x 2 x i32> %va) {
780 ; CHECK-LABEL: vxor_vi_nxv2i32_1:
781 ; CHECK:       # %bb.0:
782 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
783 ; CHECK-NEXT:    vxor.vi v8, v8, 8
784 ; CHECK-NEXT:    ret
785   %vc = xor <vscale x 2 x i32> %va, splat (i32 8)
786   ret <vscale x 2 x i32> %vc
789 define <vscale x 2 x i32> @vxor_vi_nxv2i32_2(<vscale x 2 x i32> %va) {
790 ; CHECK-LABEL: vxor_vi_nxv2i32_2:
791 ; CHECK:       # %bb.0:
792 ; CHECK-NEXT:    li a0, 16
793 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
794 ; CHECK-NEXT:    vxor.vx v8, v8, a0
795 ; CHECK-NEXT:    ret
796   %vc = xor <vscale x 2 x i32> %va, splat (i32 16)
797   ret <vscale x 2 x i32> %vc
800 define <vscale x 4 x i32> @vxor_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb) {
801 ; CHECK-LABEL: vxor_vv_nxv4i32:
802 ; CHECK:       # %bb.0:
803 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
804 ; CHECK-NEXT:    vxor.vv v8, v8, v10
805 ; CHECK-NEXT:    ret
806   %vc = xor <vscale x 4 x i32> %va, %vb
807   ret <vscale x 4 x i32> %vc
810 define <vscale x 4 x i32> @vxor_vx_nxv4i32(<vscale x 4 x i32> %va, i32 signext %b) {
811 ; CHECK-LABEL: vxor_vx_nxv4i32:
812 ; CHECK:       # %bb.0:
813 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
814 ; CHECK-NEXT:    vxor.vx v8, v8, a0
815 ; CHECK-NEXT:    ret
816   %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
817   %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
818   %vc = xor <vscale x 4 x i32> %va, %splat
819   ret <vscale x 4 x i32> %vc
822 define <vscale x 4 x i32> @vxor_vi_nxv4i32_0(<vscale x 4 x i32> %va) {
823 ; CHECK-LABEL: vxor_vi_nxv4i32_0:
824 ; CHECK:       # %bb.0:
825 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
826 ; CHECK-NEXT:    vnot.v v8, v8
827 ; CHECK-NEXT:    ret
828   %vc = xor <vscale x 4 x i32> %va, splat (i32 -1)
829   ret <vscale x 4 x i32> %vc
832 define <vscale x 4 x i32> @vxor_vi_nxv4i32_1(<vscale x 4 x i32> %va) {
833 ; CHECK-LABEL: vxor_vi_nxv4i32_1:
834 ; CHECK:       # %bb.0:
835 ; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
836 ; CHECK-NEXT:    vxor.vi v8, v8, 8
837 ; CHECK-NEXT:    ret
838   %vc = xor <vscale x 4 x i32> %va, splat (i32 8)
839   ret <vscale x 4 x i32> %vc
842 define <vscale x 4 x i32> @vxor_vi_nxv4i32_2(<vscale x 4 x i32> %va) {
843 ; CHECK-LABEL: vxor_vi_nxv4i32_2:
844 ; CHECK:       # %bb.0:
845 ; CHECK-NEXT:    li a0, 16
846 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
847 ; CHECK-NEXT:    vxor.vx v8, v8, a0
848 ; CHECK-NEXT:    ret
849   %vc = xor <vscale x 4 x i32> %va, splat (i32 16)
850   ret <vscale x 4 x i32> %vc
853 define <vscale x 8 x i32> @vxor_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) {
854 ; CHECK-LABEL: vxor_vv_nxv8i32:
855 ; CHECK:       # %bb.0:
856 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
857 ; CHECK-NEXT:    vxor.vv v8, v8, v12
858 ; CHECK-NEXT:    ret
859   %vc = xor <vscale x 8 x i32> %va, %vb
860   ret <vscale x 8 x i32> %vc
863 define <vscale x 8 x i32> @vxor_vx_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b) {
864 ; CHECK-LABEL: vxor_vx_nxv8i32:
865 ; CHECK:       # %bb.0:
866 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
867 ; CHECK-NEXT:    vxor.vx v8, v8, a0
868 ; CHECK-NEXT:    ret
869   %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
870   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
871   %vc = xor <vscale x 8 x i32> %va, %splat
872   ret <vscale x 8 x i32> %vc
875 define <vscale x 8 x i32> @vxor_vi_nxv8i32_0(<vscale x 8 x i32> %va) {
876 ; CHECK-LABEL: vxor_vi_nxv8i32_0:
877 ; CHECK:       # %bb.0:
878 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
879 ; CHECK-NEXT:    vnot.v v8, v8
880 ; CHECK-NEXT:    ret
881   %vc = xor <vscale x 8 x i32> %va, splat (i32 -1)
882   ret <vscale x 8 x i32> %vc
885 define <vscale x 8 x i32> @vxor_vi_nxv8i32_1(<vscale x 8 x i32> %va) {
886 ; CHECK-LABEL: vxor_vi_nxv8i32_1:
887 ; CHECK:       # %bb.0:
888 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
889 ; CHECK-NEXT:    vxor.vi v8, v8, 8
890 ; CHECK-NEXT:    ret
891   %vc = xor <vscale x 8 x i32> %va, splat (i32 8)
892   ret <vscale x 8 x i32> %vc
895 define <vscale x 8 x i32> @vxor_vi_nxv8i32_2(<vscale x 8 x i32> %va) {
896 ; CHECK-LABEL: vxor_vi_nxv8i32_2:
897 ; CHECK:       # %bb.0:
898 ; CHECK-NEXT:    li a0, 16
899 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
900 ; CHECK-NEXT:    vxor.vx v8, v8, a0
901 ; CHECK-NEXT:    ret
902   %vc = xor <vscale x 8 x i32> %va, splat (i32 16)
903   ret <vscale x 8 x i32> %vc
906 define <vscale x 16 x i32> @vxor_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb) {
907 ; CHECK-LABEL: vxor_vv_nxv16i32:
908 ; CHECK:       # %bb.0:
909 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
910 ; CHECK-NEXT:    vxor.vv v8, v8, v16
911 ; CHECK-NEXT:    ret
912   %vc = xor <vscale x 16 x i32> %va, %vb
913   ret <vscale x 16 x i32> %vc
916 define <vscale x 16 x i32> @vxor_vx_nxv16i32(<vscale x 16 x i32> %va, i32 signext %b) {
917 ; CHECK-LABEL: vxor_vx_nxv16i32:
918 ; CHECK:       # %bb.0:
919 ; CHECK-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
920 ; CHECK-NEXT:    vxor.vx v8, v8, a0
921 ; CHECK-NEXT:    ret
922   %head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
923   %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
924   %vc = xor <vscale x 16 x i32> %va, %splat
925   ret <vscale x 16 x i32> %vc
928 define <vscale x 16 x i32> @vxor_vi_nxv16i32_0(<vscale x 16 x i32> %va) {
929 ; CHECK-LABEL: vxor_vi_nxv16i32_0:
930 ; CHECK:       # %bb.0:
931 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
932 ; CHECK-NEXT:    vnot.v v8, v8
933 ; CHECK-NEXT:    ret
934   %vc = xor <vscale x 16 x i32> %va, splat (i32 -1)
935   ret <vscale x 16 x i32> %vc
938 define <vscale x 16 x i32> @vxor_vi_nxv16i32_1(<vscale x 16 x i32> %va) {
939 ; CHECK-LABEL: vxor_vi_nxv16i32_1:
940 ; CHECK:       # %bb.0:
941 ; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
942 ; CHECK-NEXT:    vxor.vi v8, v8, 8
943 ; CHECK-NEXT:    ret
944   %vc = xor <vscale x 16 x i32> %va, splat (i32 8)
945   ret <vscale x 16 x i32> %vc
948 define <vscale x 16 x i32> @vxor_vi_nxv16i32_2(<vscale x 16 x i32> %va) {
949 ; CHECK-LABEL: vxor_vi_nxv16i32_2:
950 ; CHECK:       # %bb.0:
951 ; CHECK-NEXT:    li a0, 16
952 ; CHECK-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
953 ; CHECK-NEXT:    vxor.vx v8, v8, a0
954 ; CHECK-NEXT:    ret
955   %vc = xor <vscale x 16 x i32> %va, splat (i32 16)
956   ret <vscale x 16 x i32> %vc
959 define <vscale x 1 x i64> @vxor_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb) {
960 ; CHECK-LABEL: vxor_vv_nxv1i64:
961 ; CHECK:       # %bb.0:
962 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
963 ; CHECK-NEXT:    vxor.vv v8, v8, v9
964 ; CHECK-NEXT:    ret
965   %vc = xor <vscale x 1 x i64> %va, %vb
966   ret <vscale x 1 x i64> %vc
969 define <vscale x 1 x i64> @vxor_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b) {
970 ; RV32-LABEL: vxor_vx_nxv1i64:
971 ; RV32:       # %bb.0:
972 ; RV32-NEXT:    addi sp, sp, -16
973 ; RV32-NEXT:    .cfi_def_cfa_offset 16
974 ; RV32-NEXT:    sw a0, 8(sp)
975 ; RV32-NEXT:    sw a1, 12(sp)
976 ; RV32-NEXT:    addi a0, sp, 8
977 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
978 ; RV32-NEXT:    vlse64.v v9, (a0), zero
979 ; RV32-NEXT:    vxor.vv v8, v8, v9
980 ; RV32-NEXT:    addi sp, sp, 16
981 ; RV32-NEXT:    .cfi_def_cfa_offset 0
982 ; RV32-NEXT:    ret
984 ; RV64-LABEL: vxor_vx_nxv1i64:
985 ; RV64:       # %bb.0:
986 ; RV64-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
987 ; RV64-NEXT:    vxor.vx v8, v8, a0
988 ; RV64-NEXT:    ret
989   %head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
990   %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
991   %vc = xor <vscale x 1 x i64> %va, %splat
992   ret <vscale x 1 x i64> %vc
995 define <vscale x 1 x i64> @vxor_vi_nxv1i64_0(<vscale x 1 x i64> %va) {
996 ; CHECK-LABEL: vxor_vi_nxv1i64_0:
997 ; CHECK:       # %bb.0:
998 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
999 ; CHECK-NEXT:    vnot.v v8, v8
1000 ; CHECK-NEXT:    ret
1001   %vc = xor <vscale x 1 x i64> %va, splat (i64 -1)
1002   ret <vscale x 1 x i64> %vc
1005 define <vscale x 1 x i64> @vxor_vi_nxv1i64_1(<vscale x 1 x i64> %va) {
1006 ; CHECK-LABEL: vxor_vi_nxv1i64_1:
1007 ; CHECK:       # %bb.0:
1008 ; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
1009 ; CHECK-NEXT:    vxor.vi v8, v8, 8
1010 ; CHECK-NEXT:    ret
1011   %vc = xor <vscale x 1 x i64> %va, splat (i64 8)
1012   ret <vscale x 1 x i64> %vc
1015 define <vscale x 1 x i64> @vxor_vi_nxv1i64_2(<vscale x 1 x i64> %va) {
1016 ; CHECK-LABEL: vxor_vi_nxv1i64_2:
1017 ; CHECK:       # %bb.0:
1018 ; CHECK-NEXT:    li a0, 16
1019 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
1020 ; CHECK-NEXT:    vxor.vx v8, v8, a0
1021 ; CHECK-NEXT:    ret
1022   %vc = xor <vscale x 1 x i64> %va, splat (i64 16)
1023   ret <vscale x 1 x i64> %vc
1026 define <vscale x 2 x i64> @vxor_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb) {
1027 ; CHECK-LABEL: vxor_vv_nxv2i64:
1028 ; CHECK:       # %bb.0:
1029 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
1030 ; CHECK-NEXT:    vxor.vv v8, v8, v10
1031 ; CHECK-NEXT:    ret
1032   %vc = xor <vscale x 2 x i64> %va, %vb
1033   ret <vscale x 2 x i64> %vc
1036 define <vscale x 2 x i64> @vxor_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b) {
1037 ; RV32-LABEL: vxor_vx_nxv2i64:
1038 ; RV32:       # %bb.0:
1039 ; RV32-NEXT:    addi sp, sp, -16
1040 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1041 ; RV32-NEXT:    sw a0, 8(sp)
1042 ; RV32-NEXT:    sw a1, 12(sp)
1043 ; RV32-NEXT:    addi a0, sp, 8
1044 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1045 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1046 ; RV32-NEXT:    vxor.vv v8, v8, v10
1047 ; RV32-NEXT:    addi sp, sp, 16
1048 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1049 ; RV32-NEXT:    ret
1051 ; RV64-LABEL: vxor_vx_nxv2i64:
1052 ; RV64:       # %bb.0:
1053 ; RV64-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1054 ; RV64-NEXT:    vxor.vx v8, v8, a0
1055 ; RV64-NEXT:    ret
1056   %head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1057   %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1058   %vc = xor <vscale x 2 x i64> %va, %splat
1059   ret <vscale x 2 x i64> %vc
1062 define <vscale x 2 x i64> @vxor_vi_nxv2i64_0(<vscale x 2 x i64> %va) {
1063 ; CHECK-LABEL: vxor_vi_nxv2i64_0:
1064 ; CHECK:       # %bb.0:
1065 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
1066 ; CHECK-NEXT:    vnot.v v8, v8
1067 ; CHECK-NEXT:    ret
1068   %vc = xor <vscale x 2 x i64> %va, splat (i64 -1)
1069   ret <vscale x 2 x i64> %vc
1072 define <vscale x 2 x i64> @vxor_vi_nxv2i64_1(<vscale x 2 x i64> %va) {
1073 ; CHECK-LABEL: vxor_vi_nxv2i64_1:
1074 ; CHECK:       # %bb.0:
1075 ; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
1076 ; CHECK-NEXT:    vxor.vi v8, v8, 8
1077 ; CHECK-NEXT:    ret
1078   %vc = xor <vscale x 2 x i64> %va, splat (i64 8)
1079   ret <vscale x 2 x i64> %vc
1082 define <vscale x 2 x i64> @vxor_vi_nxv2i64_2(<vscale x 2 x i64> %va) {
1083 ; CHECK-LABEL: vxor_vi_nxv2i64_2:
1084 ; CHECK:       # %bb.0:
1085 ; CHECK-NEXT:    li a0, 16
1086 ; CHECK-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1087 ; CHECK-NEXT:    vxor.vx v8, v8, a0
1088 ; CHECK-NEXT:    ret
1089   %vc = xor <vscale x 2 x i64> %va, splat (i64 16)
1090   ret <vscale x 2 x i64> %vc
1093 define <vscale x 4 x i64> @vxor_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb) {
1094 ; CHECK-LABEL: vxor_vv_nxv4i64:
1095 ; CHECK:       # %bb.0:
1096 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
1097 ; CHECK-NEXT:    vxor.vv v8, v8, v12
1098 ; CHECK-NEXT:    ret
1099   %vc = xor <vscale x 4 x i64> %va, %vb
1100   ret <vscale x 4 x i64> %vc
1103 define <vscale x 4 x i64> @vxor_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b) {
1104 ; RV32-LABEL: vxor_vx_nxv4i64:
1105 ; RV32:       # %bb.0:
1106 ; RV32-NEXT:    addi sp, sp, -16
1107 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1108 ; RV32-NEXT:    sw a0, 8(sp)
1109 ; RV32-NEXT:    sw a1, 12(sp)
1110 ; RV32-NEXT:    addi a0, sp, 8
1111 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1112 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1113 ; RV32-NEXT:    vxor.vv v8, v8, v12
1114 ; RV32-NEXT:    addi sp, sp, 16
1115 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1116 ; RV32-NEXT:    ret
1118 ; RV64-LABEL: vxor_vx_nxv4i64:
1119 ; RV64:       # %bb.0:
1120 ; RV64-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1121 ; RV64-NEXT:    vxor.vx v8, v8, a0
1122 ; RV64-NEXT:    ret
1123   %head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1124   %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1125   %vc = xor <vscale x 4 x i64> %va, %splat
1126   ret <vscale x 4 x i64> %vc
1129 define <vscale x 4 x i64> @vxor_vi_nxv4i64_0(<vscale x 4 x i64> %va) {
1130 ; CHECK-LABEL: vxor_vi_nxv4i64_0:
1131 ; CHECK:       # %bb.0:
1132 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
1133 ; CHECK-NEXT:    vnot.v v8, v8
1134 ; CHECK-NEXT:    ret
1135   %vc = xor <vscale x 4 x i64> %va, splat (i64 -1)
1136   ret <vscale x 4 x i64> %vc
1139 define <vscale x 4 x i64> @vxor_vi_nxv4i64_1(<vscale x 4 x i64> %va) {
1140 ; CHECK-LABEL: vxor_vi_nxv4i64_1:
1141 ; CHECK:       # %bb.0:
1142 ; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
1143 ; CHECK-NEXT:    vxor.vi v8, v8, 8
1144 ; CHECK-NEXT:    ret
1145   %vc = xor <vscale x 4 x i64> %va, splat (i64 8)
1146   ret <vscale x 4 x i64> %vc
1149 define <vscale x 4 x i64> @vxor_vi_nxv4i64_2(<vscale x 4 x i64> %va) {
1150 ; CHECK-LABEL: vxor_vi_nxv4i64_2:
1151 ; CHECK:       # %bb.0:
1152 ; CHECK-NEXT:    li a0, 16
1153 ; CHECK-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1154 ; CHECK-NEXT:    vxor.vx v8, v8, a0
1155 ; CHECK-NEXT:    ret
1156   %vc = xor <vscale x 4 x i64> %va, splat (i64 16)
1157   ret <vscale x 4 x i64> %vc
1160 define <vscale x 8 x i64> @vxor_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) {
1161 ; CHECK-LABEL: vxor_vv_nxv8i64:
1162 ; CHECK:       # %bb.0:
1163 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
1164 ; CHECK-NEXT:    vxor.vv v8, v8, v16
1165 ; CHECK-NEXT:    ret
1166   %vc = xor <vscale x 8 x i64> %va, %vb
1167   ret <vscale x 8 x i64> %vc
1170 define <vscale x 8 x i64> @vxor_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) {
1171 ; RV32-LABEL: vxor_vx_nxv8i64:
1172 ; RV32:       # %bb.0:
1173 ; RV32-NEXT:    addi sp, sp, -16
1174 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1175 ; RV32-NEXT:    sw a0, 8(sp)
1176 ; RV32-NEXT:    sw a1, 12(sp)
1177 ; RV32-NEXT:    addi a0, sp, 8
1178 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1179 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1180 ; RV32-NEXT:    vxor.vv v8, v8, v16
1181 ; RV32-NEXT:    addi sp, sp, 16
1182 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1183 ; RV32-NEXT:    ret
1185 ; RV64-LABEL: vxor_vx_nxv8i64:
1186 ; RV64:       # %bb.0:
1187 ; RV64-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1188 ; RV64-NEXT:    vxor.vx v8, v8, a0
1189 ; RV64-NEXT:    ret
1190   %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1191   %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1192   %vc = xor <vscale x 8 x i64> %va, %splat
1193   ret <vscale x 8 x i64> %vc
1196 define <vscale x 8 x i64> @vxor_vi_nxv8i64_0(<vscale x 8 x i64> %va) {
1197 ; CHECK-LABEL: vxor_vi_nxv8i64_0:
1198 ; CHECK:       # %bb.0:
1199 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
1200 ; CHECK-NEXT:    vnot.v v8, v8
1201 ; CHECK-NEXT:    ret
1202   %vc = xor <vscale x 8 x i64> %va, splat (i64 -1)
1203   ret <vscale x 8 x i64> %vc
1206 define <vscale x 8 x i64> @vxor_vi_nxv8i64_1(<vscale x 8 x i64> %va) {
1207 ; CHECK-LABEL: vxor_vi_nxv8i64_1:
1208 ; CHECK:       # %bb.0:
1209 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
1210 ; CHECK-NEXT:    vxor.vi v8, v8, 8
1211 ; CHECK-NEXT:    ret
1212   %vc = xor <vscale x 8 x i64> %va, splat (i64 8)
1213   ret <vscale x 8 x i64> %vc
1216 define <vscale x 8 x i64> @vxor_vi_nxv8i64_2(<vscale x 8 x i64> %va) {
1217 ; CHECK-LABEL: vxor_vi_nxv8i64_2:
1218 ; CHECK:       # %bb.0:
1219 ; CHECK-NEXT:    li a0, 16
1220 ; CHECK-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1221 ; CHECK-NEXT:    vxor.vx v8, v8, a0
1222 ; CHECK-NEXT:    ret
1223   %vc = xor <vscale x 8 x i64> %va, splat (i64 16)
1224   ret <vscale x 8 x i64> %vc
1227 define <vscale x 8 x i64> @vxor_xx_nxv8i64(i64 %a, i64 %b) nounwind {
1228 ; RV32-LABEL: vxor_xx_nxv8i64:
1229 ; RV32:       # %bb.0:
1230 ; RV32-NEXT:    addi sp, sp, -16
1231 ; RV32-NEXT:    xor a1, a1, a3
1232 ; RV32-NEXT:    xor a0, a0, a2
1233 ; RV32-NEXT:    sw a0, 8(sp)
1234 ; RV32-NEXT:    sw a1, 12(sp)
1235 ; RV32-NEXT:    addi a0, sp, 8
1236 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1237 ; RV32-NEXT:    vlse64.v v8, (a0), zero
1238 ; RV32-NEXT:    addi sp, sp, 16
1239 ; RV32-NEXT:    ret
1241 ; RV64-LABEL: vxor_xx_nxv8i64:
1242 ; RV64:       # %bb.0:
1243 ; RV64-NEXT:    xor a0, a0, a1
1244 ; RV64-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1245 ; RV64-NEXT:    vmv.v.x v8, a0
1246 ; RV64-NEXT:    ret
1247   %head1 = insertelement <vscale x 8 x i64> poison, i64 %a, i32 0
1248   %splat1 = shufflevector <vscale x 8 x i64> %head1, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1249   %head2 = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1250   %splat2 = shufflevector <vscale x 8 x i64> %head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1251   %v = xor <vscale x 8 x i64> %splat1, %splat2
1252   ret <vscale x 8 x i64> %v
1255 define <vscale x 8 x i32> @vxor_vv_mask_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %mask) {
1256 ; CHECK-LABEL: vxor_vv_mask_nxv8i32:
1257 ; CHECK:       # %bb.0:
1258 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1259 ; CHECK-NEXT:    vxor.vv v8, v8, v12, v0.t
1260 ; CHECK-NEXT:    ret
1261   %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %vb, <vscale x 8 x i32> zeroinitializer
1262   %vc = xor <vscale x 8 x i32> %va, %vs
1263   ret <vscale x 8 x i32> %vc
1266 define <vscale x 8 x i32> @vxor_vx_mask_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b, <vscale x 8 x i1> %mask) {
1267 ; CHECK-LABEL: vxor_vx_mask_nxv8i32:
1268 ; CHECK:       # %bb.0:
1269 ; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, mu
1270 ; CHECK-NEXT:    vxor.vx v8, v8, a0, v0.t
1271 ; CHECK-NEXT:    ret
1272   %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1273   %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1274   %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %splat, <vscale x 8 x i32> zeroinitializer
1275   %vc = xor <vscale x 8 x i32> %va, %vs
1276   ret <vscale x 8 x i32> %vc
1279 define <vscale x 8 x i32> @vxor_vi_mask_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %mask) {
1280 ; CHECK-LABEL: vxor_vi_mask_nxv8i32:
1281 ; CHECK:       # %bb.0:
1282 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1283 ; CHECK-NEXT:    vxor.vi v8, v8, 7, v0.t
1284 ; CHECK-NEXT:    ret
1285   %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> splat (i32 7), <vscale x 8 x i32> zeroinitializer
1286   %vc = xor <vscale x 8 x i32> %va, %vs
1287   ret <vscale x 8 x i32> %vc