Initial Task Executor implementation Task(on:), addTask(on:) etc. (#68793)

Co-authored-by: John McCall <rjmccall@gmail.com>
This commit is contained in:
Konrad `ktoso` Malawski
2023-12-12 17:14:24 +09:00
committed by GitHub
parent 7a3e3aea15
commit 828f589be4
68 changed files with 2680 additions and 277 deletions

View File

@@ -674,7 +674,8 @@ IRGenModule::IRGenModule(IRGenerator &irgen,
SwiftAsyncLetPtrTy = Int8PtrTy; // we pass it opaquely (AsyncLet*)
SwiftTaskOptionRecordPtrTy = SizeTy; // Builtin.RawPointer? that we get as (TaskOptionRecord*)
SwiftTaskGroupPtrTy = Int8PtrTy; // we pass it opaquely (TaskGroup*)
SwiftTaskOptionRecordTy = createStructType(*this, "swift.task_option", {
SwiftTaskOptionRecordTy = createStructType(
*this, "swift.task_option", {
SizeTy, // Flags
SwiftTaskOptionRecordPtrTy, // Parent
});
@@ -698,6 +699,11 @@ IRGenModule::IRGenModule(IRGenerator &irgen,
ExecutorFirstTy, // identity
ExecutorSecondTy, // implementation
});
SwiftInitialTaskExecutorPreferenceTaskOptionRecordTy =
createStructType(*this, "swift.task_executor_task_option", {
SwiftTaskOptionRecordTy, // Base option record
SwiftExecutorTy, // Executor
});
SwiftJobTy = createStructType(*this, "swift.job", {
RefCountedStructTy, // object header
Int8PtrTy, Int8PtrTy, // SchedulerPrivate
@@ -881,6 +887,14 @@ namespace RuntimeConstants {
return RuntimeAvailability::AlwaysAvailable;
}
RuntimeAvailability TaskExecutorAvailability(ASTContext &context) {
auto featureAvailability = context.getTaskExecutorAvailability();
if (!isDeploymentAvailabilityContainedIn(context, featureAvailability)) {
return RuntimeAvailability::ConditionallyAvailable;
}
return RuntimeAvailability::AlwaysAvailable;
}
RuntimeAvailability ConcurrencyDiscardingTaskGroupAvailability(ASTContext &context) {
auto featureAvailability =
context.getConcurrencyDiscardingTaskGroupAvailability();