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

Zhaoxuan Jiang via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 26 04:57:36 PDT 2023


https://github.com/nocchijiang created https://github.com/llvm/llvm-project/pull/67417

…tasync argument

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

>From 207800fb2e080f2fff75666752ac8669c2d08dbb Mon Sep 17 00:00:00 2001
From: Zhaoxuan Jiang <jiangzhaoxuan94 at gmail.com>
Date: Tue, 26 Sep 2023 19:54:19 +0800
Subject: [PATCH] [AArch64] Bail out of HomogeneousPrologEpilog for functions
 with swiftasync argument

swiftasync introduces a number of frame adjustments which is
incompatible with current implementation of HomogeneousPrologEpilog pass.
---
 llvm/lib/Target/AArch64/AArch64FrameLowering.cpp             | 4 ++++
 llvm/test/CodeGen/AArch64/arm64-homogeneous-prolog-epilog.ll | 5 +++++
 2 files changed, 9 insertions(+)

diff --git a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp
index 68e68449d4073b2..a529e03a91b047a 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