Skip to content

Commit 21dc148

Browse files
Merge pull request swiftlang#87088 from felipepiovezan/felipe/mark_all_async_funclets
[EmitAsyncEntryReturnMetadata] Emit sections for all async funclets
2 parents 4d1d688 + d3d7c55 commit 21dc148

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

lib/LLVMPasses/LLVMEmitAsyncEntryReturnMetadata.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ PreservedAnalyses AsyncEntryReturnMetadataPass::run(Module &M,
1818

1919
SmallVector<llvm::Function *, 16> asyncEntries;
2020
SmallVector<llvm::Function *, 16> asyncReturns;
21+
SmallVector<llvm::Function *, 16> asyncContinuations;
2122
for (auto &F : M) {
2223
if (F.isDeclaration())
2324
continue;
@@ -26,6 +27,8 @@ PreservedAnalyses AsyncEntryReturnMetadataPass::run(Module &M,
2627
asyncEntries.push_back(&F);
2728
if (F.hasFnAttribute("async_ret"))
2829
asyncReturns.push_back(&F);
30+
if (F.hasFnAttribute("async_continuation"))
31+
asyncContinuations.push_back(&F);
2932
}
3033

3134
auto &ctxt = M.getContext();
@@ -83,6 +86,8 @@ PreservedAnalyses AsyncEntryReturnMetadataPass::run(Module &M,
8386
addSection("__TEXT,__swift_as_ret, coalesced, no_dead_strip",
8487
"__swift_async_ret_functlets",
8588
asyncReturns);
89+
addSection("__TEXT,__swift_as_cont, coalesced, no_dead_strip",
90+
"__swift_async_cont_functlets", asyncContinuations);
8691

8792
if (!changed)
8893
return PreservedAnalyses::all();

test/IRGen/async_frame_entry_return_metadata.swift

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,24 @@
99
// ENABLED: @__swift_async_entry_functlets = internal constant [2 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s5async6calleeyyYaF" to i64), i64 ptrtoint (ptr @__swift_async_entry_functlets to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s5async6callerySiSbYaF" to i64), i64 ptrtoint (ptr getelementptr inbounds ([2 x i32], ptr @__swift_async_entry_functlets, i32 0, i32 1) to i64)) to i32)], section "__TEXT,__swift_as_entry, coalesced, no_dead_strip", no_sanitize_address, align 4
1010
// ENABLED: @__swift_async_ret_functlets = internal constant [1 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @"$s5async6callerySiSbYaFTQ1_" to i64), i64 ptrtoint (ptr @__swift_async_ret_functlets to i64)) to i32)], section "__TEXT,__swift_as_ret, coalesced, no_dead_strip", no_sanitize_address, align 4
1111

12-
// ENABLED: define{{.*}} swifttailcc void @"$s5async6callerySiSbYaF"{{.*}} [[CALLER_FUNCLET_ATTRS:#[0-9]+]]
13-
// ENABLED: define{{.*}} internal swifttailcc void @"$s5async6callerySiSbYaFTY0_"{{.*}} [[CALLER_FUNCLET_ATTRS2:#[0-9]+]]
12+
// ENABLED: @__swift_async_cont_functlets = internal constant [3 x i32]
13+
// ENABLED-SAME: ptr @"$s5async6calleeyyYaFTY0_"
14+
// ENABLED-SAME: ptr @"$s5async6callerySiSbYaFTY0_"
15+
// ENABLED-SAME: ptr @"$s5async6callerySiSbYaFTY2_"
16+
// ENABLED-SAME: section "__TEXT,__swift_as_cont, coalesced, no_dead_strip", no_sanitize_address, align 4
1417

15-
// ENABLED: attributes [[CALLER_FUNCLET_ATTRS2]] = { {{.*}}noinline
16-
// ENABLED: attributes [[CALLER_FUNCLET_ATTRS]] = { {{.*}}noinline
18+
// ENABLED: define{{.*}} swifttailcc void @"$s5async6callerySiSbYaF"{{.*}} [[ENTRY_ATTR:#[0-9]+]]
19+
// ENABLED: define{{.*}} internal swifttailcc void @"$s5async6callerySiSbYaFTY0_"{{.*}} [[CONTINUATION_ATTR:#[0-9]+]]
20+
// ENABLED: define{{.*}} internal swifttailcc void @"$s5async6callerySiSbYaFTQ1_"{{.*}} [[RET_ATTR:#[0-9]+]]
21+
// ENABLED: define{{.*}} internal swifttailcc void @"$s5async6callerySiSbYaFTY2_"{{.*}} [[CONTINUATION_ATTR]]
22+
23+
// ENABLED: attributes [[ENTRY_ATTR]] = { {{.*}} "async_entry"
24+
// ENABLED: attributes [[CONTINUATION_ATTR]] = { {{.*}} "async_continuation"
25+
// ENABLED: attributes [[RET_ATTR]] = { {{.*}} "async_ret"
1726

1827
// DISABLED-NOT: @__swift_async_entry_functlets
1928
// DISABLED-NOT: @__swift_async_ret_functlets
29+
// DISABLED-NOT: @__swift_async_cont_functlets
2030
// DISABLED-NOT: s5async6calleeyyYaF.0
2131
// DISABLED-NOT: s5async6callerySiSbYaF.0
2232

0 commit comments

Comments
 (0)