Skip to content

Commit 4cc152c

Browse files
[AArch64] Correct position of CFI Instruction for Pointer Authentication (#137795)
This reverts partially this commit 0b73b5a. This is not a clear revert because other changes already landed. CFI directives like `.cfi_negate_ra_state` must be emitted after the instruction. If the execution is stopped before the `paciasp` instruction is executed the debugger/unwinder would try to authenticated the return address as the `.cfi_negate_ra_state` already indicates it got signed. fixes: #137802
1 parent 703b479 commit 4cc152c

13 files changed

+94
-90
lines changed

llvm/lib/Target/AArch64/AArch64PointerAuth.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,15 @@ void AArch64PointerAuth::signLR(MachineFunction &MF,
139139
->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
140140
} else {
141141
BuildPACM(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameSetup);
142-
emitPACCFI(MBB, MBBI, MachineInstr::FrameSetup, EmitCFI);
142+
if (MFnI.branchProtectionPAuthLR())
143+
emitPACCFI(MBB, MBBI, MachineInstr::FrameSetup, EmitCFI);
143144
BuildMI(MBB, MBBI, DL,
144145
TII->get(MFnI.shouldSignWithBKey() ? AArch64::PACIBSP
145146
: AArch64::PACIASP))
146147
.setMIFlag(MachineInstr::FrameSetup)
147148
->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
149+
if (!MFnI.branchProtectionPAuthLR())
150+
emitPACCFI(MBB, MBBI, MachineInstr::FrameSetup, EmitCFI);
148151
}
149152

150153
if (!EmitCFI && NeedsWinCFI) {
@@ -206,10 +209,13 @@ void AArch64PointerAuth::authenticateLR(
206209
.setMIFlag(MachineInstr::FrameDestroy);
207210
} else {
208211
BuildPACM(*Subtarget, MBB, MBBI, DL, MachineInstr::FrameDestroy, PACSym);
209-
emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
212+
if (MFnI->branchProtectionPAuthLR())
213+
emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
210214
BuildMI(MBB, MBBI, DL,
211215
TII->get(UseBKey ? AArch64::AUTIBSP : AArch64::AUTIASP))
212216
.setMIFlag(MachineInstr::FrameDestroy);
217+
if (!MFnI->branchProtectionPAuthLR())
218+
emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
213219
}
214220

215221
if (NeedsWinCFI) {

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

+1-1
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

+6-6
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

+6-6
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

+1-1
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

+6-6
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

+17-17
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

+3-3
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

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

+8-10
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ declare i32 @thunk_called_fn(i32, i32, i32, i32)
1010
define i32 @a() #0 {
1111
; V8A-LABEL: a:
1212
; V8A: // %bb.0: // %entry
13-
; V8A-NEXT: .cfi_negate_ra_state
1413
; V8A-NEXT: hint #25
14+
; V8A-NEXT: .cfi_negate_ra_state
1515
; V8A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
1616
; V8A-NEXT: .cfi_def_cfa_offset 16
1717
; V8A-NEXT: .cfi_offset w30, -16
@@ -27,8 +27,8 @@ define i32 @a() #0 {
2727
;
2828
; V83A-LABEL: a:
2929
; V83A: // %bb.0: // %entry
30-
; V83A-NEXT: .cfi_negate_ra_state
3130
; V83A-NEXT: paciasp
31+
; V83A-NEXT: .cfi_negate_ra_state
3232
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
3333
; V83A-NEXT: .cfi_def_cfa_offset 16
3434
; V83A-NEXT: .cfi_offset w30, -16
@@ -49,8 +49,8 @@ entry:
4949
define i32 @b() #0 {
5050
; V8A-LABEL: b:
5151
; V8A: // %bb.0: // %entry
52-
; V8A-NEXT: .cfi_negate_ra_state
5352
; V8A-NEXT: hint #25
53+
; V8A-NEXT: .cfi_negate_ra_state
5454
; V8A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
5555
; V8A-NEXT: .cfi_def_cfa_offset 16
5656
; V8A-NEXT: .cfi_offset w30, -16
@@ -66,8 +66,8 @@ define i32 @b() #0 {
6666
;
6767
; V83A-LABEL: b:
6868
; V83A: // %bb.0: // %entry
69-
; V83A-NEXT: .cfi_negate_ra_state
7069
; V83A-NEXT: paciasp
70+
; V83A-NEXT: .cfi_negate_ra_state
7171
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
7272
; V83A-NEXT: .cfi_def_cfa_offset 16
7373
; V83A-NEXT: .cfi_offset w30, -16
@@ -88,8 +88,8 @@ entry:
8888
define hidden i32 @c(ptr %fptr) #0 {
8989
; V8A-LABEL: c:
9090
; V8A: // %bb.0: // %entry
91-
; V8A-NEXT: .cfi_negate_ra_state
9291
; V8A-NEXT: hint #25
92+
; V8A-NEXT: .cfi_negate_ra_state
9393
; V8A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
9494
; V8A-NEXT: .cfi_def_cfa_offset 16
9595
; V8A-NEXT: .cfi_offset w30, -16
@@ -106,8 +106,8 @@ define hidden i32 @c(ptr %fptr) #0 {
106106
;
107107
; V83A-LABEL: c:
108108
; V83A: // %bb.0: // %entry
109-
; V83A-NEXT: .cfi_negate_ra_state
110109
; V83A-NEXT: paciasp
110+
; V83A-NEXT: .cfi_negate_ra_state
111111
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
112112
; V83A-NEXT: .cfi_def_cfa_offset 16
113113
; V83A-NEXT: .cfi_offset w30, -16
@@ -129,8 +129,8 @@ entry:
129129
define hidden i32 @d(ptr %fptr) #0 {
130130
; V8A-LABEL: d:
131131
; V8A: // %bb.0: // %entry
132-
; V8A-NEXT: .cfi_negate_ra_state
133132
; V8A-NEXT: hint #25
133+
; V8A-NEXT: .cfi_negate_ra_state
134134
; V8A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
135135
; V8A-NEXT: .cfi_def_cfa_offset 16
136136
; V8A-NEXT: .cfi_offset w30, -16
@@ -147,8 +147,8 @@ define hidden i32 @d(ptr %fptr) #0 {
147147
;
148148
; V83A-LABEL: d:
149149
; V83A: // %bb.0: // %entry
150-
; V83A-NEXT: .cfi_negate_ra_state
151150
; V83A-NEXT: paciasp
151+
; V83A-NEXT: .cfi_negate_ra_state
152152
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
153153
; V83A-NEXT: .cfi_def_cfa_offset 16
154154
; V83A-NEXT: .cfi_offset w30, -16
@@ -176,5 +176,3 @@ attributes #0 = { "sign-return-address"="non-leaf" minsize }
176176
; CHECK-NOT: .cfi_negate_ra_state
177177
; CHECK-NOT: auti{{[a,b]}}sp
178178
; CHECK-NOT: hint #{{[29,31]}}
179-
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
180-
; CHECK: {{.*}}

0 commit comments

Comments
 (0)