Skip to content

Commit 607772a

Browse files
committed
[Runtime] Stubbed entry points for task de/alloc.
1 parent 4cfadfa commit 607772a

File tree

7 files changed

+79
-0
lines changed

7 files changed

+79
-0
lines changed

include/swift/AST/ASTContext.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,9 @@ class ASTContext final {
694694
/// generic metadata.
695695
AvailabilityContext getIntermodulePrespecializedGenericMetadataAvailability();
696696

697+
/// Get the runtime availability of support for concurrency.
698+
AvailabilityContext getConcurrencyAvailability();
699+
697700
/// Get the runtime availability of features introduced in the Swift 5.2
698701
/// compiler for the target platform.
699702
AvailabilityContext getSwift52Availability();

include/swift/Runtime/RuntimeFunctions.def

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,6 +1461,22 @@ FUNCTION(GetTypeByMangledNameInContextInMetadataState,
14611461
Int8PtrPtrTy),
14621462
ATTRS(NoUnwind, ArgMemOnly))
14631463

1464+
// void *swift_taskAlloc(SwiftTask *task, size_t size);
1465+
FUNCTION(TaskAlloc,
1466+
swift_taskAlloc, SwiftCC,
1467+
ConcurrencyAvailability,
1468+
RETURNS(Int8PtrTy),
1469+
ARGS(SwiftTaskPtrTy, SizeTy),
1470+
ATTRS(NoUnwind, ArgMemOnly))
1471+
1472+
// void swift_taskDealloc(SwiftTask *task, void *ptr);
1473+
FUNCTION(TaskDealloc,
1474+
swift_taskDealloc, SwiftCC,
1475+
ConcurrencyAvailability,
1476+
RETURNS(VoidTy),
1477+
ARGS(SwiftTaskPtrTy, Int8PtrTy),
1478+
ATTRS(NoUnwind, ArgMemOnly))
1479+
14641480
#undef RETURNS
14651481
#undef ARGS
14661482
#undef ATTRS

lib/AST/Availability.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,10 @@ ASTContext::getIntermodulePrespecializedGenericMetadataAvailability() {
323323
return getSwift54Availability();
324324
}
325325

326+
AvailabilityContext ASTContext::getConcurrencyAvailability() {
327+
return getSwiftFutureAvailability();
328+
}
329+
326330
AvailabilityContext ASTContext::getSwift52Availability() {
327331
auto target = LangOpts.Target;
328332

lib/IRGen/IRGenModule.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,11 @@ IRGenModule::IRGenModule(IRGenerator &irgen,
587587
DynamicReplacementKeyTy = createStructType(*this, "swift.dyn_repl_key",
588588
{RelativeAddressTy, Int32Ty});
589589

590+
SwiftContextTy = createStructType(*this, "swift.context", {});
591+
SwiftTaskTy = createStructType(*this, "swift.task", {});
592+
SwiftContextPtrTy = SwiftContextTy->getPointerTo(DefaultAS);
593+
SwiftTaskPtrTy = SwiftTaskTy->getPointerTo(DefaultAS);
594+
590595
DifferentiabilityWitnessTy = createStructType(
591596
*this, "swift.differentiability_witness", {Int8PtrTy, Int8PtrTy});
592597
}
@@ -681,6 +686,14 @@ namespace RuntimeConstants {
681686
}
682687
return RuntimeAvailability::AlwaysAvailable;
683688
}
689+
690+
RuntimeAvailability ConcurrencyAvailability(ASTContext &context) {
691+
auto featureAvailability = context.getConcurrencyAvailability();
692+
if (!isDeploymentAvailabilityContainedIn(context, featureAvailability)) {
693+
return RuntimeAvailability::ConditionallyAvailable;
694+
}
695+
return RuntimeAvailability::AlwaysAvailable;
696+
}
684697
} // namespace RuntimeConstants
685698

686699
// We don't use enough attributes to justify generalizing the

lib/IRGen/IRGenModule.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,11 @@ class IRGenModule {
723723
*DynamicReplacementLinkEntryPtrTy; // %link_entry*
724724
llvm::StructType *DynamicReplacementKeyTy; // { i32, i32}
725725

726+
llvm::StructType *SwiftContextTy;
727+
llvm::StructType *SwiftTaskTy;
728+
llvm::PointerType *SwiftContextPtrTy;
729+
llvm::PointerType *SwiftTaskPtrTy;
730+
726731
llvm::StructType *DifferentiabilityWitnessTy; // { i8*, i8* }
727732

728733
llvm::GlobalVariable *TheTrivialPropertyDescriptor = nullptr;

stdlib/public/runtime/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ set(swift_runtime_sources
3131
BackDeployment.cpp
3232
Casting.cpp
3333
CompatibilityOverride.cpp
34+
Concurrency.cpp
3435
CygwinPort.cpp
3536
Demangle.cpp
3637
DynamicCast.cpp

stdlib/public/runtime/Concurrency.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//===------------ Concurrency.cpp - Swift Concurrency Support ------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See https://swift.org/LICENSE.txt for license information
9+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
//===----------------------------------------------------------------------===//
12+
//
13+
// Implementations of the concurrency runtime functions.
14+
//
15+
// void *swift_taskAlloc(SwiftTask *task, size_t size);
16+
// void swift_taskDealloc(SwiftTask *task, void *ptr);
17+
//
18+
//===----------------------------------------------------------------------===//
19+
20+
#include "../SwiftShims/Visibility.h"
21+
#include "swift/Runtime/Config.h"
22+
#include <cstddef>
23+
#include <stdlib.h>
24+
25+
struct SwiftTask;
26+
27+
SWIFT_RUNTIME_EXPORT
28+
SWIFT_CC(swift)
29+
void *swift_taskAlloc(SwiftTask *task, size_t size) {
30+
return malloc(size);
31+
}
32+
33+
SWIFT_RUNTIME_EXPORT
34+
SWIFT_CC(swift)
35+
void swift_taskDealloc(SwiftTask *task, void *ptr) {
36+
free(ptr);
37+
}

0 commit comments

Comments
 (0)