[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve2-eor3.ll
blob786e8435c0dd5435650e9e9c0ae77a8647de8e28
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64 -mattr=+sve < %s -o - | FileCheck --check-prefix=SVE %s
3 ; RUN: llc -mtriple=aarch64 -mattr=+sve2 < %s -o - | FileCheck --check-prefix=SVE2 %s
5 define <vscale x 16 x i8> @eor3_nxv16i8_left(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, <vscale x 16 x i8> %2) {
6 ; SVE-LABEL: eor3_nxv16i8_left:
7 ; SVE:       // %bb.0:
8 ; SVE-NEXT:    eor z0.d, z0.d, z1.d
9 ; SVE-NEXT:    eor z0.d, z0.d, z2.d
10 ; SVE-NEXT:    ret
12 ; SVE2-LABEL: eor3_nxv16i8_left:
13 ; SVE2:       // %bb.0:
14 ; SVE2-NEXT:    eor3 z0.d, z0.d, z1.d, z2.d
15 ; SVE2-NEXT:    ret
16   %4 = xor <vscale x 16 x i8> %0, %1
17   %5 = xor <vscale x 16 x i8> %4, %2
18   ret <vscale x 16 x i8> %5
21 define <vscale x 16 x i8> @eor3_nxv16i8_right(<vscale x 16 x i8> %0, <vscale x 16 x i8> %1, <vscale x 16 x i8> %2) {
22 ; SVE-LABEL: eor3_nxv16i8_right:
23 ; SVE:       // %bb.0:
24 ; SVE-NEXT:    eor z0.d, z0.d, z1.d
25 ; SVE-NEXT:    eor z0.d, z2.d, z0.d
26 ; SVE-NEXT:    ret
28 ; SVE2-LABEL: eor3_nxv16i8_right:
29 ; SVE2:       // %bb.0:
30 ; SVE2-NEXT:    eor3 z2.d, z2.d, z0.d, z1.d
31 ; SVE2-NEXT:    mov z0.d, z2.d
32 ; SVE2-NEXT:    ret
33   %4 = xor <vscale x 16 x i8> %0, %1
34   %5 = xor <vscale x 16 x i8> %2, %4
35   ret <vscale x 16 x i8> %5
38 define <vscale x 8 x i16> @eor3_nxv8i16_left(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, <vscale x 8 x i16> %2) {
39 ; SVE-LABEL: eor3_nxv8i16_left:
40 ; SVE:       // %bb.0:
41 ; SVE-NEXT:    eor z0.d, z0.d, z1.d
42 ; SVE-NEXT:    eor z0.d, z0.d, z2.d
43 ; SVE-NEXT:    ret
45 ; SVE2-LABEL: eor3_nxv8i16_left:
46 ; SVE2:       // %bb.0:
47 ; SVE2-NEXT:    eor3 z0.d, z0.d, z1.d, z2.d
48 ; SVE2-NEXT:    ret
49   %4 = xor <vscale x 8 x i16> %0, %1
50   %5 = xor <vscale x 8 x i16> %4, %2
51   ret <vscale x 8 x i16> %5
54 define <vscale x 8 x i16> @eor3_nxv8i16_right(<vscale x 8 x i16> %0, <vscale x 8 x i16> %1, <vscale x 8 x i16> %2) {
55 ; SVE-LABEL: eor3_nxv8i16_right:
56 ; SVE:       // %bb.0:
57 ; SVE-NEXT:    eor z0.d, z0.d, z1.d
58 ; SVE-NEXT:    eor z0.d, z2.d, z0.d
59 ; SVE-NEXT:    ret
61 ; SVE2-LABEL: eor3_nxv8i16_right:
62 ; SVE2:       // %bb.0:
63 ; SVE2-NEXT:    eor3 z2.d, z2.d, z0.d, z1.d
64 ; SVE2-NEXT:    mov z0.d, z2.d
65 ; SVE2-NEXT:    ret
66   %4 = xor <vscale x 8 x i16> %0, %1
67   %5 = xor <vscale x 8 x i16> %2, %4
68   ret <vscale x 8 x i16> %5
71 define <vscale x 4 x i32> @eor3_nxv4i32_left(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, <vscale x 4 x i32> %2) {
72 ; SVE-LABEL: eor3_nxv4i32_left:
73 ; SVE:       // %bb.0:
74 ; SVE-NEXT:    eor z0.d, z0.d, z1.d
75 ; SVE-NEXT:    eor z0.d, z0.d, z2.d
76 ; SVE-NEXT:    ret
78 ; SVE2-LABEL: eor3_nxv4i32_left:
79 ; SVE2:       // %bb.0:
80 ; SVE2-NEXT:    eor3 z0.d, z0.d, z1.d, z2.d
81 ; SVE2-NEXT:    ret
82   %4 = xor <vscale x 4 x i32> %0, %1
83   %5 = xor <vscale x 4 x i32> %4, %2
84   ret <vscale x 4 x i32> %5
87 define <vscale x 4 x i32> @eor3_nxv4i32_right(<vscale x 4 x i32> %0, <vscale x 4 x i32> %1, <vscale x 4 x i32> %2) {
88 ; SVE-LABEL: eor3_nxv4i32_right:
89 ; SVE:       // %bb.0:
90 ; SVE-NEXT:    eor z0.d, z0.d, z1.d
91 ; SVE-NEXT:    eor z0.d, z2.d, z0.d
92 ; SVE-NEXT:    ret
94 ; SVE2-LABEL: eor3_nxv4i32_right:
95 ; SVE2:       // %bb.0:
96 ; SVE2-NEXT:    eor3 z2.d, z2.d, z0.d, z1.d
97 ; SVE2-NEXT:    mov z0.d, z2.d
98 ; SVE2-NEXT:    ret
99   %4 = xor <vscale x 4 x i32> %0, %1
100   %5 = xor <vscale x 4 x i32> %2, %4
101   ret <vscale x 4 x i32> %5
104 define <vscale x 2 x i64> @eor3_nxv2i64_left(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, <vscale x 2 x i64> %2) {
105 ; SVE-LABEL: eor3_nxv2i64_left:
106 ; SVE:       // %bb.0:
107 ; SVE-NEXT:    eor z0.d, z0.d, z1.d
108 ; SVE-NEXT:    eor z0.d, z0.d, z2.d
109 ; SVE-NEXT:    ret
111 ; SVE2-LABEL: eor3_nxv2i64_left:
112 ; SVE2:       // %bb.0:
113 ; SVE2-NEXT:    eor3 z0.d, z0.d, z1.d, z2.d
114 ; SVE2-NEXT:    ret
115   %4 = xor <vscale x 2 x i64> %0, %1
116   %5 = xor <vscale x 2 x i64> %4, %2
117   ret <vscale x 2 x i64> %5
120 define <vscale x 2 x i64> @eor3_nxv2i64_right(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1, <vscale x 2 x i64> %2) {
121 ; SVE-LABEL: eor3_nxv2i64_right:
122 ; SVE:       // %bb.0:
123 ; SVE-NEXT:    eor z0.d, z0.d, z1.d
124 ; SVE-NEXT:    eor z0.d, z2.d, z0.d
125 ; SVE-NEXT:    ret
127 ; SVE2-LABEL: eor3_nxv2i64_right:
128 ; SVE2:       // %bb.0:
129 ; SVE2-NEXT:    eor3 z2.d, z2.d, z0.d, z1.d
130 ; SVE2-NEXT:    mov z0.d, z2.d
131 ; SVE2-NEXT:    ret
132   %4 = xor <vscale x 2 x i64> %0, %1
133   %5 = xor <vscale x 2 x i64> %2, %4
134   ret <vscale x 2 x i64> %5
137 define <vscale x 2 x i64> @eor3_vnot(<vscale x 2 x i64> %0, <vscale x 2 x i64> %1) {
138 ; SVE-LABEL: eor3_vnot:
139 ; SVE:       // %bb.0:
140 ; SVE-NEXT:    eor z0.d, z0.d, z1.d
141 ; SVE-NEXT:    ret
143 ; SVE2-LABEL: eor3_vnot:
144 ; SVE2:       // %bb.0:
145 ; SVE2-NEXT:    eor z0.d, z0.d, z1.d
146 ; SVE2-NEXT:    ret
147   %3 = xor <vscale x 2 x i64> %0, zeroinitializer
148   %4 = xor <vscale x 2 x i64> %3, %1
149   ret <vscale x 2 x i64> %4