2
2
; RUN: llc -mtriple=aarch64 -mattr=+sha3 < %s | FileCheck --check-prefix=SHA3 %s
3
3
; RUN: llc -mtriple=aarch64 -mattr=-sha3 < %s | FileCheck --check-prefix=NOSHA3 %s
4
4
; RUN: llc -mtriple=aarch64 -mattr=+sve2 < %s | FileCheck --check-prefix=SVE2 %s
5
- ; RUN: llc -mtriple=aarch64 -mattr=+sha3,+sve2 < %s | FileCheck --check-prefix=SHA3 %s
5
+ ; RUN: llc -mtriple=aarch64 -mattr=+sha3,+sve2 < %s | FileCheck --check-prefix=SHA3-SVE2 %s
6
6
7
7
define <16 x i8 > @eor3_16x8_left (<16 x i8 > %0 , <16 x i8 > %1 , <16 x i8 > %2 ) {
8
8
; SHA3-LABEL: eor3_16x8_left:
@@ -24,6 +24,11 @@ define <16 x i8> @eor3_16x8_left(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2) {
24
24
; SVE2-NEXT: eor3 z2.d, z2.d, z0.d, z1.d
25
25
; SVE2-NEXT: mov v0.16b, v2.16b
26
26
; SVE2-NEXT: ret
27
+ ;
28
+ ; SHA3-SVE2-LABEL: eor3_16x8_left:
29
+ ; SHA3-SVE2: // %bb.0:
30
+ ; SHA3-SVE2-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b
31
+ ; SHA3-SVE2-NEXT: ret
27
32
%4 = xor <16 x i8 > %0 , %1
28
33
%5 = xor <16 x i8 > %2 , %4
29
34
ret <16 x i8 > %5
@@ -49,6 +54,11 @@ define <16 x i8> @eor3_16x8_right(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2) {
49
54
; SVE2-NEXT: eor3 z1.d, z1.d, z2.d, z0.d
50
55
; SVE2-NEXT: mov v0.16b, v1.16b
51
56
; SVE2-NEXT: ret
57
+ ;
58
+ ; SHA3-SVE2-LABEL: eor3_16x8_right:
59
+ ; SHA3-SVE2: // %bb.0:
60
+ ; SHA3-SVE2-NEXT: eor3 v0.16b, v1.16b, v2.16b, v0.16b
61
+ ; SHA3-SVE2-NEXT: ret
52
62
%4 = xor <16 x i8 > %1 , %2
53
63
%5 = xor <16 x i8 > %4 , %0
54
64
ret <16 x i8 > %5
@@ -74,6 +84,11 @@ define <8 x i16> @eor3_8x16_left(<8 x i16> %0, <8 x i16> %1, <8 x i16> %2) {
74
84
; SVE2-NEXT: eor3 z2.d, z2.d, z0.d, z1.d
75
85
; SVE2-NEXT: mov v0.16b, v2.16b
76
86
; SVE2-NEXT: ret
87
+ ;
88
+ ; SHA3-SVE2-LABEL: eor3_8x16_left:
89
+ ; SHA3-SVE2: // %bb.0:
90
+ ; SHA3-SVE2-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b
91
+ ; SHA3-SVE2-NEXT: ret
77
92
%4 = xor <8 x i16 > %0 , %1
78
93
%5 = xor <8 x i16 > %2 , %4
79
94
ret <8 x i16 > %5
@@ -99,6 +114,11 @@ define <8 x i16> @eor3_8x16_right(<8 x i16> %0, <8 x i16> %1, <8 x i16> %2) {
99
114
; SVE2-NEXT: eor3 z1.d, z1.d, z2.d, z0.d
100
115
; SVE2-NEXT: mov v0.16b, v1.16b
101
116
; SVE2-NEXT: ret
117
+ ;
118
+ ; SHA3-SVE2-LABEL: eor3_8x16_right:
119
+ ; SHA3-SVE2: // %bb.0:
120
+ ; SHA3-SVE2-NEXT: eor3 v0.16b, v1.16b, v2.16b, v0.16b
121
+ ; SHA3-SVE2-NEXT: ret
102
122
%4 = xor <8 x i16 > %1 , %2
103
123
%5 = xor <8 x i16 > %4 , %0
104
124
ret <8 x i16 > %5
@@ -124,6 +144,11 @@ define <4 x i32> @eor3_4x32_left(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2) {
124
144
; SVE2-NEXT: eor3 z2.d, z2.d, z0.d, z1.d
125
145
; SVE2-NEXT: mov v0.16b, v2.16b
126
146
; SVE2-NEXT: ret
147
+ ;
148
+ ; SHA3-SVE2-LABEL: eor3_4x32_left:
149
+ ; SHA3-SVE2: // %bb.0:
150
+ ; SHA3-SVE2-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b
151
+ ; SHA3-SVE2-NEXT: ret
127
152
%4 = xor <4 x i32 > %0 , %1
128
153
%5 = xor <4 x i32 > %2 , %4
129
154
ret <4 x i32 > %5
@@ -149,6 +174,11 @@ define <4 x i32> @eor3_4x32_right(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2) {
149
174
; SVE2-NEXT: eor3 z1.d, z1.d, z2.d, z0.d
150
175
; SVE2-NEXT: mov v0.16b, v1.16b
151
176
; SVE2-NEXT: ret
177
+ ;
178
+ ; SHA3-SVE2-LABEL: eor3_4x32_right:
179
+ ; SHA3-SVE2: // %bb.0:
180
+ ; SHA3-SVE2-NEXT: eor3 v0.16b, v1.16b, v2.16b, v0.16b
181
+ ; SHA3-SVE2-NEXT: ret
152
182
%4 = xor <4 x i32 > %1 , %2
153
183
%5 = xor <4 x i32 > %4 , %0
154
184
ret <4 x i32 > %5
@@ -174,6 +204,11 @@ define <2 x i64> @eor3_2x64_left(<2 x i64> %0, <2 x i64> %1, <2 x i64> %2) {
174
204
; SVE2-NEXT: eor3 z2.d, z2.d, z0.d, z1.d
175
205
; SVE2-NEXT: mov v0.16b, v2.16b
176
206
; SVE2-NEXT: ret
207
+ ;
208
+ ; SHA3-SVE2-LABEL: eor3_2x64_left:
209
+ ; SHA3-SVE2: // %bb.0:
210
+ ; SHA3-SVE2-NEXT: eor3 v0.16b, v0.16b, v1.16b, v2.16b
211
+ ; SHA3-SVE2-NEXT: ret
177
212
%4 = xor <2 x i64 > %0 , %1
178
213
%5 = xor <2 x i64 > %2 , %4
179
214
ret <2 x i64 > %5
@@ -199,6 +234,11 @@ define <2 x i64> @eor3_2x64_right(<2 x i64> %0, <2 x i64> %1, <2 x i64> %2) {
199
234
; SVE2-NEXT: eor3 z1.d, z1.d, z2.d, z0.d
200
235
; SVE2-NEXT: mov v0.16b, v1.16b
201
236
; SVE2-NEXT: ret
237
+ ;
238
+ ; SHA3-SVE2-LABEL: eor3_2x64_right:
239
+ ; SHA3-SVE2: // %bb.0:
240
+ ; SHA3-SVE2-NEXT: eor3 v0.16b, v1.16b, v2.16b, v0.16b
241
+ ; SHA3-SVE2-NEXT: ret
202
242
%4 = xor <2 x i64 > %1 , %2
203
243
%5 = xor <2 x i64 > %4 , %0
204
244
ret <2 x i64 > %5
@@ -219,9 +259,19 @@ define <2 x i64> @eor3_vnot(<2 x i64> %0, <2 x i64> %1) {
219
259
;
220
260
; SVE2-LABEL: eor3_vnot:
221
261
; SVE2: // %bb.0:
222
- ; SVE2-NEXT: eor v0.16b, v0.16b, v1.16b
223
- ; SVE2-NEXT: mvn v0.16b, v0.16b
262
+ ; SVE2-NEXT: // kill: def $q0 killed $q0 def $z0
263
+ ; SVE2-NEXT: // kill: def $q1 killed $q1 def $z1
264
+ ; SVE2-NEXT: bsl2n z0.d, z0.d, z0.d, z1.d
265
+ ; SVE2-NEXT: // kill: def $q0 killed $q0 killed $z0
224
266
; SVE2-NEXT: ret
267
+ ;
268
+ ; SHA3-SVE2-LABEL: eor3_vnot:
269
+ ; SHA3-SVE2: // %bb.0:
270
+ ; SHA3-SVE2-NEXT: // kill: def $q0 killed $q0 def $z0
271
+ ; SHA3-SVE2-NEXT: // kill: def $q1 killed $q1 def $z1
272
+ ; SHA3-SVE2-NEXT: bsl2n z0.d, z0.d, z0.d, z1.d
273
+ ; SHA3-SVE2-NEXT: // kill: def $q0 killed $q0 killed $z0
274
+ ; SHA3-SVE2-NEXT: ret
225
275
%3 = xor <2 x i64 > %0 , <i64 -1 , i64 -1 >
226
276
%4 = xor <2 x i64 > %3 , %1
227
277
ret <2 x i64 > %4
0 commit comments