@@ -104,6 +104,12 @@ std::string LinkEntity::mangleAsString() const {
104104 return mangler.mangleDispatchThunk (func);
105105 }
106106
107+ case Kind::DispatchThunkDerivative: {
108+ auto *func = cast<AbstractFunctionDecl>(getDecl ());
109+ auto *derivativeId = getAutoDiffDerivativeFunctionIdentifier ();
110+ return mangler.mangleDerivativeDispatchThunk (func, derivativeId);
111+ }
112+
107113 case Kind::DispatchThunkInitializer: {
108114 auto *ctor = cast<ConstructorDecl>(getDecl ());
109115 return mangler.mangleConstructorDispatchThunk (ctor,
@@ -121,6 +127,12 @@ std::string LinkEntity::mangleAsString() const {
121127 return mangler.mangleMethodDescriptor (func);
122128 }
123129
130+ case Kind::MethodDescriptorDerivative: {
131+ auto *func = cast<AbstractFunctionDecl>(getDecl ());
132+ auto *derivativeId = getAutoDiffDerivativeFunctionIdentifier ();
133+ return mangler.mangleDerivativeMethodDescriptor (func, derivativeId);
134+ }
135+
124136 case Kind::MethodDescriptorInitializer: {
125137 auto *ctor = cast<ConstructorDecl>(getDecl ());
126138 return mangler.mangleConstructorMethodDescriptor (ctor,
@@ -460,9 +472,11 @@ SILLinkage LinkEntity::getLinkage(ForDefinition_t forDefinition) const {
460472
461473 switch (getKind ()) {
462474 case Kind::DispatchThunk:
475+ case Kind::DispatchThunkDerivative:
463476 case Kind::DispatchThunkInitializer:
464477 case Kind::DispatchThunkAllocator:
465478 case Kind::MethodDescriptor:
479+ case Kind::MethodDescriptorDerivative:
466480 case Kind::MethodDescriptorInitializer:
467481 case Kind::MethodDescriptorAllocator: {
468482 auto *decl = getDecl ();
@@ -742,12 +756,14 @@ bool LinkEntity::isContextDescriptor() const {
742756 case Kind::AsyncFunctionPointerAST:
743757 case Kind::PropertyDescriptor:
744758 case Kind::DispatchThunk:
759+ case Kind::DispatchThunkDerivative:
745760 case Kind::DispatchThunkInitializer:
746761 case Kind::DispatchThunkAllocator:
747762 case Kind::DispatchThunkAsyncFunctionPointer:
748763 case Kind::DispatchThunkInitializerAsyncFunctionPointer:
749764 case Kind::DispatchThunkAllocatorAsyncFunctionPointer:
750765 case Kind::MethodDescriptor:
766+ case Kind::MethodDescriptorDerivative:
751767 case Kind::MethodDescriptorInitializer:
752768 case Kind::MethodDescriptorAllocator:
753769 case Kind::MethodLookupFunction:
@@ -892,6 +908,7 @@ llvm::Type *LinkEntity::getDefaultDeclarationType(IRGenModule &IGM) const {
892908 case Kind::MethodDescriptor:
893909 case Kind::MethodDescriptorInitializer:
894910 case Kind::MethodDescriptorAllocator:
911+ case Kind::MethodDescriptorDerivative:
895912 return IGM.MethodDescriptorStructTy ;
896913 case Kind::DynamicallyReplaceableFunctionKey:
897914 case Kind::OpaqueTypeDescriptorAccessorKey:
@@ -1020,9 +1037,11 @@ bool LinkEntity::isWeakImported(ModuleDecl *module) const {
10201037
10211038 case Kind::AsyncFunctionPointerAST:
10221039 case Kind::DispatchThunk:
1040+ case Kind::DispatchThunkDerivative:
10231041 case Kind::DispatchThunkInitializer:
10241042 case Kind::DispatchThunkAllocator:
10251043 case Kind::MethodDescriptor:
1044+ case Kind::MethodDescriptorDerivative:
10261045 case Kind::MethodDescriptorInitializer:
10271046 case Kind::MethodDescriptorAllocator:
10281047 case Kind::MethodLookupFunction:
@@ -1104,9 +1123,11 @@ DeclContext *LinkEntity::getDeclContextForEmission() const {
11041123 switch (getKind ()) {
11051124 case Kind::AsyncFunctionPointerAST:
11061125 case Kind::DispatchThunk:
1126+ case Kind::DispatchThunkDerivative:
11071127 case Kind::DispatchThunkInitializer:
11081128 case Kind::DispatchThunkAllocator:
11091129 case Kind::MethodDescriptor:
1130+ case Kind::MethodDescriptorDerivative:
11101131 case Kind::MethodDescriptorInitializer:
11111132 case Kind::MethodDescriptorAllocator:
11121133 case Kind::MethodLookupFunction:
0 commit comments