forked from OSchip/llvm-project
[ARM] fix bug causing shrinkwrapping not always being off using PAC
If you want to check for all uses of PAC, the SpillsLR argument to shouldSignReturnAddress should be true instead of false, as that value will be returned from the function if the other checks fall through. Reviewed By: miyuki Differential Revision: https://reviews.llvm.org/D116213
This commit is contained in:
parent
2eb7d8d749
commit
7c70f96a91
|
@ -1812,7 +1812,7 @@ bool ARMFrameLowering::enableShrinkWrapping(const MachineFunction &MF) const {
|
|||
// shrinkwrapping can cause clobbering of r12 when the PAC code is
|
||||
// generated. A follow-up patch will fix this in a more performant manner.
|
||||
if (MF.getInfo<ARMFunctionInfo>()->shouldSignReturnAddress(
|
||||
false /*SpillsLR */))
|
||||
true /* SpillsLR */))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
|
@ -48,7 +48,6 @@ return: ; preds = %entry, %if.end
|
|||
}
|
||||
|
||||
; CHECK-LABEL: f:
|
||||
; CHECK: bmi .LBB
|
||||
; ...
|
||||
; CHECK: pac r12, lr, sp
|
||||
; CHECK-NEXT: .save {r4, r5, r6, lr}
|
||||
|
@ -66,14 +65,13 @@ return: ; preds = %entry, %if.end
|
|||
; CHECK-NEXT: sub sp, #4
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 24
|
||||
; ...
|
||||
; CHECK: bl OUTLINED_FUNCTION_0
|
||||
; ...
|
||||
; CHECK: add sp, #4
|
||||
; CHECK-NEXT: ldr r12, [sp], #4
|
||||
; CHECK-NEXT: pop.w {r4, r5, r6, lr}
|
||||
; CHECK-NEXT: aut r12, lr, sp
|
||||
; CHECK-NEXT: bx lr
|
||||
; ...
|
||||
; CHECK: .LBB
|
||||
; CHECK: bx lr
|
||||
|
||||
|
||||
define hidden i32 @g(i32 %a, i32 %b, i32 %c, i32 %d) local_unnamed_addr #0 {
|
||||
|
@ -97,8 +95,6 @@ return: ; preds = %entry, %if.end
|
|||
ret i32 %retval.0
|
||||
}
|
||||
; CHECK-LABEL: g:
|
||||
; CHECK: bmi .LBB
|
||||
; ...
|
||||
; CHECK: pac r12, lr, sp
|
||||
; CHECK-NEXT: .save {r4, r5, r6, lr}
|
||||
; CHECK-NEXT: push {r4, r5, r6, lr}
|
||||
|
@ -115,14 +111,13 @@ return: ; preds = %entry, %if.end
|
|||
; CHECK-NEXT: sub sp, #4
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 24
|
||||
; ...
|
||||
; CHECK: bl OUTLINED_FUNCTION_0
|
||||
; ...
|
||||
; CHECK: add sp, #4
|
||||
; CHECK-NEXT: ldr r12, [sp], #4
|
||||
; CHECK-NEXT: pop.w {r4, r5, r6, lr}
|
||||
; CHECK-NEXT: aut r12, lr, sp
|
||||
; CHECK-NEXT: bx lr
|
||||
; ...
|
||||
; CHECK: .LBB
|
||||
; CHECK: bx lr
|
||||
|
||||
; CHECK-LABEL: OUTLINED_FUNCTION_0:
|
||||
; CHECK: pac r12, lr, sp
|
||||
|
|
|
@ -45,8 +45,6 @@ if.end: ; preds = %entry
|
|||
|
||||
; CHECK-LABEL: _Z1hii:
|
||||
; ...
|
||||
; CHECK: bxgt lr
|
||||
; ...
|
||||
; CHECK: pac r12, lr, sp
|
||||
; CHECK-NEXT: .save {r7, lr}
|
||||
; CHECK-NEXT: push {r7, lr}
|
||||
|
@ -62,7 +60,7 @@ if.end: ; preds = %entry
|
|||
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
||||
; ...
|
||||
; CHECK-NOT: pac
|
||||
; CHECK-NOT: aut
|
||||
; CHECK: aut
|
||||
; CHECK: .cfi_endproc
|
||||
|
||||
declare dso_local i8* @__cxa_allocate_exception(i32) local_unnamed_addr
|
||||
|
@ -90,8 +88,6 @@ return: ; preds = %entry, %if.end
|
|||
|
||||
; CHECK-LABEL: _Z1fiiii:
|
||||
; ...
|
||||
; CHECK: bmi .L[[B:[a-zA-Z0-9]*]]
|
||||
; ...
|
||||
; CHECK: pac r12, lr, sp
|
||||
; CHECK-NEXT: .save {r4, r5, r6, lr}
|
||||
; CHECK-NEXT: push {r4, r5, r6, lr}
|
||||
|
@ -108,15 +104,13 @@ return: ; preds = %entry, %if.end
|
|||
; CHECK-NEXT: sub sp, #4
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 24
|
||||
; ...
|
||||
; CHECK: bl OUTLINED_FUNCTION_0
|
||||
; ...
|
||||
; CHECK: add sp, #4
|
||||
; CHECK-NEXT: ldr r12, [sp], #4
|
||||
; CHECK-NEXT: pop.w {r4, r5, r6, lr}
|
||||
; CHECK-NEXT: aut r12, lr, sp
|
||||
; CHECK-NEXT: bx lr
|
||||
; ...
|
||||
; CHECK: .L[[B]]
|
||||
; ...
|
||||
; CHECK: bx lr
|
||||
|
||||
|
||||
|
||||
|
@ -141,8 +135,6 @@ return: ; preds = %entry, %if.end
|
|||
|
||||
; CHECK-LABEL: _Z1giiii:
|
||||
; ...
|
||||
; CHECK: bmi .L[[B:[a-zA-Z0-9]*]]
|
||||
; ...
|
||||
; CHECK: pac r12, lr, sp
|
||||
; CHECK-NEXT: .save {r4, r5, r6, lr}
|
||||
; CHECK-NEXT: push {r4, r5, r6, lr}
|
||||
|
@ -159,15 +151,13 @@ return: ; preds = %entry, %if.end
|
|||
; CHECK-NEXT: sub sp, #4
|
||||
; CHECK-NEXT: .cfi_def_cfa_offset 24
|
||||
; ...
|
||||
; CHECK: bl OUTLINED_FUNCTION_0
|
||||
; ...
|
||||
; CHECK: add sp, #4
|
||||
; CHECK-NEXT: ldr r12, [sp], #4
|
||||
; CHECK-NEXT: pop.w {r4, r5, r6, lr}
|
||||
; CHECK-NEXT: aut r12, lr, sp
|
||||
; CHECK-NEXT: bx lr
|
||||
; ...
|
||||
; CHECK: .L[[B]]
|
||||
; ...
|
||||
; CHECK: bx lr
|
||||
|
||||
|
||||
; CHEK-LABEL: OUTLINED_FUNCTION_0:
|
||||
|
@ -195,25 +185,25 @@ attributes #2 = { noreturn }
|
|||
; UNWIND-NEXT: 0xB0 ; finish
|
||||
; UNWIND-NEXT: 0xB0 ; finish
|
||||
|
||||
; UNWIND-LABEL: FunctionAddress: 0x2C
|
||||
; UNWIND-LABEL: FunctionAddress: 0x3C
|
||||
; UNWIND: Opcodes
|
||||
; UNWIND-NEXT: 0x00 ; vsp = vsp + 4
|
||||
; UNWIND-NEXT: 0xB4 ; pop ra_auth_code
|
||||
; UNWIND-NEXT: 0xAA ; pop {r4, r5, r6, lr}
|
||||
|
||||
; UNWIND-LABEL: FunctionAddress: 0x62
|
||||
; UNWIND-LABEL: FunctionAddress: 0x72
|
||||
; UNWIND: Opcodes
|
||||
; UNWIND-NEXT: 0x00 ; vsp = vsp + 4
|
||||
; UNWIND-NEXT: 0xB4 ; pop ra_auth_code
|
||||
; UNWIND-NEXT: 0xAA ; pop {r4, r5, r6, lr}
|
||||
|
||||
; UNWIND-LABEL: FunctionAddress: 0x98
|
||||
; UNWIND-LABEL: FunctionAddress: 0xA8
|
||||
; UNWIND: Opcodes
|
||||
; UNWIND-NEXT: 0xB0 ; finish
|
||||
; UNWIND-NEXT: 0xB0 ; finish
|
||||
; UNWIND-NEXT: 0xB0 ; finish
|
||||
|
||||
; UNWIND: 00000099 {{.*}} OUTLINED_FUNCTION_0
|
||||
; UWNIND: 0000002d {{.*}} _Z1fiiii
|
||||
; UWNIND: 00000063 {{.*}} _Z1giiii
|
||||
; UNWIND: 000000a9 {{.*}} OUTLINED_FUNCTION_0
|
||||
; UWNIND: 00000001 {{.*}} _Z1hii
|
||||
; UWNIND: 0000003d {{.*}} _Z1fiiii
|
||||
; UWNIND: 00000073 {{.*}} _Z1giiii
|
||||
|
|
Loading…
Reference in New Issue