[PATCH] D85644: AArch64: don't sign the return address in noreturn functions

Tim Northover via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 10 05:50:46 PDT 2020


t.p.northover created this revision.
Herald added subscribers: danielkiss, hiraditya, kristof.beyls, mcrosier.
Herald added a project: LLVM.
t.p.northover requested review of this revision.

A simple little change that could save a few bytes space on occasion. If a function doesn't return then signing its return address is a bit pointless.


https://reviews.llvm.org/D85644

Files:
  llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
  llvm/test/CodeGen/AArch64/sign-return-address.ll


Index: llvm/test/CodeGen/AArch64/sign-return-address.ll
===================================================================
--- llvm/test/CodeGen/AArch64/sign-return-address.ll
+++ llvm/test/CodeGen/AArch64/sign-return-address.ll
@@ -118,7 +118,13 @@
 ; CHECK: pacibsp
 ; CHECK-NOT: ret
 ; CHECK: retab
-; CHECK-NOT: ret
+; CHECK-NOT: ret{{$}}
 define i32 @leaf_sign_all_v83_b_key(i32 %x) "sign-return-address"="all" "target-features"="+v8.3a" "sign-return-address-key"="b_key" {
   ret i32 %x
 }
+
+; CHECK-LABEL: @noreturn_nosign
+; CHECK-NOT: pacibsp
+define i32 @noreturn_nosign(i32 %x) "sign-return-address"="all" noreturn {
+  ret i32 %x
+}
Index: llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
+++ llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
@@ -390,6 +390,9 @@
   // - sign-return-address=non-leaf and the functions spills the LR
 
   const Function &F = MF.getFunction();
+  if (F.hasFnAttribute(Attribute::NoReturn))
+    return false;
+
   if (!F.hasFnAttribute("sign-return-address"))
     return false;
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85644.284331.patch
Type: text/x-patch
Size: 1146 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200810/c3476994/attachment.bin>


More information about the llvm-commits mailing list