Skip to content

Commit a78e82c

Browse files
Merge pull request #34725 from aschwaighofer/fix_irgen_swift_task_create
Fix IRGen for swift_task_create after Nate's async function pointer changes
2 parents 2442ba2 + 32ecd35 commit a78e82c

File tree

3 files changed

+8
-14
lines changed

3 files changed

+8
-14
lines changed

include/swift/Runtime/RuntimeFunctions.def

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1497,14 +1497,13 @@ FUNCTION(TaskCancel,
14971497
ARGS(SwiftTaskPtrTy),
14981498
ATTRS(NoUnwind, ArgMemOnly))
14991499

1500-
// AsyncTaskAndContext swift_task_create_f(
1501-
// size_t flags, AsyncTask *task, AsyncFunctionType<void()> *function,
1502-
// size_t initialContextSize);
1500+
// AsyncTaskAndContext swift_task_create(
1501+
// size_t flags, AsyncTask *task, AsyncFunctionPointer *function);
15031502
FUNCTION(TaskCreateFunc,
1504-
swift_task_create_f, SwiftCC,
1503+
swift_task_create, SwiftCC,
15051504
ConcurrencyAvailability,
15061505
RETURNS(AsyncTaskAndContextTy),
1507-
ARGS(SizeTy, SwiftTaskPtrTy, TaskContinuationFunctionPtrTy, SizeTy),
1506+
ARGS(SizeTy, SwiftTaskPtrTy, AsyncFunctionPointerPtrTy),
15081507
ATTRS(NoUnwind, ArgMemOnly))
15091508

15101509
#undef RETURNS

lib/IRGen/GenCall.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3556,11 +3556,9 @@ llvm::Value *irgen::emitTaskCreate(
35563556
parentTask = IGF.Builder.CreateBitOrPointerCast(
35573557
parentTask, IGF.IGM.SwiftTaskPtrTy);
35583558
taskFunction = IGF.Builder.CreateBitOrPointerCast(
3559-
taskFunction, IGF.IGM.TaskContinuationFunctionPtrTy);
3559+
taskFunction, IGF.IGM.AsyncFunctionPointerPtrTy);
35603560

35613561
// Determine the size of the async context for the closure.
3562-
// FIXME: If the task function comes in as an AsyncFunctionPointer, we might
3563-
// want to use swift_task_create instead of swift_task_create_f.
35643562
ASTContext &ctx = IGF.IGM.IRGen.SIL.getASTContext();
35653563
auto extInfo = ASTExtInfoBuilder().withAsync().withThrows().build();
35663564
auto taskFunctionType = FunctionType::get(
@@ -3570,14 +3568,11 @@ llvm::Value *irgen::emitTaskCreate(
35703568
auto layout = getAsyncContextLayout(
35713569
IGF.IGM, taskFunctionCanSILType, taskFunctionCanSILType,
35723570
SubstitutionMap());
3573-
auto layoutSize = getAsyncContextSize(layout);
3574-
auto layoutSizeVal = llvm::ConstantInt::get(
3575-
IGF.IGM.SizeTy, layoutSize.getValue());
35763571

35773572
// Call the function.
35783573
auto *result = IGF.Builder.CreateCall(
35793574
IGF.IGM.getTaskCreateFuncFn(),
3580-
{ flags, parentTask, taskFunction, layoutSizeVal });
3575+
{ flags, parentTask, taskFunction });
35813576
result->setDoesNotThrow();
35823577
result->setCallingConv(IGF.IGM.SwiftCC);
35833578

test/IRGen/async/builtins.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ sil hidden [ossa] @launch_task : $@convention(method) @async (Int, Optional<Buil
3434
bb0(%0 : $Int, %1: @unowned $Optional<Builtin.NativeObject>, %2: @guaranteed $@async @callee_guaranteed () -> (@error Error)):
3535
%3 = begin_borrow %1 : $Optional<Builtin.NativeObject>
3636
// CHECK: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[FN_CONTEXT:%.*]])
37-
// CHECK: [[NEW_TASK_AND_CONTEXT:%.*]] = call swiftcc %swift.async_task_and_context @swift_task_create_f
37+
// CHECK: [[NEW_TASK_AND_CONTEXT:%.*]] = call swiftcc %swift.async_task_and_context @swift_task_create(
3838
// CHECK-NEXT: [[NEW_CONTEXT_RAW:%.*]] = extractvalue %swift.async_task_and_context [[NEW_TASK_AND_CONTEXT]], 1
3939
// CHECK-NEXT: [[NEW_CONTEXT:%.*]] = bitcast %swift.context* [[NEW_CONTEXT_RAW]] to
4040
// CHECK-NEXT: [[CONTEXT_INFO_LOC:%.*]] = getelementptr inbounds <{{.*}}>* [[NEW_CONTEXT]]
@@ -44,4 +44,4 @@ bb0(%0 : $Int, %1: @unowned $Optional<Builtin.NativeObject>, %2: @guaranteed $@a
4444
destroy_value %20 : $(Builtin.NativeObject, Builtin.RawPointer)
4545
%21 = tuple ()
4646
return %21 : $()
47-
}
47+
}

0 commit comments

Comments
 (0)