Skip to content

Commit 517e0a8

Browse files
Revert "[AArch64] Correct position of CFI Instruction for Pointer Authentication (llvm#121559)"
This reverts commit 0b73b5a.
1 parent 923a5c4 commit 517e0a8

14 files changed

+128
-130
lines changed

llvm/lib/Target/AArch64/AArch64PointerAuth.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,20 +144,20 @@ void AArch64PointerAuth::signLR(MachineFunction &MF,
144144
// No SEH opcode for this one; it doesn't materialize into an
145145
// instruction on Windows.
146146
if (MFnI.branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
147-
emitPACCFI(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameSetup, EmitCFI);
148147
BuildMI(MBB, MBBI, DL,
149148
TII->get(MFnI.shouldSignWithBKey() ? AArch64::PACIBSPPC
150149
: AArch64::PACIASPPC))
151150
.setMIFlag(MachineInstr::FrameSetup)
152151
->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
152+
emitPACCFI(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameSetup, EmitCFI);
153153
} else {
154154
BuildPACM(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameSetup);
155-
emitPACCFI(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameSetup, EmitCFI);
156155
BuildMI(MBB, MBBI, DL,
157156
TII->get(MFnI.shouldSignWithBKey() ? AArch64::PACIBSP
158157
: AArch64::PACIASP))
159158
.setMIFlag(MachineInstr::FrameSetup)
160159
->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
160+
emitPACCFI(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameSetup, EmitCFI);
161161
}
162162

163163
if (!EmitCFI && NeedsWinCFI) {
@@ -212,19 +212,19 @@ void AArch64PointerAuth::authenticateLR(
212212
if (MFnI->branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
213213
assert(PACSym && "No PAC instruction to refer to");
214214
emitPACSymOffsetIntoX16(*TII, MBB, MBBI, DL, PACSym);
215-
emitPACCFI(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameDestroy,
216-
EmitAsyncCFI);
217215
BuildMI(MBB, MBBI, DL,
218216
TII->get(UseBKey ? AArch64::AUTIBSPPCi : AArch64::AUTIASPPCi))
219217
.addSym(PACSym)
220218
.setMIFlag(MachineInstr::FrameDestroy);
221-
} else {
222-
BuildPACM(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameDestroy, PACSym);
223219
emitPACCFI(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameDestroy,
224220
EmitAsyncCFI);
221+
} else {
222+
BuildPACM(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameDestroy, PACSym);
225223
BuildMI(MBB, MBBI, DL,
226224
TII->get(UseBKey ? AArch64::AUTIBSP : AArch64::AUTIASP))
227225
.setMIFlag(MachineInstr::FrameDestroy);
226+
emitPACCFI(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameDestroy,
227+
EmitAsyncCFI);
228228
}
229229

230230
if (NeedsWinCFI) {

llvm/test/CodeGen/AArch64/machine-outliner-retaddr-sign-cfi.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ define void @a() "sign-return-address"="all" "sign-return-address-key"="b_key" {
99
; CHECK-LABEL: a: // @a
1010
; CHECK: // %bb.0:
1111
; CHECK-NEXT: .cfi_b_key_frame
12-
; CHECK-NEXT: .cfi_negate_ra_state
1312
; V8A-NEXT: hint #27
1413
; V83A-NEXT: pacibsp
14+
; CHECK-NEXT: .cfi_negate_ra_state
1515
%1 = alloca i32, align 4
1616
%2 = alloca i32, align 4
1717
%3 = alloca i32, align 4

llvm/test/CodeGen/AArch64/machine-outliner-retaddr-sign-diff-scope-same-key.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
define void @a() "sign-return-address"="all" {
77
; CHECK-LABEL: a: // @a
8-
; CHECK: .cfi_negate_ra_state
9-
; V8A-NEXT: hint #25
10-
; V83A-NEXT: paciasp
8+
; V8A: hint #25
9+
; V83A: paciasp
10+
; CHECK-NEXT: .cfi_negate_ra_state
1111
%1 = alloca i32, align 4
1212
%2 = alloca i32, align 4
1313
%3 = alloca i32, align 4
@@ -52,9 +52,9 @@ define void @b() "sign-return-address"="non-leaf" {
5252

5353
define void @c() "sign-return-address"="all" {
5454
; CHECK-LABEL: c: // @c
55-
; CHECK: .cfi_negate_ra_state
56-
; V8A-NEXT: hint #25
57-
; V83A-NEXT: paciasp
55+
; V8A: hint #25
56+
; V83A: paciasp
57+
; CHECK-NEXT .cfi_negate_ra_state
5858
%1 = alloca i32, align 4
5959
%2 = alloca i32, align 4
6060
%3 = alloca i32, align 4

llvm/test/CodeGen/AArch64/machine-outliner-retaddr-sign-non-leaf.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ define i64 @a(i64 %x) "sign-return-address"="non-leaf" "sign-return-address-key"
88
; V8A-LABEL: a:
99
; V8A: // %bb.0:
1010
; V8A-NEXT: .cfi_b_key_frame
11-
; V8A-NEXT: .cfi_negate_ra_state
1211
; V8A-NEXT: hint #27
12+
; V8A-NEXT: .cfi_negate_ra_state
1313
; V8A-NEXT: sub sp, sp, #32
1414
; V8A-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
1515
; V8A-NEXT: .cfi_def_cfa_offset 32
@@ -26,8 +26,8 @@ define i64 @a(i64 %x) "sign-return-address"="non-leaf" "sign-return-address-key"
2626
; V83A-LABEL: a:
2727
; V83A: // %bb.0:
2828
; V83A-NEXT: .cfi_b_key_frame
29-
; V83A-NEXT: .cfi_negate_ra_state
3029
; V83A-NEXT: pacibsp
30+
; V83A-NEXT: .cfi_negate_ra_state
3131
; V83A-NEXT: sub sp, sp, #32
3232
; V83A-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
3333
; V83A-NEXT: .cfi_def_cfa_offset 32
@@ -59,8 +59,8 @@ define i64 @b(i64 %x) "sign-return-address"="non-leaf" "sign-return-address-key"
5959
; V8A-LABEL: b:
6060
; V8A: // %bb.0:
6161
; V8A-NEXT: .cfi_b_key_frame
62-
; V8A-NEXT: .cfi_negate_ra_state
6362
; V8A-NEXT: hint #27
63+
; V8A-NEXT: .cfi_negate_ra_state
6464
; V8A-NEXT: sub sp, sp, #32
6565
; V8A-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
6666
; V8A-NEXT: .cfi_def_cfa_offset 32
@@ -77,8 +77,8 @@ define i64 @b(i64 %x) "sign-return-address"="non-leaf" "sign-return-address-key"
7777
; V83A-LABEL: b:
7878
; V83A: // %bb.0:
7979
; V83A-NEXT: .cfi_b_key_frame
80-
; V83A-NEXT: .cfi_negate_ra_state
8180
; V83A-NEXT: pacibsp
81+
; V83A-NEXT: .cfi_negate_ra_state
8282
; V83A-NEXT: sub sp, sp, #32
8383
; V83A-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
8484
; V83A-NEXT: .cfi_def_cfa_offset 32
@@ -110,8 +110,8 @@ define i64 @c(i64 %x) "sign-return-address"="non-leaf" "sign-return-address-key"
110110
; V8A-LABEL: c:
111111
; V8A: // %bb.0:
112112
; V8A-NEXT: .cfi_b_key_frame
113-
; V8A-NEXT: .cfi_negate_ra_state
114113
; V8A-NEXT: hint #27
114+
; V8A-NEXT: .cfi_negate_ra_state
115115
; V8A-NEXT: sub sp, sp, #32
116116
; V8A-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
117117
; V8A-NEXT: .cfi_def_cfa_offset 32
@@ -128,8 +128,8 @@ define i64 @c(i64 %x) "sign-return-address"="non-leaf" "sign-return-address-key"
128128
; V83A-LABEL: c:
129129
; V83A: // %bb.0:
130130
; V83A-NEXT: .cfi_b_key_frame
131-
; V83A-NEXT: .cfi_negate_ra_state
132131
; V83A-NEXT: pacibsp
132+
; V83A-NEXT: .cfi_negate_ra_state
133133
; V83A-NEXT: sub sp, sp, #32
134134
; V83A-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
135135
; V83A-NEXT: .cfi_def_cfa_offset 32

llvm/test/CodeGen/AArch64/machine-outliner-retaddr-sign-regsave.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ body: |
8181
# CHECK: name: bar
8282
# CHECK: bb.0:
8383
# CHECK: frame-setup EMITBKEY
84-
# CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state
8584
# CHECK-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp
85+
# CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state
8686
# CHECK-NOT: OUTLINED_FUNCTION_
8787
# CHECK: bb.1:
8888
# CHECK-NOT: OUTLINED_FUNCTION_

llvm/test/CodeGen/AArch64/machine-outliner-retaddr-sign-same-scope-diff-key.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
define void @a() "sign-return-address"="all" {
88
; V8A-LABEL: a:
99
; V8A: // %bb.0:
10-
; V8A-NEXT: .cfi_negate_ra_state
1110
; V8A-NEXT: hint #25
11+
; V8A-NEXT: .cfi_negate_ra_state
1212
; V8A-NEXT: sub sp, sp, #32
1313
; V8A-NEXT: .cfi_def_cfa_offset 32
1414
; V8A-NEXT: mov w8, #1 // =0x1
@@ -26,8 +26,8 @@ define void @a() "sign-return-address"="all" {
2626
;
2727
; V83A-LABEL: a:
2828
; V83A: // %bb.0:
29-
; V83A-NEXT: .cfi_negate_ra_state
3029
; V83A-NEXT: paciasp
30+
; V83A-NEXT: .cfi_negate_ra_state
3131
; V83A-NEXT: sub sp, sp, #32
3232
; V83A-NEXT: .cfi_def_cfa_offset 32
3333
; V83A-NEXT: mov w8, #1 // =0x1
@@ -60,8 +60,8 @@ define void @b() "sign-return-address"="all" "sign-return-address-key"="b_key" {
6060
; V8A-LABEL: b:
6161
; V8A: // %bb.0:
6262
; V8A-NEXT: .cfi_b_key_frame
63-
; V8A-NEXT: .cfi_negate_ra_state
6463
; V8A-NEXT: hint #27
64+
; V8A-NEXT: .cfi_negate_ra_state
6565
; V8A-NEXT: sub sp, sp, #32
6666
; V8A-NEXT: .cfi_def_cfa_offset 32
6767
; V8A-NEXT: mov w8, #1 // =0x1
@@ -80,8 +80,8 @@ define void @b() "sign-return-address"="all" "sign-return-address-key"="b_key" {
8080
; V83A-LABEL: b:
8181
; V83A: // %bb.0:
8282
; V83A-NEXT: .cfi_b_key_frame
83-
; V83A-NEXT: .cfi_negate_ra_state
8483
; V83A-NEXT: pacibsp
84+
; V83A-NEXT: .cfi_negate_ra_state
8585
; V83A-NEXT: sub sp, sp, #32
8686
; V83A-NEXT: .cfi_def_cfa_offset 32
8787
; V83A-NEXT: mov w8, #1 // =0x1
@@ -113,8 +113,8 @@ define void @b() "sign-return-address"="all" "sign-return-address-key"="b_key" {
113113
define void @c() "sign-return-address"="all" {
114114
; V8A-LABEL: c:
115115
; V8A: // %bb.0:
116-
; V8A-NEXT: .cfi_negate_ra_state
117116
; V8A-NEXT: hint #25
117+
; V8A-NEXT: .cfi_negate_ra_state
118118
; V8A-NEXT: sub sp, sp, #32
119119
; V8A-NEXT: .cfi_def_cfa_offset 32
120120
; V8A-NEXT: mov w8, #1 // =0x1
@@ -132,8 +132,8 @@ define void @c() "sign-return-address"="all" {
132132
;
133133
; V83A-LABEL: c:
134134
; V83A: // %bb.0:
135-
; V83A-NEXT: .cfi_negate_ra_state
136135
; V83A-NEXT: paciasp
136+
; V83A-NEXT: .cfi_negate_ra_state
137137
; V83A-NEXT: sub sp, sp, #32
138138
; V83A-NEXT: .cfi_def_cfa_offset 32
139139
; V83A-NEXT: mov w8, #1 // =0x1

llvm/test/CodeGen/AArch64/machine-outliner-retaddr-sign-sp-mod.mir

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ body: |
8686
# CHECK: body: |
8787
# CHECK-NEXT: bb.0 (%ir-block.0):
8888
# CHECK-NEXT: liveins: $lr
89-
# CHECK: frame-setup CFI_INSTRUCTION negate_ra_sign_state
90-
# CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
89+
# CHECK: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
90+
# CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state
9191
# CHECK: BL @[[OUTLINED_FUNC:OUTLINED_FUNCTION_[0-9]+]]
92-
# CHECK: frame-destroy CFI_INSTRUCTION negate_ra_sign_state
93-
# CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
92+
# CHECK: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
93+
# CHECK-NEXT: frame-destroy CFI_INSTRUCTION negate_ra_sign_state
9494
# CHECK-NEXT: RET undef $lr
9595

9696
...
@@ -119,11 +119,11 @@ body: |
119119
# CHECK: body: |
120120
# CHECK-NEXT: bb.0 (%ir-block.0):
121121
# CHECK-NEXT: liveins: $lr
122-
# CHECK: frame-setup CFI_INSTRUCTION negate_ra_sign_state
123-
# CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
122+
# CHECK: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
123+
# CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state
124124
# CHECK: BL @[[OUTLINED_FUNC]]
125-
# CHECK: frame-destroy CFI_INSTRUCTION negate_ra_sign_state
126-
# CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
125+
# CHECK: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
126+
# CHECK-NEXT: frame-destroy CFI_INSTRUCTION negate_ra_sign_state
127127
# CHECK-NEXT: RET undef $lr
128128

129129
...
@@ -174,22 +174,22 @@ body: |
174174
# CHECK: body: |
175175
# CHECK-NEXT: bb.0 (%ir-block.0):
176176
# CHECK-NEXT: liveins: $lr
177-
# CHECK: frame-setup CFI_INSTRUCTION negate_ra_sign_state
178-
# CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
177+
# CHECK: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
178+
# CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state
179179
# CHECK-NOT: BL @OUTLINED_FUNCTION_{{.*}}
180-
# CHECK: frame-destroy CFI_INSTRUCTION negate_ra_sign_state
181-
# CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
180+
# CHECK: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
181+
# CHECK-NEXT: frame-destroy CFI_INSTRUCTION negate_ra_sign_state
182182
# CHECK-NEXT: RET undef $lr
183183

184184
# CHECK-LABEL: name: illegal1
185185
# CHECK: body: |
186186
# CHECK-NEXT: bb.0 (%ir-block.0):
187187
# CHECK-NEXT: liveins: $lr
188-
# CHECK: frame-setup CFI_INSTRUCTION negate_ra_sign_state
189-
# CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
188+
# CHECK: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
189+
# CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state
190190
# CHECK-NOT: BL @OUTLINED_FUNCTION_{{.*}}
191-
# CHECK: frame-destroy CFI_INSTRUCTION negate_ra_sign_state
192-
# CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
191+
# CHECK: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
192+
# CHECK-NEXT: frame-destroy CFI_INSTRUCTION negate_ra_sign_state
193193
# CHECK-NEXT: RET undef $lr
194194

195195
# Outlined function that contains only legal sp modifications
@@ -198,8 +198,8 @@ body: |
198198
# CHECK-NEXT: bb.0:
199199
# CHECK-NEXT: liveins: $lr
200200
# CHECK-NEXT: {{^ $}}
201-
# CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state
202201
# CHECK-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp
202+
# CHECK-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state
203203
# CHECK-NEXT: $sp = frame-setup SUBXri $sp, 16, 0
204204
# CHECK: $sp = frame-destroy ADDXri $sp, 16, 0
205205
# CHECK-NEXT: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp

llvm/test/CodeGen/AArch64/machine-outliner-retaddr-sign-subtarget.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ define void @a() #0 {
99
; CHECK-LABEL: a: // @a
1010
; CHECK: // %bb.0:
1111
; CHECK-NEXT: .cfi_b_key_frame
12-
; CHECK-NEXT: .cfi_negate_ra_state
1312
; CHECK-NEXT: pacibsp
13+
; CHECK-NEXT: .cfi_negate_ra_state
1414
; CHECK-NOT: OUTLINED_FUNCTION_
1515
%1 = alloca i32, align 4
1616
%2 = alloca i32, align 4
@@ -33,8 +33,8 @@ define void @b() #0 {
3333
; CHECK-LABEL: b: // @b
3434
; CHECK: // %bb.0:
3535
; CHECK-NEXT: .cfi_b_key_frame
36-
; CHECK-NEXT: .cfi_negate_ra_state
3736
; CHECK-NEXT: pacibsp
37+
; CHECK-NEXT: .cfi_negate_ra_state
3838
; CHECK-NOT: OUTLINED_FUNCTION_
3939
%1 = alloca i32, align 4
4040
%2 = alloca i32, align 4
@@ -57,8 +57,8 @@ define void @c() #1 {
5757
; CHECK-LABEL: c: // @c
5858
; CHECK: // %bb.0:
5959
; CHECK-NEXT: .cfi_b_key_frame
60-
; CHECK-NEXT: .cfi_negate_ra_state
6160
; CHECK-NEXT: hint #27
61+
; CHECK-NEXT: .cfi_negate_ra_state
6262
; CHECK-NOT: OUTLINED_FUNCTION_
6363
%1 = alloca i32, align 4
6464
%2 = alloca i32, align 4

0 commit comments

Comments
 (0)