Skip to content

Commit 5f05839

Browse files
committed
[ARM] Mark AESD and AESE instructions as commutative.
Similar to #83390, this marks AESD and AESE as commutative, as the logic of the instructions starts as a XOR between the two operands.
1 parent 03f150b commit 5f05839

File tree

3 files changed

+65
-22
lines changed

3 files changed

+65
-22
lines changed

llvm/lib/Target/ARM/ARMInstrNEON.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7362,8 +7362,10 @@ let PostEncoderMethod = "NEONThumb2DataIPostEncoder",
73627362
}
73637363

73647364
let Predicates = [HasV8, HasAES] in {
7365+
let isCommutable = 1 in {
73657366
def AESD : AES2Op<"d", 0, 1, int_arm_neon_aesd>;
73667367
def AESE : AES2Op<"e", 0, 0, int_arm_neon_aese>;
7368+
}
73677369
def AESIMC : AES<"imc", 1, 1, int_arm_neon_aesimc>;
73687370
def AESMC : AES<"mc", 1, 0, int_arm_neon_aesmc>;
73697371
}

llvm/test/CodeGen/ARM/aes-erratum-fix.ll

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ define arm_aapcs_vfpcc void @aese_via_call1(ptr %0) nounwind {
4949
; CHECK-FIX-NEXT: bl get_input
5050
; CHECK-FIX-NEXT: vorr q0, q0, q0
5151
; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]
52-
; CHECK-FIX-NEXT: aese.8 q0, q8
53-
; CHECK-FIX-NEXT: aesmc.8 q8, q0
52+
; CHECK-FIX-NEXT: aese.8 q8, q0
53+
; CHECK-FIX-NEXT: aesmc.8 q8, q8
5454
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]
5555
; CHECK-FIX-NEXT: pop {r4, pc}
5656
%2 = call arm_aapcs_vfpcc <16 x i8> @get_input()
@@ -70,8 +70,8 @@ define arm_aapcs_vfpcc void @aese_via_call2(half %0, ptr %1) nounwind {
7070
; CHECK-FIX-NEXT: bl get_inputf16
7171
; CHECK-FIX-NEXT: vorr q0, q0, q0
7272
; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]
73-
; CHECK-FIX-NEXT: aese.8 q0, q8
74-
; CHECK-FIX-NEXT: aesmc.8 q8, q0
73+
; CHECK-FIX-NEXT: aese.8 q8, q0
74+
; CHECK-FIX-NEXT: aesmc.8 q8, q8
7575
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]
7676
; CHECK-FIX-NEXT: pop {r4, pc}
7777
%3 = call arm_aapcs_vfpcc <16 x i8> @get_inputf16(half %0)
@@ -91,8 +91,8 @@ define arm_aapcs_vfpcc void @aese_via_call3(float %0, ptr %1) nounwind {
9191
; CHECK-FIX-NEXT: bl get_inputf32
9292
; CHECK-FIX-NEXT: vorr q0, q0, q0
9393
; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]
94-
; CHECK-FIX-NEXT: aese.8 q0, q8
95-
; CHECK-FIX-NEXT: aesmc.8 q8, q0
94+
; CHECK-FIX-NEXT: aese.8 q8, q0
95+
; CHECK-FIX-NEXT: aesmc.8 q8, q8
9696
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]
9797
; CHECK-FIX-NEXT: pop {r4, pc}
9898
%3 = call arm_aapcs_vfpcc <16 x i8> @get_inputf32(float %0)
@@ -123,10 +123,10 @@ define arm_aapcs_vfpcc void @aese_once_via_ptr(ptr %0, ptr %1) nounwind {
123123
define arm_aapcs_vfpcc <16 x i8> @aese_once_via_val(<16 x i8> %0, <16 x i8> %1) nounwind {
124124
; CHECK-FIX-LABEL: aese_once_via_val:
125125
; CHECK-FIX: @ %bb.0:
126-
; CHECK-FIX-NEXT: vorr q1, q1, q1
127126
; CHECK-FIX-NEXT: vorr q0, q0, q0
128-
; CHECK-FIX-NEXT: aese.8 q1, q0
129-
; CHECK-FIX-NEXT: aesmc.8 q0, q1
127+
; CHECK-FIX-NEXT: vorr q1, q1, q1
128+
; CHECK-FIX-NEXT: aese.8 q0, q1
129+
; CHECK-FIX-NEXT: aesmc.8 q0, q0
130130
; CHECK-FIX-NEXT: bx lr
131131
%3 = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %1, <16 x i8> %0)
132132
%4 = call <16 x i8> @llvm.arm.neon.aesmc(<16 x i8> %3)
@@ -142,8 +142,8 @@ define arm_aapcs_vfpcc void @aese_twice_via_ptr(ptr %0, ptr %1) nounwind {
142142
; CHECK-FIX-NEXT: aesmc.8 q8, q9
143143
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]
144144
; CHECK-FIX-NEXT: vld1.64 {d18, d19}, [r0]
145-
; CHECK-FIX-NEXT: aese.8 q8, q9
146-
; CHECK-FIX-NEXT: aesmc.8 q8, q8
145+
; CHECK-FIX-NEXT: aese.8 q9, q8
146+
; CHECK-FIX-NEXT: aesmc.8 q8, q9
147147
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]
148148
; CHECK-FIX-NEXT: bx lr
149149
%3 = load <16 x i8>, ptr %1, align 8
@@ -2202,8 +2202,8 @@ define arm_aapcs_vfpcc void @aesd_via_call1(ptr %0) nounwind {
22022202
; CHECK-FIX-NEXT: bl get_input
22032203
; CHECK-FIX-NEXT: vorr q0, q0, q0
22042204
; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]
2205-
; CHECK-FIX-NEXT: aesd.8 q0, q8
2206-
; CHECK-FIX-NEXT: aesimc.8 q8, q0
2205+
; CHECK-FIX-NEXT: aesd.8 q8, q0
2206+
; CHECK-FIX-NEXT: aesimc.8 q8, q8
22072207
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]
22082208
; CHECK-FIX-NEXT: pop {r4, pc}
22092209
%2 = call arm_aapcs_vfpcc <16 x i8> @get_input()
@@ -2223,8 +2223,8 @@ define arm_aapcs_vfpcc void @aesd_via_call2(half %0, ptr %1) nounwind {
22232223
; CHECK-FIX-NEXT: bl get_inputf16
22242224
; CHECK-FIX-NEXT: vorr q0, q0, q0
22252225
; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]
2226-
; CHECK-FIX-NEXT: aesd.8 q0, q8
2227-
; CHECK-FIX-NEXT: aesimc.8 q8, q0
2226+
; CHECK-FIX-NEXT: aesd.8 q8, q0
2227+
; CHECK-FIX-NEXT: aesimc.8 q8, q8
22282228
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]
22292229
; CHECK-FIX-NEXT: pop {r4, pc}
22302230
%3 = call arm_aapcs_vfpcc <16 x i8> @get_inputf16(half %0)
@@ -2244,8 +2244,8 @@ define arm_aapcs_vfpcc void @aesd_via_call3(float %0, ptr %1) nounwind {
22442244
; CHECK-FIX-NEXT: bl get_inputf32
22452245
; CHECK-FIX-NEXT: vorr q0, q0, q0
22462246
; CHECK-FIX-NEXT: vld1.64 {d16, d17}, [r4]
2247-
; CHECK-FIX-NEXT: aesd.8 q0, q8
2248-
; CHECK-FIX-NEXT: aesimc.8 q8, q0
2247+
; CHECK-FIX-NEXT: aesd.8 q8, q0
2248+
; CHECK-FIX-NEXT: aesimc.8 q8, q8
22492249
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r4]
22502250
; CHECK-FIX-NEXT: pop {r4, pc}
22512251
%3 = call arm_aapcs_vfpcc <16 x i8> @get_inputf32(float %0)
@@ -2276,10 +2276,10 @@ define arm_aapcs_vfpcc void @aesd_once_via_ptr(ptr %0, ptr %1) nounwind {
22762276
define arm_aapcs_vfpcc <16 x i8> @aesd_once_via_val(<16 x i8> %0, <16 x i8> %1) nounwind {
22772277
; CHECK-FIX-LABEL: aesd_once_via_val:
22782278
; CHECK-FIX: @ %bb.0:
2279-
; CHECK-FIX-NEXT: vorr q1, q1, q1
22802279
; CHECK-FIX-NEXT: vorr q0, q0, q0
2281-
; CHECK-FIX-NEXT: aesd.8 q1, q0
2282-
; CHECK-FIX-NEXT: aesimc.8 q0, q1
2280+
; CHECK-FIX-NEXT: vorr q1, q1, q1
2281+
; CHECK-FIX-NEXT: aesd.8 q0, q1
2282+
; CHECK-FIX-NEXT: aesimc.8 q0, q0
22832283
; CHECK-FIX-NEXT: bx lr
22842284
%3 = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %1, <16 x i8> %0)
22852285
%4 = call <16 x i8> @llvm.arm.neon.aesimc(<16 x i8> %3)
@@ -2295,8 +2295,8 @@ define arm_aapcs_vfpcc void @aesd_twice_via_ptr(ptr %0, ptr %1) nounwind {
22952295
; CHECK-FIX-NEXT: aesimc.8 q8, q9
22962296
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]
22972297
; CHECK-FIX-NEXT: vld1.64 {d18, d19}, [r0]
2298-
; CHECK-FIX-NEXT: aesd.8 q8, q9
2299-
; CHECK-FIX-NEXT: aesimc.8 q8, q8
2298+
; CHECK-FIX-NEXT: aesd.8 q9, q8
2299+
; CHECK-FIX-NEXT: aesimc.8 q8, q9
23002300
; CHECK-FIX-NEXT: vst1.64 {d16, d17}, [r1]
23012301
; CHECK-FIX-NEXT: bx lr
23022302
%3 = load <16 x i8>, ptr %1, align 8

llvm/test/CodeGen/ARM/aes.ll

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2+
; RUN: llc %s -o - -mtriple=armv8-none-eabi -mattr=+aes | FileCheck %s
3+
4+
declare <16 x i8> @llvm.arm.neon.aese(<16 x i8> %d, <16 x i8> %k)
5+
declare <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %d, <16 x i8> %k)
6+
7+
define arm_aapcs_vfpcc <16 x i8> @aese(<16 x i8> %a, <16 x i8> %b) {
8+
; CHECK-LABEL: aese:
9+
; CHECK: @ %bb.0:
10+
; CHECK-NEXT: aese.8 q0, q1
11+
; CHECK-NEXT: bx lr
12+
%r = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %a, <16 x i8> %b)
13+
ret <16 x i8> %r
14+
}
15+
16+
define arm_aapcs_vfpcc <16 x i8> @aese_c(<16 x i8> %a, <16 x i8> %b) {
17+
; CHECK-LABEL: aese_c:
18+
; CHECK: @ %bb.0:
19+
; CHECK-NEXT: aese.8 q0, q1
20+
; CHECK-NEXT: bx lr
21+
%r = call <16 x i8> @llvm.arm.neon.aese(<16 x i8> %b, <16 x i8> %a)
22+
ret <16 x i8> %r
23+
}
24+
25+
define arm_aapcs_vfpcc <16 x i8> @aesd(<16 x i8> %a, <16 x i8> %b) {
26+
; CHECK-LABEL: aesd:
27+
; CHECK: @ %bb.0:
28+
; CHECK-NEXT: aesd.8 q0, q1
29+
; CHECK-NEXT: bx lr
30+
%r = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %a, <16 x i8> %b)
31+
ret <16 x i8> %r
32+
}
33+
34+
define arm_aapcs_vfpcc <16 x i8> @aesd_c(<16 x i8> %a, <16 x i8> %b) {
35+
; CHECK-LABEL: aesd_c:
36+
; CHECK: @ %bb.0:
37+
; CHECK-NEXT: aesd.8 q0, q1
38+
; CHECK-NEXT: bx lr
39+
%r = call <16 x i8> @llvm.arm.neon.aesd(<16 x i8> %b, <16 x i8> %a)
40+
ret <16 x i8> %r
41+
}

0 commit comments

Comments
 (0)