@@ -13,6 +13,17 @@ define <16 x i8> @combineXorAeseZeroARM64(<16 x i8> %data, <16 x i8> %key) {
13
13
ret <16 x i8 > %data.aes
14
14
}
15
15
16
+ define <16 x i8 > @combineXorAeseZeroLhsARM64 (<16 x i8 > %data , <16 x i8 > %key ) {
17
+ ; CHECK-LABEL: define <16 x i8> @combineXorAeseZeroLhsARM64(
18
+ ; CHECK-SAME: <16 x i8> [[DATA:%.*]], <16 x i8> [[KEY:%.*]]) {
19
+ ; CHECK-NEXT: [[DATA_AES:%.*]] = tail call <16 x i8> @llvm.aarch64.crypto.aese(<16 x i8> [[DATA]], <16 x i8> [[KEY]])
20
+ ; CHECK-NEXT: ret <16 x i8> [[DATA_AES]]
21
+ ;
22
+ %data.xor = xor <16 x i8 > %data , %key
23
+ %data.aes = tail call <16 x i8 > @llvm.aarch64.crypto.aese (<16 x i8 > zeroinitializer , <16 x i8 > %data.xor )
24
+ ret <16 x i8 > %data.aes
25
+ }
26
+
16
27
define <16 x i8 > @combineXorAeseNonZeroARM64 (<16 x i8 > %data , <16 x i8 > %key ) {
17
28
; CHECK-LABEL: define <16 x i8> @combineXorAeseNonZeroARM64(
18
29
; CHECK-SAME: <16 x i8> [[DATA:%.*]], <16 x i8> [[KEY:%.*]]) {
@@ -36,6 +47,17 @@ define <16 x i8> @combineXorAesdZeroARM64(<16 x i8> %data, <16 x i8> %key) {
36
47
ret <16 x i8 > %data.aes
37
48
}
38
49
50
+ define <16 x i8 > @combineXorAesdZeroLhsARM64 (<16 x i8 > %data , <16 x i8 > %key ) {
51
+ ; CHECK-LABEL: define <16 x i8> @combineXorAesdZeroLhsARM64(
52
+ ; CHECK-SAME: <16 x i8> [[DATA:%.*]], <16 x i8> [[KEY:%.*]]) {
53
+ ; CHECK-NEXT: [[DATA_AES:%.*]] = tail call <16 x i8> @llvm.aarch64.crypto.aesd(<16 x i8> [[DATA]], <16 x i8> [[KEY]])
54
+ ; CHECK-NEXT: ret <16 x i8> [[DATA_AES]]
55
+ ;
56
+ %data.xor = xor <16 x i8 > %data , %key
57
+ %data.aes = tail call <16 x i8 > @llvm.aarch64.crypto.aesd (<16 x i8 > zeroinitializer , <16 x i8 > %data.xor )
58
+ ret <16 x i8 > %data.aes
59
+ }
60
+
39
61
define <16 x i8 > @combineXorAesdNonZeroARM64 (<16 x i8 > %data , <16 x i8 > %key ) {
40
62
; CHECK-LABEL: define <16 x i8> @combineXorAesdNonZeroARM64(
41
63
; CHECK-SAME: <16 x i8> [[DATA:%.*]], <16 x i8> [[KEY:%.*]]) {
@@ -51,3 +73,51 @@ define <16 x i8> @combineXorAesdNonZeroARM64(<16 x i8> %data, <16 x i8> %key) {
51
73
declare <16 x i8 > @llvm.aarch64.crypto.aese (<16 x i8 >, <16 x i8 >) #0
52
74
declare <16 x i8 > @llvm.aarch64.crypto.aesd (<16 x i8 >, <16 x i8 >) #0
53
75
76
+ ; SVE
77
+
78
+ define <vscale x 16 x i8 > @combineXorAeseZeroLhsSVE (<vscale x 16 x i8 > %data , <vscale x 16 x i8 > %key ) {
79
+ ; CHECK-LABEL: define <vscale x 16 x i8> @combineXorAeseZeroLhsSVE(
80
+ ; CHECK-SAME: <vscale x 16 x i8> [[DATA:%.*]], <vscale x 16 x i8> [[KEY:%.*]]) {
81
+ ; CHECK-NEXT: [[DATA_AES:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aese(<vscale x 16 x i8> [[DATA]], <vscale x 16 x i8> [[KEY]])
82
+ ; CHECK-NEXT: ret <vscale x 16 x i8> [[DATA_AES]]
83
+ ;
84
+ %data.xor = xor <vscale x 16 x i8 > %data , %key
85
+ %data.aes = tail call <vscale x 16 x i8 > @llvm.aarch64.sve.aese (<vscale x 16 x i8 > zeroinitializer , <vscale x 16 x i8 > %data.xor )
86
+ ret <vscale x 16 x i8 > %data.aes
87
+ }
88
+
89
+ define <vscale x 16 x i8 > @combineXorAeseZeroRhsSVE (<vscale x 16 x i8 > %data , <vscale x 16 x i8 > %key ) {
90
+ ; CHECK-LABEL: define <vscale x 16 x i8> @combineXorAeseZeroRhsSVE(
91
+ ; CHECK-SAME: <vscale x 16 x i8> [[DATA:%.*]], <vscale x 16 x i8> [[KEY:%.*]]) {
92
+ ; CHECK-NEXT: [[DATA_AES:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aese(<vscale x 16 x i8> [[DATA]], <vscale x 16 x i8> [[KEY]])
93
+ ; CHECK-NEXT: ret <vscale x 16 x i8> [[DATA_AES]]
94
+ ;
95
+ %data.xor = xor <vscale x 16 x i8 > %data , %key
96
+ %data.aes = tail call <vscale x 16 x i8 > @llvm.aarch64.sve.aese (<vscale x 16 x i8 > %data.xor , <vscale x 16 x i8 > zeroinitializer )
97
+ ret <vscale x 16 x i8 > %data.aes
98
+ }
99
+
100
+ define <vscale x 16 x i8 > @combineXorAesdZeroLhsSVE (<vscale x 16 x i8 > %data , <vscale x 16 x i8 > %key ) {
101
+ ; CHECK-LABEL: define <vscale x 16 x i8> @combineXorAesdZeroLhsSVE(
102
+ ; CHECK-SAME: <vscale x 16 x i8> [[DATA:%.*]], <vscale x 16 x i8> [[KEY:%.*]]) {
103
+ ; CHECK-NEXT: [[DATA_AES:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesd(<vscale x 16 x i8> [[DATA]], <vscale x 16 x i8> [[KEY]])
104
+ ; CHECK-NEXT: ret <vscale x 16 x i8> [[DATA_AES]]
105
+ ;
106
+ %data.xor = xor <vscale x 16 x i8 > %data , %key
107
+ %data.aes = tail call <vscale x 16 x i8 > @llvm.aarch64.sve.aesd (<vscale x 16 x i8 > zeroinitializer , <vscale x 16 x i8 > %data.xor )
108
+ ret <vscale x 16 x i8 > %data.aes
109
+ }
110
+
111
+ define <vscale x 16 x i8 > @combineXorAesdZeroRhsSVE (<vscale x 16 x i8 > %data , <vscale x 16 x i8 > %key ) {
112
+ ; CHECK-LABEL: define <vscale x 16 x i8> @combineXorAesdZeroRhsSVE(
113
+ ; CHECK-SAME: <vscale x 16 x i8> [[DATA:%.*]], <vscale x 16 x i8> [[KEY:%.*]]) {
114
+ ; CHECK-NEXT: [[DATA_AES:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesd(<vscale x 16 x i8> [[DATA]], <vscale x 16 x i8> [[KEY]])
115
+ ; CHECK-NEXT: ret <vscale x 16 x i8> [[DATA_AES]]
116
+ ;
117
+ %data.xor = xor <vscale x 16 x i8 > %data , %key
118
+ %data.aes = tail call <vscale x 16 x i8 > @llvm.aarch64.sve.aesd (<vscale x 16 x i8 > %data.xor , <vscale x 16 x i8 > zeroinitializer )
119
+ ret <vscale x 16 x i8 > %data.aes
120
+ }
121
+
122
+ declare <vscale x 16 x i8 > @llvm.aarch64.sve.aese (<vscale x 16 x i8 >, <vscale x 16 x i8 >) #0
123
+ declare <vscale x 16 x i8 > @llvm.aarch64.sve.aesd (<vscale x 16 x i8 >, <vscale x 16 x i8 >) #0
0 commit comments