1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --extra_scrub
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
+ ; 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
4
6
5
7
define <2 x i64 > @bcax_64x2 (<2 x i64 > %0 , <2 x i64 > %1 , <2 x i64 > %2 ) {
6
8
; SHA3-LABEL: bcax_64x2:
@@ -13,6 +15,15 @@ define <2 x i64> @bcax_64x2(<2 x i64> %0, <2 x i64> %1, <2 x i64> %2) {
13
15
; NOSHA3-NEXT: bic v0.16b, v0.16b, v1.16b
14
16
; NOSHA3-NEXT: eor v0.16b, v0.16b, v2.16b
15
17
; NOSHA3-NEXT: ret
18
+ ;
19
+ ; SVE2-LABEL: bcax_64x2:
20
+ ; SVE2: // %bb.0:
21
+ ; SVE2-NEXT: // kill: def $q2 killed $q2 def $z2
22
+ ; SVE2-NEXT: // kill: def $q1 killed $q1 def $z1
23
+ ; SVE2-NEXT: // kill: def $q0 killed $q0 def $z0
24
+ ; SVE2-NEXT: bcax z2.d, z2.d, z0.d, z1.d
25
+ ; SVE2-NEXT: mov v0.16b, v2.16b
26
+ ; SVE2-NEXT: ret
16
27
%4 = xor <2 x i64 > %1 , <i64 -1 , i64 -1 >
17
28
%5 = and <2 x i64 > %4 , %0
18
29
%6 = xor <2 x i64 > %5 , %2
@@ -30,6 +41,15 @@ define <4 x i32> @bcax_32x4(<4 x i32> %0, <4 x i32> %1, <4 x i32> %2) {
30
41
; NOSHA3-NEXT: bic v0.16b, v0.16b, v1.16b
31
42
; NOSHA3-NEXT: eor v0.16b, v0.16b, v2.16b
32
43
; NOSHA3-NEXT: ret
44
+ ;
45
+ ; SVE2-LABEL: bcax_32x4:
46
+ ; SVE2: // %bb.0:
47
+ ; SVE2-NEXT: // kill: def $q2 killed $q2 def $z2
48
+ ; SVE2-NEXT: // kill: def $q1 killed $q1 def $z1
49
+ ; SVE2-NEXT: // kill: def $q0 killed $q0 def $z0
50
+ ; SVE2-NEXT: bcax z2.d, z2.d, z0.d, z1.d
51
+ ; SVE2-NEXT: mov v0.16b, v2.16b
52
+ ; SVE2-NEXT: ret
33
53
%4 = xor <4 x i32 > %1 , <i32 -1 , i32 -1 , i32 -1 , i32 -1 >
34
54
%5 = and <4 x i32 > %4 , %0
35
55
%6 = xor <4 x i32 > %5 , %2
@@ -47,6 +67,15 @@ define <8 x i16> @bcax_16x8(<8 x i16> %0, <8 x i16> %1, <8 x i16> %2) {
47
67
; NOSHA3-NEXT: bic v0.16b, v0.16b, v1.16b
48
68
; NOSHA3-NEXT: eor v0.16b, v0.16b, v2.16b
49
69
; NOSHA3-NEXT: ret
70
+ ;
71
+ ; SVE2-LABEL: bcax_16x8:
72
+ ; SVE2: // %bb.0:
73
+ ; SVE2-NEXT: // kill: def $q2 killed $q2 def $z2
74
+ ; SVE2-NEXT: // kill: def $q1 killed $q1 def $z1
75
+ ; SVE2-NEXT: // kill: def $q0 killed $q0 def $z0
76
+ ; SVE2-NEXT: bcax z2.d, z2.d, z0.d, z1.d
77
+ ; SVE2-NEXT: mov v0.16b, v2.16b
78
+ ; SVE2-NEXT: ret
50
79
%4 = xor <8 x i16 > %1 , <i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 -1 , i16 -1 >
51
80
%5 = and <8 x i16 > %4 , %0
52
81
%6 = xor <8 x i16 > %5 , %2
@@ -64,6 +93,15 @@ define <16 x i8> @bcax_8x16(<16 x i8> %0, <16 x i8> %1, <16 x i8> %2) {
64
93
; NOSHA3-NEXT: bic v0.16b, v0.16b, v1.16b
65
94
; NOSHA3-NEXT: eor v0.16b, v0.16b, v2.16b
66
95
; NOSHA3-NEXT: ret
96
+ ;
97
+ ; SVE2-LABEL: bcax_8x16:
98
+ ; SVE2: // %bb.0:
99
+ ; SVE2-NEXT: // kill: def $q2 killed $q2 def $z2
100
+ ; SVE2-NEXT: // kill: def $q1 killed $q1 def $z1
101
+ ; SVE2-NEXT: // kill: def $q0 killed $q0 def $z0
102
+ ; SVE2-NEXT: bcax z2.d, z2.d, z0.d, z1.d
103
+ ; SVE2-NEXT: mov v0.16b, v2.16b
104
+ ; SVE2-NEXT: ret
67
105
%4 = xor <16 x i8 > %1 , <i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 , i8 -1 >
68
106
%5 = and <16 x i8 > %4 , %0
69
107
%6 = xor <16 x i8 > %5 , %2
0 commit comments