@@ -104,6 +104,12 @@ std::string LinkEntity::mangleAsString() const {
104
104
return mangler.mangleDispatchThunk (func);
105
105
}
106
106
107
+ case Kind::DispatchThunkDerivative: {
108
+ auto *func = cast<AbstractFunctionDecl>(getDecl ());
109
+ auto *derivativeId = getAutoDiffDerivativeFunctionIdentifier ();
110
+ return mangler.mangleDerivativeDispatchThunk (func, derivativeId);
111
+ }
112
+
107
113
case Kind::DispatchThunkInitializer: {
108
114
auto *ctor = cast<ConstructorDecl>(getDecl ());
109
115
return mangler.mangleConstructorDispatchThunk (ctor,
@@ -121,6 +127,12 @@ std::string LinkEntity::mangleAsString() const {
121
127
return mangler.mangleMethodDescriptor (func);
122
128
}
123
129
130
+ case Kind::MethodDescriptorDerivative: {
131
+ auto *func = cast<AbstractFunctionDecl>(getDecl ());
132
+ auto *derivativeId = getAutoDiffDerivativeFunctionIdentifier ();
133
+ return mangler.mangleDerivativeMethodDescriptor (func, derivativeId);
134
+ }
135
+
124
136
case Kind::MethodDescriptorInitializer: {
125
137
auto *ctor = cast<ConstructorDecl>(getDecl ());
126
138
return mangler.mangleConstructorMethodDescriptor (ctor,
@@ -460,9 +472,11 @@ SILLinkage LinkEntity::getLinkage(ForDefinition_t forDefinition) const {
460
472
461
473
switch (getKind ()) {
462
474
case Kind::DispatchThunk:
475
+ case Kind::DispatchThunkDerivative:
463
476
case Kind::DispatchThunkInitializer:
464
477
case Kind::DispatchThunkAllocator:
465
478
case Kind::MethodDescriptor:
479
+ case Kind::MethodDescriptorDerivative:
466
480
case Kind::MethodDescriptorInitializer:
467
481
case Kind::MethodDescriptorAllocator: {
468
482
auto *decl = getDecl ();
@@ -742,12 +756,14 @@ bool LinkEntity::isContextDescriptor() const {
742
756
case Kind::AsyncFunctionPointerAST:
743
757
case Kind::PropertyDescriptor:
744
758
case Kind::DispatchThunk:
759
+ case Kind::DispatchThunkDerivative:
745
760
case Kind::DispatchThunkInitializer:
746
761
case Kind::DispatchThunkAllocator:
747
762
case Kind::DispatchThunkAsyncFunctionPointer:
748
763
case Kind::DispatchThunkInitializerAsyncFunctionPointer:
749
764
case Kind::DispatchThunkAllocatorAsyncFunctionPointer:
750
765
case Kind::MethodDescriptor:
766
+ case Kind::MethodDescriptorDerivative:
751
767
case Kind::MethodDescriptorInitializer:
752
768
case Kind::MethodDescriptorAllocator:
753
769
case Kind::MethodLookupFunction:
@@ -892,6 +908,7 @@ llvm::Type *LinkEntity::getDefaultDeclarationType(IRGenModule &IGM) const {
892
908
case Kind::MethodDescriptor:
893
909
case Kind::MethodDescriptorInitializer:
894
910
case Kind::MethodDescriptorAllocator:
911
+ case Kind::MethodDescriptorDerivative:
895
912
return IGM.MethodDescriptorStructTy ;
896
913
case Kind::DynamicallyReplaceableFunctionKey:
897
914
case Kind::OpaqueTypeDescriptorAccessorKey:
@@ -1020,9 +1037,11 @@ bool LinkEntity::isWeakImported(ModuleDecl *module) const {
1020
1037
1021
1038
case Kind::AsyncFunctionPointerAST:
1022
1039
case Kind::DispatchThunk:
1040
+ case Kind::DispatchThunkDerivative:
1023
1041
case Kind::DispatchThunkInitializer:
1024
1042
case Kind::DispatchThunkAllocator:
1025
1043
case Kind::MethodDescriptor:
1044
+ case Kind::MethodDescriptorDerivative:
1026
1045
case Kind::MethodDescriptorInitializer:
1027
1046
case Kind::MethodDescriptorAllocator:
1028
1047
case Kind::MethodLookupFunction:
@@ -1104,9 +1123,11 @@ DeclContext *LinkEntity::getDeclContextForEmission() const {
1104
1123
switch (getKind ()) {
1105
1124
case Kind::AsyncFunctionPointerAST:
1106
1125
case Kind::DispatchThunk:
1126
+ case Kind::DispatchThunkDerivative:
1107
1127
case Kind::DispatchThunkInitializer:
1108
1128
case Kind::DispatchThunkAllocator:
1109
1129
case Kind::MethodDescriptor:
1130
+ case Kind::MethodDescriptorDerivative:
1110
1131
case Kind::MethodDescriptorInitializer:
1111
1132
case Kind::MethodDescriptorAllocator:
1112
1133
case Kind::MethodLookupFunction:
0 commit comments