[llvm] baf3903 - [AArch64] Bail out of HomogeneousPrologEpilog for functions with swif… (#67417)

via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 26 08:42:05 PDT 2023


Author: Zhaoxuan Jiang
Date: 2023-09-26T08:42:01-07:00
New Revision: baf39032186ecd7b798270a2190827068a723a95

URL: https://github.com/llvm/llvm-project/commit/baf39032186ecd7b798270a2190827068a723a95
DIFF: https://github.com/llvm/llvm-project/commit/baf39032186ecd7b798270a2190827068a723a95.diff

LOG: [AArch64] Bail out of HomogeneousPrologEpilog for functions with swif… (#67417)

…tasync argument

swiftasync introduces a number of frame adjustments which is
incompatible with current implementation of HomogeneousPrologEpilog
pass.

Added: 
    

Modified: 
    llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
    llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
index 76df66a3e0fc72b..f96edcbbf534e85 100644
--- a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
@@ -331,6 +331,10 @@ bool AArch64FrameLowering::homogeneousPrologEpilog(
   if (Exit && getArgumentStackToRestore(MF, *Exit))
     return false;
 
+  auto *AFI = MF.getInfo<AArch64FunctionInfo>();
+  if (AFI->hasSwiftAsyncContext())
+    return false;
+
   return true;
 }
 

diff  --git a/llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog.ll b/llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog.ll
index 9e32be58273eec4..c414c7c2464f8be 100644
--- a/llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog.ll
@@ -72,3 +72,8 @@ declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)
 ; CHECK-LINUX-NEXT: ldp     x22, x21, [sp, #16]
 ; CHECK-LINUX-NEXT: ldp     x29, x30, [sp], #48
 ; CHECK-LINUX-NEXT: ret     x16
+
+; nothing to check - hit assert if not bailing out for swiftasync
+define void @swift_async(i8* swiftasync %ctx) minsize "frame-pointer"="all" {
+  ret void
+}


        


More information about the llvm-commits mailing list