xref: /llvm-project/llvm/test/CodeGen/AArch64/eor3.ll (revision d39b4ce3ce8a3c256e01bdec2b140777a332a633)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --extra_scrub
2; RUN: llc -mtriple=aarch64 -mattr=+sha3 < %s | FileCheck --check-prefix=SHA3 %s
3; RUN: llc -mtriple=aarch64 -mattr=-sha3 < %s | FileCheck --check-prefix=NOSHA3 %s
4
5define <16 x i8> @eor3_16x8_left(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2) {
6; SHA3-LABEL: eor3_16x8_left:
7; SHA3:       // %bb.0:
8; SHA3-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b
9; SHA3-NEXT:    ret
10;
11; NOSHA3-LABEL: eor3_16x8_left:
12; NOSHA3:       // %bb.0:
13; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b
14; NOSHA3-NEXT:    eor v0.16b, v2.16b, v0.16b
15; NOSHA3-NEXT:    ret
16  %4 = xor <16 x i8> %0, %1
17  %5 = xor <16 x i8> %2, %4
18  ret <16 x i8> %5
19}
20
21define <16 x i8> @eor3_16x8_right(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2) {
22; SHA3-LABEL: eor3_16x8_right:
23; SHA3:       // %bb.0:
24; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b
25; SHA3-NEXT:    ret
26;
27; NOSHA3-LABEL: eor3_16x8_right:
28; NOSHA3:       // %bb.0:
29; NOSHA3-NEXT:    eor v1.16b, v1.16b, v2.16b
30; NOSHA3-NEXT:    eor v0.16b, v1.16b, v0.16b
31; NOSHA3-NEXT:    ret
32  %4 = xor <16 x i8> %1, %2
33  %5 = xor <16 x i8> %4, %0
34  ret <16 x i8> %5
35}
36
37define <8 x i16> @eor3_8x16_left(<8 x i16> %0, <8 x i16> %1, <8 x i16> %2) {
38; SHA3-LABEL: eor3_8x16_left:
39; SHA3:       // %bb.0:
40; SHA3-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b
41; SHA3-NEXT:    ret
42;
43; NOSHA3-LABEL: eor3_8x16_left:
44; NOSHA3:       // %bb.0:
45; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b
46; NOSHA3-NEXT:    eor v0.16b, v2.16b, v0.16b
47; NOSHA3-NEXT:    ret
48  %4 = xor <8 x i16> %0, %1
49  %5 = xor <8 x i16> %2, %4
50  ret <8 x i16> %5
51}
52
53define <8 x i16> @eor3_8x16_right(<8 x i16> %0, <8 x i16> %1, <8 x i16> %2) {
54; SHA3-LABEL: eor3_8x16_right:
55; SHA3:       // %bb.0:
56; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b
57; SHA3-NEXT:    ret
58;
59; NOSHA3-LABEL: eor3_8x16_right:
60; NOSHA3:       // %bb.0:
61; NOSHA3-NEXT:    eor v1.16b, v1.16b, v2.16b
62; NOSHA3-NEXT:    eor v0.16b, v1.16b, v0.16b
63; NOSHA3-NEXT:    ret
64  %4 = xor <8 x i16> %1, %2
65  %5 = xor <8 x i16> %4, %0
66  ret <8 x i16> %5
67}
68
69define <4 x i32> @eor3_4x32_left(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2) {
70; SHA3-LABEL: eor3_4x32_left:
71; SHA3:       // %bb.0:
72; SHA3-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b
73; SHA3-NEXT:    ret
74;
75; NOSHA3-LABEL: eor3_4x32_left:
76; NOSHA3:       // %bb.0:
77; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b
78; NOSHA3-NEXT:    eor v0.16b, v2.16b, v0.16b
79; NOSHA3-NEXT:    ret
80  %4 = xor <4 x i32> %0, %1
81  %5 = xor <4 x i32> %2, %4
82  ret <4 x i32> %5
83}
84
85define <4 x i32> @eor3_4x32_right(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2) {
86; SHA3-LABEL: eor3_4x32_right:
87; SHA3:       // %bb.0:
88; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b
89; SHA3-NEXT:    ret
90;
91; NOSHA3-LABEL: eor3_4x32_right:
92; NOSHA3:       // %bb.0:
93; NOSHA3-NEXT:    eor v1.16b, v1.16b, v2.16b
94; NOSHA3-NEXT:    eor v0.16b, v1.16b, v0.16b
95; NOSHA3-NEXT:    ret
96  %4 = xor <4 x i32> %1, %2
97  %5 = xor <4 x i32> %4, %0
98  ret <4 x i32> %5
99}
100
101define <2 x i64> @eor3_2x64_left(<2 x i64> %0, <2 x i64> %1, <2 x i64> %2) {
102; SHA3-LABEL: eor3_2x64_left:
103; SHA3:       // %bb.0:
104; SHA3-NEXT:    eor3 v0.16b, v0.16b, v1.16b, v2.16b
105; SHA3-NEXT:    ret
106;
107; NOSHA3-LABEL: eor3_2x64_left:
108; NOSHA3:       // %bb.0:
109; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b
110; NOSHA3-NEXT:    eor v0.16b, v2.16b, v0.16b
111; NOSHA3-NEXT:    ret
112  %4 = xor <2 x i64> %0, %1
113  %5 = xor <2 x i64> %2, %4
114  ret <2 x i64> %5
115}
116
117define <2 x i64> @eor3_2x64_right(<2 x i64> %0, <2 x i64> %1, <2 x i64> %2) {
118; SHA3-LABEL: eor3_2x64_right:
119; SHA3:       // %bb.0:
120; SHA3-NEXT:    eor3 v0.16b, v1.16b, v2.16b, v0.16b
121; SHA3-NEXT:    ret
122;
123; NOSHA3-LABEL: eor3_2x64_right:
124; NOSHA3:       // %bb.0:
125; NOSHA3-NEXT:    eor v1.16b, v1.16b, v2.16b
126; NOSHA3-NEXT:    eor v0.16b, v1.16b, v0.16b
127; NOSHA3-NEXT:    ret
128  %4 = xor <2 x i64> %1, %2
129  %5 = xor <2 x i64> %4, %0
130  ret <2 x i64> %5
131}
132
133define <2 x i64> @eor3_vnot(<2 x i64> %0, <2 x i64> %1) {
134; SHA3-LABEL: eor3_vnot:
135; SHA3:       // %bb.0:
136; SHA3-NEXT:    eor v0.16b, v0.16b, v1.16b
137; SHA3-NEXT:    mvn v0.16b, v0.16b
138; SHA3-NEXT:    ret
139;
140; NOSHA3-LABEL: eor3_vnot:
141; NOSHA3:       // %bb.0:
142; NOSHA3-NEXT:    eor v0.16b, v0.16b, v1.16b
143; NOSHA3-NEXT:    mvn v0.16b, v0.16b
144; NOSHA3-NEXT:    ret
145  %3 = xor <2 x i64> %0, <i64 -1, i64 -1>
146  %4 = xor <2 x i64> %3, %1
147  ret <2 x i64> %4
148}
149
150