mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The runtime support functions are currently vended by
swiftCore.{dll,dylib,so} rather than
swift_Differentiation.{dll,dylib,so}. This corrects the annotations to
indicate that reality. This never could have worked as declared in the
first place. swift_Differentiation never links against swiftRuntime
and swiftCore effectively whole-archives swiftRuntime into itself. This
change is now reflecting that reality. If the desire is to move this
(even on Darwin, where this may have already shipped and thus would
break ABI), we could split up the swiftRuntime into swiftRuntime and
swiftDifferentiationRuntime and link that as we do with the runtime into
swiftCore.
57 lines
2.0 KiB
C++
57 lines
2.0 KiB
C++
//===--- AutoDiffSupport.h ------------------------------------*- C++ -*---===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2019 - 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_RUNTIME_AUTODIFF_SUPPORT_H
|
|
#define SWIFT_RUNTIME_AUTODIFF_SUPPORT_H
|
|
|
|
#include "swift/Runtime/HeapObject.h"
|
|
#include "swift/Runtime/Config.h"
|
|
#include "llvm/Support/Allocator.h"
|
|
|
|
namespace swift {
|
|
|
|
/// A data structure responsible for efficiently allocating closure contexts for
|
|
/// linear maps such as pullbacks, including rescursive branching trace enum
|
|
/// case payloads.
|
|
class AutoDiffLinearMapContext : public HeapObject {
|
|
private:
|
|
/// The underlying allocator.
|
|
// TODO: Use a custom allocator so that the initial slab can be
|
|
// tail-allocated.
|
|
llvm::BumpPtrAllocator allocator;
|
|
|
|
public:
|
|
/// Creates a linear map context.
|
|
AutoDiffLinearMapContext();
|
|
/// Returns the address of the tail-allocated top-level subcontext.
|
|
void *projectTopLevelSubcontext() const;
|
|
/// Allocates memory for a new subcontext.
|
|
void *allocate(size_t size);
|
|
};
|
|
|
|
/// Creates a linear map context with a tail-allocated top-level subcontext.
|
|
SWIFT_RUNTIME_EXPORT SWIFT_CC(swift)
|
|
AutoDiffLinearMapContext *swift_autoDiffCreateLinearMapContext(
|
|
size_t topLevelSubcontextSize);
|
|
|
|
/// Returns the address of the tail-allocated top-level subcontext.
|
|
SWIFT_RUNTIME_EXPORT SWIFT_CC(swift)
|
|
void *swift_autoDiffProjectTopLevelSubcontext(AutoDiffLinearMapContext *);
|
|
|
|
/// Allocates memory for a new subcontext.
|
|
SWIFT_RUNTIME_EXPORT SWIFT_CC(swift)
|
|
void *swift_autoDiffAllocateSubcontext(AutoDiffLinearMapContext *, size_t size);
|
|
|
|
}
|
|
|
|
#endif /* SWIFT_RUNTIME_AUTODIFF_SUPPORT_H */
|