[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