1
- ; RUN: llc %s -o - -mtriple=aarch64-unknown -mattr=+fuse-aes,+crypto | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSEALLPAIRS
2
- ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=generic -mattr=+crypto | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSEALLPAIRS
3
- ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=cortex-a53 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSEALLPAIRS
4
- ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=cortex-a57 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSEALLPAIRS
5
- ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=cortex-a72 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSEALLPAIRS
6
- ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=cortex-a73 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKFUSEALLPAIRS
7
- ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m1 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECKM1
1
+ ; RUN: llc %s -o - -mtriple=aarch64-unknown -mattr=+fuse-aes,+crypto | FileCheck %s
2
+ ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=generic -mattr=+crypto | FileCheck %s
3
+ ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=cortex-a53 | FileCheck %s
4
+ ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=cortex-a57 | FileCheck %s
5
+ ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=cortex-a72 | FileCheck %s
6
+ ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=cortex-a73 | FileCheck %s
7
+ ; RUN: llc %s -o - -mtriple=aarch64-unknown -mcpu=exynos-m1 | FileCheck %s
8
8
9
9
declare <16 x i8 > @llvm.aarch64.crypto.aese (<16 x i8 > %d , <16 x i8 > %k )
10
10
declare <16 x i8 > @llvm.aarch64.crypto.aesmc (<16 x i8 > %d )
@@ -76,41 +76,23 @@ define void @aesea(<16 x i8>* %a0, <16 x i8>* %b0, <16 x i8>* %c0, <16 x i8> %d,
76
76
ret void
77
77
78
78
; CHECK-LABEL: aesea:
79
- ; CHECKFUSEALLPAIRS: aese [[VA:v[0-7].16b]], {{v[0-7].16b}}
80
- ; CHECKFUSEALLPAIRS-NEXT: aesmc {{v[0-7].16b}}, [[VA]]
81
- ; CHECKFUSEALLPAIRS: aese [[VB:v[0-7].16b]], {{v[0-7].16b}}
82
- ; CHECKFUSEALLPAIRS-NEXT: aesmc {{v[0-7].16b}}, [[VB]]
83
- ; CHECKFUSEALLPAIRS: aese [[VC:v[0-7].16b]], {{v[0-7].16b}}
84
- ; CHECKFUSEALLPAIRS-NEXT: aesmc {{v[0-7].16b}}, [[VC]]
85
- ; CHECKFUSEALLPAIRS: aese [[VD:v[0-7].16b]], {{v[0-7].16b}}
86
- ; CHECKFUSEALLPAIRS-NEXT: aesmc {{v[0-7].16b}}, [[VD]]
87
- ; CHECKFUSEALLPAIRS: aese [[VE:v[0-7].16b]], {{v[0-7].16b}}
88
- ; CHECKFUSEALLPAIRS-NEXT: aesmc {{v[0-7].16b}}, [[VE]]
89
- ; CHECKFUSEALLPAIRS: aese [[VF:v[0-7].16b]], {{v[0-7].16b}}
90
- ; CHECKFUSEALLPAIRS-NEXT: aesmc {{v[0-7].16b}}, [[VF]]
91
- ; CHECKFUSEALLPAIRS: aese [[VG:v[0-7].16b]], {{v[0-7].16b}}
92
- ; CHECKFUSEALLPAIRS-NEXT: aesmc {{v[0-7].16b}}, [[VG]]
93
- ; CHECKFUSEALLPAIRS: aese [[VH:v[0-7].16b]], {{v[0-7].16b}}
94
- ; CHECKFUSEALLPAIRS-NEXT: aesmc {{v[0-7].16b}}, [[VH]]
95
- ; CHECKFUSEALLPAIRS-NOT: aesmc
96
-
97
- ; CHECKM1: aese [[VA:v[0-7].16b]], {{v[0-7].16b}}
98
- ; CHECKM1-NEXT: aesmc {{v[0-7].16b}}, [[VA]]
99
- ; CHECKM1: aese [[VH:v[0-7].16b]], {{v[0-7].16b}}
100
- ; CHECKM1: aese [[VB:v[0-7].16b]], {{v[0-7].16b}}
101
- ; CHECKM1-NEXT: aesmc {{v[0-7].16b}}, [[VB]]
102
- ; CHECKM1: aese {{v[0-7].16b}}, {{v[0-7].16b}}
103
- ; CHECKM1: aese [[VC:v[0-7].16b]], {{v[0-7].16b}}
104
- ; CHECKM1-NEXT: aesmc {{v[0-7].16b}}, [[VC]]
105
- ; CHECKM1: aese [[VD:v[0-7].16b]], {{v[0-7].16b}}
106
- ; CHECKM1-NEXT: aesmc {{v[0-7].16b}}, [[VD]]
107
- ; CHECKM1: aesmc {{v[0-7].16b}}, [[VH]]
108
- ; CHECKM1: aese [[VE:v[0-7].16b]], {{v[0-7].16b}}
109
- ; CHECKM1-NEXT: aesmc {{v[0-7].16b}}, [[VE]]
110
- ; CHECKM1: aese [[VF:v[0-7].16b]], {{v[0-7].16b}}
111
- ; CHECKM1-NEXT: aesmc {{v[0-7].16b}}, [[VF]]
112
- ; CHECKM1: aese [[VG:v[0-7].16b]], {{v[0-7].16b}}
113
- ; CHECKM1-NEXT: aesmc {{v[0-7].16b}}, [[VG]]
79
+ ; CHECK: aese [[VA:v[0-7].16b]], {{v[0-7].16b}}
80
+ ; CHECK-NEXT: aesmc [[VA]], [[VA]]
81
+ ; CHECK: aese [[VB:v[0-7].16b]], {{v[0-7].16b}}
82
+ ; CHECK-NEXT: aesmc [[VB]], [[VB]]
83
+ ; CHECK: aese [[VC:v[0-7].16b]], {{v[0-7].16b}}
84
+ ; CHECK-NEXT: aesmc [[VC]], [[VC]]
85
+ ; CHECK: aese [[VD:v[0-7].16b]], {{v[0-7].16b}}
86
+ ; CHECK-NEXT: aesmc [[VD]], [[VD]]
87
+ ; CHECK: aese [[VE:v[0-7].16b]], {{v[0-7].16b}}
88
+ ; CHECK-NEXT: aesmc [[VE]], [[VE]]
89
+ ; CHECK: aese [[VF:v[0-7].16b]], {{v[0-7].16b}}
90
+ ; CHECK-NEXT: aesmc [[VF]], [[VF]]
91
+ ; CHECK: aese [[VG:v[0-7].16b]], {{v[0-7].16b}}
92
+ ; CHECK-NEXT: aesmc [[VG]], [[VG]]
93
+ ; CHECK: aese [[VH:v[0-7].16b]], {{v[0-7].16b}}
94
+ ; CHECK-NEXT: aesmc [[VH]], [[VH]]
95
+ ; CHECK-NOT: aesmc
114
96
}
115
97
116
98
define void @aesda (<16 x i8 >* %a0 , <16 x i8 >* %b0 , <16 x i8 >* %c0 , <16 x i8 > %d , <16 x i8 > %e ) {
@@ -178,41 +160,23 @@ define void @aesda(<16 x i8>* %a0, <16 x i8>* %b0, <16 x i8>* %c0, <16 x i8> %d,
178
160
ret void
179
161
180
162
; CHECK-LABEL: aesda:
181
- ; CHECKFUSEALLPAIRS: aesd [[VA:v[0-7].16b]], {{v[0-7].16b}}
182
- ; CHECKFUSEALLPAIRS-NEXT: aesimc {{v[0-7].16b}}, [[VA]]
183
- ; CHECKFUSEALLPAIRS: aesd [[VB:v[0-7].16b]], {{v[0-7].16b}}
184
- ; CHECKFUSEALLPAIRS-NEXT: aesimc {{v[0-7].16b}}, [[VB]]
185
- ; CHECKFUSEALLPAIRS: aesd [[VC:v[0-7].16b]], {{v[0-7].16b}}
186
- ; CHECKFUSEALLPAIRS-NEXT: aesimc {{v[0-7].16b}}, [[VC]]
187
- ; CHECKFUSEALLPAIRS: aesd [[VD:v[0-7].16b]], {{v[0-7].16b}}
188
- ; CHECKFUSEALLPAIRS-NEXT: aesimc {{v[0-7].16b}}, [[VD]]
189
- ; CHECKFUSEALLPAIRS: aesd [[VE:v[0-7].16b]], {{v[0-7].16b}}
190
- ; CHECKFUSEALLPAIRS-NEXT: aesimc {{v[0-7].16b}}, [[VE]]
191
- ; CHECKFUSEALLPAIRS: aesd [[VF:v[0-7].16b]], {{v[0-7].16b}}
192
- ; CHECKFUSEALLPAIRS-NEXT: aesimc {{v[0-7].16b}}, [[VF]]
193
- ; CHECKFUSEALLPAIRS: aesd [[VG:v[0-7].16b]], {{v[0-7].16b}}
194
- ; CHECKFUSEALLPAIRS-NEXT: aesimc {{v[0-7].16b}}, [[VG]]
195
- ; CHECKFUSEALLPAIRS: aesd [[VH:v[0-7].16b]], {{v[0-7].16b}}
196
- ; CHECKFUSEALLPAIRS-NEXT: aesimc {{v[0-7].16b}}, [[VH]]
197
- ; CHECKFUSEALLPAIRS-NOT: aesimc
198
-
199
- ; CHECKM1: aesd [[VA:v[0-7].16b]], {{v[0-7].16b}}
200
- ; CHECKM1-NEXT: aesimc {{v[0-7].16b}}, [[VA]]
201
- ; CHECKM1: aesd [[VH:v[0-7].16b]], {{v[0-7].16b}}
202
- ; CHECKM1: aesd [[VB:v[0-7].16b]], {{v[0-7].16b}}
203
- ; CHECKM1-NEXT: aesimc {{v[0-7].16b}}, [[VB]]
204
- ; CHECKM1: aesd {{v[0-7].16b}}, {{v[0-7].16b}}
205
- ; CHECKM1: aesd [[VC:v[0-7].16b]], {{v[0-7].16b}}
206
- ; CHECKM1-NEXT: aesimc {{v[0-7].16b}}, [[VC]]
207
- ; CHECKM1: aesd [[VD:v[0-7].16b]], {{v[0-7].16b}}
208
- ; CHECKM1-NEXT: aesimc {{v[0-7].16b}}, [[VD]]
209
- ; CHECKM1: aesimc {{v[0-7].16b}}, [[VH]]
210
- ; CHECKM1: aesd [[VE:v[0-7].16b]], {{v[0-7].16b}}
211
- ; CHECKM1-NEXT: aesimc {{v[0-7].16b}}, [[VE]]
212
- ; CHECKM1: aesd [[VF:v[0-7].16b]], {{v[0-7].16b}}
213
- ; CHECKM1-NEXT: aesimc {{v[0-7].16b}}, [[VF]]
214
- ; CHECKM1: aesd [[VG:v[0-7].16b]], {{v[0-7].16b}}
215
- ; CHECKM1-NEXT: aesimc {{v[0-7].16b}}, [[VG]]
163
+ ; CHECK: aesd [[VA:v[0-7].16b]], {{v[0-7].16b}}
164
+ ; CHECK-NEXT: aesimc [[VA]], [[VA]]
165
+ ; CHECK: aesd [[VB:v[0-7].16b]], {{v[0-7].16b}}
166
+ ; CHECK-NEXT: aesimc [[VB]], [[VB]]
167
+ ; CHECK: aesd [[VC:v[0-7].16b]], {{v[0-7].16b}}
168
+ ; CHECK-NEXT: aesimc [[VC]], [[VC]]
169
+ ; CHECK: aesd [[VD:v[0-7].16b]], {{v[0-7].16b}}
170
+ ; CHECK-NEXT: aesimc [[VD]], [[VD]]
171
+ ; CHECK: aesd [[VE:v[0-7].16b]], {{v[0-7].16b}}
172
+ ; CHECK-NEXT: aesimc [[VE]], [[VE]]
173
+ ; CHECK: aesd [[VF:v[0-7].16b]], {{v[0-7].16b}}
174
+ ; CHECK-NEXT: aesimc [[VF]], [[VF]]
175
+ ; CHECK: aesd [[VG:v[0-7].16b]], {{v[0-7].16b}}
176
+ ; CHECK-NEXT: aesimc [[VG]], [[VG]]
177
+ ; CHECK: aesd [[VH:v[0-7].16b]], {{v[0-7].16b}}
178
+ ; CHECK-NEXT: aesimc [[VH]], [[VH]]
179
+ ; CHECK-NOT: aesimc
216
180
}
217
181
218
182
define void @aes_load_store (<16 x i8 > *%p1 , <16 x i8 > *%p2 , <16 x i8 > *%p3 ) {
@@ -225,20 +189,20 @@ entry:
225
189
%in1 = load <16 x i8 >, <16 x i8 >* %p1 , align 16
226
190
store <16 x i8 > %in1 , <16 x i8 >* %x1 , align 16
227
191
%aese1 = call <16 x i8 > @llvm.aarch64.crypto.aese (<16 x i8 > %in1 , <16 x i8 > %in1 ) #2
228
- store <16 x i8 > %aese1 , <16 x i8 >* %x2 , align 16
229
192
%in2 = load <16 x i8 >, <16 x i8 >* %p2 , align 16
230
193
%aesmc1 = call <16 x i8 > @llvm.aarch64.crypto.aesmc (<16 x i8 > %aese1 ) #2
231
- store <16 x i8 > %aesmc1 , <16 x i8 >* %x3 , align 16
232
194
%aese2 = call <16 x i8 > @llvm.aarch64.crypto.aese (<16 x i8 > %in1 , <16 x i8 > %in2 ) #2
233
- store <16 x i8 > %aese2 , <16 x i8 >* %x4 , align 16
195
+ store <16 x i8 > %aesmc1 , <16 x i8 >* %x3 , align 16
196
+ %in3 = load <16 x i8 >, <16 x i8 >* %p3 , align 16
234
197
%aesmc2 = call <16 x i8 > @llvm.aarch64.crypto.aesmc (<16 x i8 > %aese2 ) #2
235
- store <16 x i8 > %aesmc2 , <16 x i8 >* %x5 , align 16
198
+ %aese3 = call <16 x i8 > @llvm.aarch64.crypto.aese (<16 x i8 > %aesmc2 , <16 x i8 > %in3 ) #2
199
+ store <16 x i8 > %aese3 , <16 x i8 >* %x5 , align 16
236
200
ret void
237
201
238
202
; CHECK-LABEL: aes_load_store:
239
203
; CHECK: aese [[VA:v[0-7].16b]], {{v[0-7].16b}}
240
- ; CHECK-NEXT: aesmc {{v[0-7].16b}} , [[VA]]
204
+ ; CHECK-NEXT: aesmc [[VA]] , [[VA]]
241
205
; CHECK: aese [[VB:v[0-7].16b]], {{v[0-7].16b}}
242
- ; CHECK-NEXT: aesmc {{v[0-7].16b}} , [[VB]]
206
+ ; CHECK-NEXT: aesmc [[VB]] , [[VB]]
243
207
; CHECK-NOT: aesmc
244
208
}
0 commit comments