Skip to content

Commit

Permalink
[Runtime] Stubbed entry points for task de/alloc.
Browse files Browse the repository at this point in the history
  • Loading branch information
nate-chandler committed Oct 1, 2020
1 parent 4cfadfa commit 607772a
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 0 deletions.
3 changes: 3 additions & 0 deletions include/swift/AST/ASTContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,9 @@ class ASTContext final {
/// generic metadata.
AvailabilityContext getIntermodulePrespecializedGenericMetadataAvailability();

/// Get the runtime availability of support for concurrency.
AvailabilityContext getConcurrencyAvailability();

/// Get the runtime availability of features introduced in the Swift 5.2
/// compiler for the target platform.
AvailabilityContext getSwift52Availability();
Expand Down
16 changes: 16 additions & 0 deletions include/swift/Runtime/RuntimeFunctions.def
Original file line number Diff line number Diff line change
Expand Up @@ -1461,6 +1461,22 @@ FUNCTION(GetTypeByMangledNameInContextInMetadataState,
Int8PtrPtrTy),
ATTRS(NoUnwind, ArgMemOnly))

// void *swift_taskAlloc(SwiftTask *task, size_t size);
FUNCTION(TaskAlloc,
swift_taskAlloc, SwiftCC,
ConcurrencyAvailability,
RETURNS(Int8PtrTy),
ARGS(SwiftTaskPtrTy, SizeTy),
ATTRS(NoUnwind, ArgMemOnly))

// void swift_taskDealloc(SwiftTask *task, void *ptr);
FUNCTION(TaskDealloc,
swift_taskDealloc, SwiftCC,
ConcurrencyAvailability,
RETURNS(VoidTy),
ARGS(SwiftTaskPtrTy, Int8PtrTy),
ATTRS(NoUnwind, ArgMemOnly))

#undef RETURNS
#undef ARGS
#undef ATTRS
Expand Down
4 changes: 4 additions & 0 deletions lib/AST/Availability.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,10 @@ ASTContext::getIntermodulePrespecializedGenericMetadataAvailability() {
return getSwift54Availability();
}

AvailabilityContext ASTContext::getConcurrencyAvailability() {
return getSwiftFutureAvailability();
}

AvailabilityContext ASTContext::getSwift52Availability() {
auto target = LangOpts.Target;

Expand Down
13 changes: 13 additions & 0 deletions lib/IRGen/IRGenModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,11 @@ IRGenModule::IRGenModule(IRGenerator &irgen,
DynamicReplacementKeyTy = createStructType(*this, "swift.dyn_repl_key",
{RelativeAddressTy, Int32Ty});

SwiftContextTy = createStructType(*this, "swift.context", {});
SwiftTaskTy = createStructType(*this, "swift.task", {});
SwiftContextPtrTy = SwiftContextTy->getPointerTo(DefaultAS);
SwiftTaskPtrTy = SwiftTaskTy->getPointerTo(DefaultAS);

DifferentiabilityWitnessTy = createStructType(
*this, "swift.differentiability_witness", {Int8PtrTy, Int8PtrTy});
}
Expand Down Expand Up @@ -681,6 +686,14 @@ namespace RuntimeConstants {
}
return RuntimeAvailability::AlwaysAvailable;
}

RuntimeAvailability ConcurrencyAvailability(ASTContext &context) {
auto featureAvailability = context.getConcurrencyAvailability();
if (!isDeploymentAvailabilityContainedIn(context, featureAvailability)) {
return RuntimeAvailability::ConditionallyAvailable;
}
return RuntimeAvailability::AlwaysAvailable;
}
} // namespace RuntimeConstants

// We don't use enough attributes to justify generalizing the
Expand Down
5 changes: 5 additions & 0 deletions lib/IRGen/IRGenModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,11 @@ class IRGenModule {
*DynamicReplacementLinkEntryPtrTy; // %link_entry*
llvm::StructType *DynamicReplacementKeyTy; // { i32, i32}

llvm::StructType *SwiftContextTy;
llvm::StructType *SwiftTaskTy;
llvm::PointerType *SwiftContextPtrTy;
llvm::PointerType *SwiftTaskPtrTy;

llvm::StructType *DifferentiabilityWitnessTy; // { i8*, i8* }

llvm::GlobalVariable *TheTrivialPropertyDescriptor = nullptr;
Expand Down
1 change: 1 addition & 0 deletions stdlib/public/runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ set(swift_runtime_sources
BackDeployment.cpp
Casting.cpp
CompatibilityOverride.cpp
Concurrency.cpp
CygwinPort.cpp
Demangle.cpp
DynamicCast.cpp
Expand Down
37 changes: 37 additions & 0 deletions stdlib/public/runtime/Concurrency.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//===------------ Concurrency.cpp - Swift Concurrency Support ------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
// Implementations of the concurrency runtime functions.
//
// void *swift_taskAlloc(SwiftTask *task, size_t size);
// void swift_taskDealloc(SwiftTask *task, void *ptr);
//
//===----------------------------------------------------------------------===//

#include "../SwiftShims/Visibility.h"
#include "swift/Runtime/Config.h"
#include <cstddef>
#include <stdlib.h>

struct SwiftTask;

SWIFT_RUNTIME_EXPORT
SWIFT_CC(swift)
void *swift_taskAlloc(SwiftTask *task, size_t size) {
return malloc(size);
}

SWIFT_RUNTIME_EXPORT
SWIFT_CC(swift)
void swift_taskDealloc(SwiftTask *task, void *ptr) {
free(ptr);
}

0 comments on commit 607772a

Please sign in to comment.