mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[AutoDiff upstream] Serialize derivative function configurations. (#30672)
Serialize derivative function configurations per module. `@differentiable` and `@derivative` attributes register derivatives for `AbstractFunctionDecl`s for a particular "derivative function configuration": parameter indices and dervative generic signature. To find `@derivative` functions registered in other Swift modules, derivative function configurations must be serialized per module. When configurations for a `AbstractFunctionDecl` are requested, all configurations from imported modules are deserialized. This module serialization technique has precedent: it is used for protocol conformances (e.g. extension declarations for a nominal type) and Obj-C members for a class type. Add `AbstractFunctionDecl::getDerivativeFunctionConfigurations` entry point for accessing derivative function configurations. In the differentiation transform: use `AbstractFunctionDecl::getDerivativeFunctionConfigurations` to implement `findMinimalDerivativeConfiguration` for canonical derivative function configuration lookup, replacing `getMinimalASTDifferentiableAttr`. Resolves TF-1100.
This commit is contained in:
@@ -993,6 +993,17 @@ void SerializedModuleLoaderBase::loadObjCMethods(
|
||||
}
|
||||
}
|
||||
|
||||
void SerializedModuleLoaderBase::loadDerivativeFunctionConfigurations(
|
||||
AbstractFunctionDecl *originalAFD, unsigned int previousGeneration,
|
||||
llvm::SetVector<AutoDiffConfig> &results) {
|
||||
for (auto &modulePair : LoadedModuleFiles) {
|
||||
if (modulePair.second <= previousGeneration)
|
||||
continue;
|
||||
modulePair.first->loadDerivativeFunctionConfigurations(originalAFD,
|
||||
results);
|
||||
}
|
||||
}
|
||||
|
||||
std::error_code MemoryBufferSerializedModuleLoader::findModuleFilesInDirectory(
|
||||
AccessPathElem ModuleID,
|
||||
const SerializedModuleBaseName &BaseName,
|
||||
|
||||
Reference in New Issue
Block a user