[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