[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-streaming-mode-fixed-length-int-log.ll
blob4d70c1dd1c9118a04e6b87e6a7833c666b63c029
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible-sve  < %s | FileCheck %s
3 ; RUN: llc -mattr=+sme -force-streaming-compatible-sve  < %s | FileCheck %s
5 target triple = "aarch64-unknown-linux-gnu"
8 ; AND
11 define <8 x i8> @and_v8i8(<8 x i8> %op1, <8 x i8> %op2) {
12 ; CHECK-LABEL: and_v8i8:
13 ; CHECK:       // %bb.0:
14 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
15 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
16 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
17 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
18 ; CHECK-NEXT:    ret
19   %res = and <8 x i8> %op1, %op2
20   ret <8 x i8> %res
23 define <16 x i8> @and_v16i8(<16 x i8> %op1, <16 x i8> %op2) {
24 ; CHECK-LABEL: and_v16i8:
25 ; CHECK:       // %bb.0:
26 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
27 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
28 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
29 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
30 ; CHECK-NEXT:    ret
31   %res = and <16 x i8> %op1, %op2
32   ret <16 x i8> %res
35 define void @and_v32i8(ptr %a, ptr %b) {
36 ; CHECK-LABEL: and_v32i8:
37 ; CHECK:       // %bb.0:
38 ; CHECK-NEXT:    ldp q0, q3, [x1]
39 ; CHECK-NEXT:    ldp q1, q2, [x0]
40 ; CHECK-NEXT:    and z0.d, z1.d, z0.d
41 ; CHECK-NEXT:    and z1.d, z2.d, z3.d
42 ; CHECK-NEXT:    stp q0, q1, [x0]
43 ; CHECK-NEXT:    ret
44   %op1 = load <32 x i8>, ptr %a
45   %op2 = load <32 x i8>, ptr %b
46   %res = and <32 x i8> %op1, %op2
47   store <32 x i8> %res, ptr %a
48   ret void
51 define <4 x i16> @and_v4i16(<4 x i16> %op1, <4 x i16> %op2) {
52 ; CHECK-LABEL: and_v4i16:
53 ; CHECK:       // %bb.0:
54 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
55 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
56 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
57 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
58 ; CHECK-NEXT:    ret
59   %res = and <4 x i16> %op1, %op2
60   ret <4 x i16> %res
63 define <8 x i16> @and_v8i16(<8 x i16> %op1, <8 x i16> %op2) {
64 ; CHECK-LABEL: and_v8i16:
65 ; CHECK:       // %bb.0:
66 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
67 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
68 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
69 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
70 ; CHECK-NEXT:    ret
71   %res = and <8 x i16> %op1, %op2
72   ret <8 x i16> %res
75 define void @and_v16i16(ptr %a, ptr %b) {
76 ; CHECK-LABEL: and_v16i16:
77 ; CHECK:       // %bb.0:
78 ; CHECK-NEXT:    ldp q0, q3, [x1]
79 ; CHECK-NEXT:    ldp q1, q2, [x0]
80 ; CHECK-NEXT:    and z0.d, z1.d, z0.d
81 ; CHECK-NEXT:    and z1.d, z2.d, z3.d
82 ; CHECK-NEXT:    stp q0, q1, [x0]
83 ; CHECK-NEXT:    ret
84   %op1 = load <16 x i16>, ptr %a
85   %op2 = load <16 x i16>, ptr %b
86   %res = and <16 x i16> %op1, %op2
87   store <16 x i16> %res, ptr %a
88   ret void
91 define <2 x i32> @and_v2i32(<2 x i32> %op1, <2 x i32> %op2) {
92 ; CHECK-LABEL: and_v2i32:
93 ; CHECK:       // %bb.0:
94 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
95 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
96 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
97 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
98 ; CHECK-NEXT:    ret
99   %res = and <2 x i32> %op1, %op2
100   ret <2 x i32> %res
103 define <4 x i32> @and_v4i32(<4 x i32> %op1, <4 x i32> %op2) {
104 ; CHECK-LABEL: and_v4i32:
105 ; CHECK:       // %bb.0:
106 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
107 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
108 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
109 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
110 ; CHECK-NEXT:    ret
111   %res = and <4 x i32> %op1, %op2
112   ret <4 x i32> %res
115 define void @and_v8i32(ptr %a, ptr %b) {
116 ; CHECK-LABEL: and_v8i32:
117 ; CHECK:       // %bb.0:
118 ; CHECK-NEXT:    ldp q0, q3, [x1]
119 ; CHECK-NEXT:    ldp q1, q2, [x0]
120 ; CHECK-NEXT:    and z0.d, z1.d, z0.d
121 ; CHECK-NEXT:    and z1.d, z2.d, z3.d
122 ; CHECK-NEXT:    stp q0, q1, [x0]
123 ; CHECK-NEXT:    ret
124   %op1 = load <8 x i32>, ptr %a
125   %op2 = load <8 x i32>, ptr %b
126   %res = and <8 x i32> %op1, %op2
127   store <8 x i32> %res, ptr %a
128   ret void
131 define <1 x i64> @and_v1i64(<1 x i64> %op1, <1 x i64> %op2) {
132 ; CHECK-LABEL: and_v1i64:
133 ; CHECK:       // %bb.0:
134 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
135 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
136 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
137 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
138 ; CHECK-NEXT:    ret
139   %res = and <1 x i64> %op1, %op2
140   ret <1 x i64> %res
143 define <2 x i64> @and_v2i64(<2 x i64> %op1, <2 x i64> %op2) {
144 ; CHECK-LABEL: and_v2i64:
145 ; CHECK:       // %bb.0:
146 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
147 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
148 ; CHECK-NEXT:    and z0.d, z0.d, z1.d
149 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
150 ; CHECK-NEXT:    ret
151   %res = and <2 x i64> %op1, %op2
152   ret <2 x i64> %res
155 define void @and_v4i64(ptr %a, ptr %b) {
156 ; CHECK-LABEL: and_v4i64:
157 ; CHECK:       // %bb.0:
158 ; CHECK-NEXT:    ldp q0, q3, [x1]
159 ; CHECK-NEXT:    ldp q1, q2, [x0]
160 ; CHECK-NEXT:    and z0.d, z1.d, z0.d
161 ; CHECK-NEXT:    and z1.d, z2.d, z3.d
162 ; CHECK-NEXT:    stp q0, q1, [x0]
163 ; CHECK-NEXT:    ret
164   %op1 = load <4 x i64>, ptr %a
165   %op2 = load <4 x i64>, ptr %b
166   %res = and <4 x i64> %op1, %op2
167   store <4 x i64> %res, ptr %a
168   ret void
172 ; OR
175 define <8 x i8> @or_v8i8(<8 x i8> %op1, <8 x i8> %op2) {
176 ; CHECK-LABEL: or_v8i8:
177 ; CHECK:       // %bb.0:
178 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
179 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
180 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
181 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
182 ; CHECK-NEXT:    ret
183   %res = or <8 x i8> %op1, %op2
184   ret <8 x i8> %res
187 define <16 x i8> @or_v16i8(<16 x i8> %op1, <16 x i8> %op2) {
188 ; CHECK-LABEL: or_v16i8:
189 ; CHECK:       // %bb.0:
190 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
191 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
192 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
193 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
194 ; CHECK-NEXT:    ret
195   %res = or <16 x i8> %op1, %op2
196   ret <16 x i8> %res
199 define void @or_v32i8(ptr %a, ptr %b) {
200 ; CHECK-LABEL: or_v32i8:
201 ; CHECK:       // %bb.0:
202 ; CHECK-NEXT:    ldp q0, q3, [x1]
203 ; CHECK-NEXT:    ldp q1, q2, [x0]
204 ; CHECK-NEXT:    orr z0.d, z1.d, z0.d
205 ; CHECK-NEXT:    orr z1.d, z2.d, z3.d
206 ; CHECK-NEXT:    stp q0, q1, [x0]
207 ; CHECK-NEXT:    ret
208   %op1 = load <32 x i8>, ptr %a
209   %op2 = load <32 x i8>, ptr %b
210   %res = or <32 x i8> %op1, %op2
211   store <32 x i8> %res, ptr %a
212   ret void
215 define <4 x i16> @or_v4i16(<4 x i16> %op1, <4 x i16> %op2) {
216 ; CHECK-LABEL: or_v4i16:
217 ; CHECK:       // %bb.0:
218 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
219 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
220 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
221 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
222 ; CHECK-NEXT:    ret
223   %res = or <4 x i16> %op1, %op2
224   ret <4 x i16> %res
227 define <8 x i16> @or_v8i16(<8 x i16> %op1, <8 x i16> %op2) {
228 ; CHECK-LABEL: or_v8i16:
229 ; CHECK:       // %bb.0:
230 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
231 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
232 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
233 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
234 ; CHECK-NEXT:    ret
235   %res = or <8 x i16> %op1, %op2
236   ret <8 x i16> %res
239 define void @or_v16i16(ptr %a, ptr %b) {
240 ; CHECK-LABEL: or_v16i16:
241 ; CHECK:       // %bb.0:
242 ; CHECK-NEXT:    ldp q0, q3, [x1]
243 ; CHECK-NEXT:    ldp q1, q2, [x0]
244 ; CHECK-NEXT:    orr z0.d, z1.d, z0.d
245 ; CHECK-NEXT:    orr z1.d, z2.d, z3.d
246 ; CHECK-NEXT:    stp q0, q1, [x0]
247 ; CHECK-NEXT:    ret
248   %op1 = load <16 x i16>, ptr %a
249   %op2 = load <16 x i16>, ptr %b
250   %res = or <16 x i16> %op1, %op2
251   store <16 x i16> %res, ptr %a
252   ret void
255 define <2 x i32> @or_v2i32(<2 x i32> %op1, <2 x i32> %op2) {
256 ; CHECK-LABEL: or_v2i32:
257 ; CHECK:       // %bb.0:
258 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
259 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
260 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
261 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
262 ; CHECK-NEXT:    ret
263   %res = or <2 x i32> %op1, %op2
264   ret <2 x i32> %res
267 define <4 x i32> @or_v4i32(<4 x i32> %op1, <4 x i32> %op2) {
268 ; CHECK-LABEL: or_v4i32:
269 ; CHECK:       // %bb.0:
270 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
271 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
272 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
273 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
274 ; CHECK-NEXT:    ret
275   %res = or <4 x i32> %op1, %op2
276   ret <4 x i32> %res
279 define void @or_v8i32(ptr %a, ptr %b) {
280 ; CHECK-LABEL: or_v8i32:
281 ; CHECK:       // %bb.0:
282 ; CHECK-NEXT:    ldp q0, q3, [x1]
283 ; CHECK-NEXT:    ldp q1, q2, [x0]
284 ; CHECK-NEXT:    orr z0.d, z1.d, z0.d
285 ; CHECK-NEXT:    orr z1.d, z2.d, z3.d
286 ; CHECK-NEXT:    stp q0, q1, [x0]
287 ; CHECK-NEXT:    ret
288   %op1 = load <8 x i32>, ptr %a
289   %op2 = load <8 x i32>, ptr %b
290   %res = or <8 x i32> %op1, %op2
291   store <8 x i32> %res, ptr %a
292   ret void
295 define <1 x i64> @or_v1i64(<1 x i64> %op1, <1 x i64> %op2) {
296 ; CHECK-LABEL: or_v1i64:
297 ; CHECK:       // %bb.0:
298 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
299 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
300 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
301 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
302 ; CHECK-NEXT:    ret
303   %res = or <1 x i64> %op1, %op2
304   ret <1 x i64> %res
307 define <2 x i64> @or_v2i64(<2 x i64> %op1, <2 x i64> %op2) {
308 ; CHECK-LABEL: or_v2i64:
309 ; CHECK:       // %bb.0:
310 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
311 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
312 ; CHECK-NEXT:    orr z0.d, z0.d, z1.d
313 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
314 ; CHECK-NEXT:    ret
315   %res = or <2 x i64> %op1, %op2
316   ret <2 x i64> %res
319 define void @or_v4i64(ptr %a, ptr %b) {
320 ; CHECK-LABEL: or_v4i64:
321 ; CHECK:       // %bb.0:
322 ; CHECK-NEXT:    ldp q0, q3, [x1]
323 ; CHECK-NEXT:    ldp q1, q2, [x0]
324 ; CHECK-NEXT:    orr z0.d, z1.d, z0.d
325 ; CHECK-NEXT:    orr z1.d, z2.d, z3.d
326 ; CHECK-NEXT:    stp q0, q1, [x0]
327 ; CHECK-NEXT:    ret
328   %op1 = load <4 x i64>, ptr %a
329   %op2 = load <4 x i64>, ptr %b
330   %res = or <4 x i64> %op1, %op2
331   store <4 x i64> %res, ptr %a
332   ret void
336 ; XOR
339 define <8 x i8> @xor_v8i8(<8 x i8> %op1, <8 x i8> %op2) {
340 ; CHECK-LABEL: xor_v8i8:
341 ; CHECK:       // %bb.0:
342 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
343 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
344 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
345 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
346 ; CHECK-NEXT:    ret
347   %res = xor <8 x i8> %op1, %op2
348   ret <8 x i8> %res
351 define <16 x i8> @xor_v16i8(<16 x i8> %op1, <16 x i8> %op2) {
352 ; CHECK-LABEL: xor_v16i8:
353 ; CHECK:       // %bb.0:
354 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
355 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
356 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
357 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
358 ; CHECK-NEXT:    ret
359   %res = xor <16 x i8> %op1, %op2
360   ret <16 x i8> %res
363 define void @xor_v32i8(ptr %a, ptr %b) {
364 ; CHECK-LABEL: xor_v32i8:
365 ; CHECK:       // %bb.0:
366 ; CHECK-NEXT:    ldp q0, q3, [x1]
367 ; CHECK-NEXT:    ldp q1, q2, [x0]
368 ; CHECK-NEXT:    eor z0.d, z1.d, z0.d
369 ; CHECK-NEXT:    eor z1.d, z2.d, z3.d
370 ; CHECK-NEXT:    stp q0, q1, [x0]
371 ; CHECK-NEXT:    ret
372   %op1 = load <32 x i8>, ptr %a
373   %op2 = load <32 x i8>, ptr %b
374   %res = xor <32 x i8> %op1, %op2
375   store <32 x i8> %res, ptr %a
376   ret void
379 define <4 x i16> @xor_v4i16(<4 x i16> %op1, <4 x i16> %op2) {
380 ; CHECK-LABEL: xor_v4i16:
381 ; CHECK:       // %bb.0:
382 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
383 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
384 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
385 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
386 ; CHECK-NEXT:    ret
387   %res = xor <4 x i16> %op1, %op2
388   ret <4 x i16> %res
391 define <8 x i16> @xor_v8i16(<8 x i16> %op1, <8 x i16> %op2) {
392 ; CHECK-LABEL: xor_v8i16:
393 ; CHECK:       // %bb.0:
394 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
395 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
396 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
397 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
398 ; CHECK-NEXT:    ret
399   %res = xor <8 x i16> %op1, %op2
400   ret <8 x i16> %res
403 define void @xor_v16i16(ptr %a, ptr %b) {
404 ; CHECK-LABEL: xor_v16i16:
405 ; CHECK:       // %bb.0:
406 ; CHECK-NEXT:    ldp q0, q3, [x1]
407 ; CHECK-NEXT:    ldp q1, q2, [x0]
408 ; CHECK-NEXT:    eor z0.d, z1.d, z0.d
409 ; CHECK-NEXT:    eor z1.d, z2.d, z3.d
410 ; CHECK-NEXT:    stp q0, q1, [x0]
411 ; CHECK-NEXT:    ret
412   %op1 = load <16 x i16>, ptr %a
413   %op2 = load <16 x i16>, ptr %b
414   %res = xor <16 x i16> %op1, %op2
415   store <16 x i16> %res, ptr %a
416   ret void
419 define <2 x i32> @xor_v2i32(<2 x i32> %op1, <2 x i32> %op2) {
420 ; CHECK-LABEL: xor_v2i32:
421 ; CHECK:       // %bb.0:
422 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
423 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
424 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
425 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
426 ; CHECK-NEXT:    ret
427   %res = xor <2 x i32> %op1, %op2
428   ret <2 x i32> %res
431 define <4 x i32> @xor_v4i32(<4 x i32> %op1, <4 x i32> %op2) {
432 ; CHECK-LABEL: xor_v4i32:
433 ; CHECK:       // %bb.0:
434 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
435 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
436 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
437 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
438 ; CHECK-NEXT:    ret
439   %res = xor <4 x i32> %op1, %op2
440   ret <4 x i32> %res
443 define void @xor_v8i32(ptr %a, ptr %b) {
444 ; CHECK-LABEL: xor_v8i32:
445 ; CHECK:       // %bb.0:
446 ; CHECK-NEXT:    ldp q0, q3, [x1]
447 ; CHECK-NEXT:    ldp q1, q2, [x0]
448 ; CHECK-NEXT:    eor z0.d, z1.d, z0.d
449 ; CHECK-NEXT:    eor z1.d, z2.d, z3.d
450 ; CHECK-NEXT:    stp q0, q1, [x0]
451 ; CHECK-NEXT:    ret
452   %op1 = load <8 x i32>, ptr %a
453   %op2 = load <8 x i32>, ptr %b
454   %res = xor <8 x i32> %op1, %op2
455   store <8 x i32> %res, ptr %a
456   ret void
459 define <1 x i64> @xor_v1i64(<1 x i64> %op1, <1 x i64> %op2) {
460 ; CHECK-LABEL: xor_v1i64:
461 ; CHECK:       // %bb.0:
462 ; CHECK-NEXT:    // kill: def $d0 killed $d0 def $z0
463 ; CHECK-NEXT:    // kill: def $d1 killed $d1 def $z1
464 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
465 ; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0
466 ; CHECK-NEXT:    ret
467   %res = xor <1 x i64> %op1, %op2
468   ret <1 x i64> %res
471 define <2 x i64> @xor_v2i64(<2 x i64> %op1, <2 x i64> %op2) {
472 ; CHECK-LABEL: xor_v2i64:
473 ; CHECK:       // %bb.0:
474 ; CHECK-NEXT:    // kill: def $q0 killed $q0 def $z0
475 ; CHECK-NEXT:    // kill: def $q1 killed $q1 def $z1
476 ; CHECK-NEXT:    eor z0.d, z0.d, z1.d
477 ; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z0
478 ; CHECK-NEXT:    ret
479   %res = xor <2 x i64> %op1, %op2
480   ret <2 x i64> %res
483 define void @xor_v4i64(ptr %a, ptr %b) {
484 ; CHECK-LABEL: xor_v4i64:
485 ; CHECK:       // %bb.0:
486 ; CHECK-NEXT:    ldp q0, q3, [x1]
487 ; CHECK-NEXT:    ldp q1, q2, [x0]
488 ; CHECK-NEXT:    eor z0.d, z1.d, z0.d
489 ; CHECK-NEXT:    eor z1.d, z2.d, z3.d
490 ; CHECK-NEXT:    stp q0, q1, [x0]
491 ; CHECK-NEXT:    ret
492   %op1 = load <4 x i64>, ptr %a
493   %op2 = load <4 x i64>, ptr %b
494   %res = xor <4 x i64> %op1, %op2
495   store <4 x i64> %res, ptr %a
496   ret void