Skip to content

Commit 0aee08a

Browse files
bgogulrxwei
authored andcommitted
[AutoDiff] Rename "assocFn" to "derivativeFn" everywhere except Differentiation.cpp. (#27597)
1 parent eeeeee2 commit 0aee08a

File tree

9 files changed

+113
-102
lines changed

9 files changed

+113
-102
lines changed

include/swift/SIL/SILCloner.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -970,14 +970,14 @@ template<typename ImplClass>
970970
void SILCloner<ImplClass>::visitDifferentiableFunctionInst(
971971
DifferentiableFunctionInst *Inst) {
972972
getBuilder().setCurrentDebugScope(getOpScope(Inst->getDebugScope()));
973-
Optional<std::pair<SILValue, SILValue>> assocFns = None;
973+
Optional<std::pair<SILValue, SILValue>> derivativeFns = None;
974974
if (Inst->hasDerivativeFunctions())
975-
assocFns = std::make_pair(getOpValue(Inst->getJVPFunction()),
975+
derivativeFns = std::make_pair(getOpValue(Inst->getJVPFunction()),
976976
getOpValue(Inst->getVJPFunction()));
977977
recordClonedInstruction(
978978
Inst, getBuilder().createDifferentiableFunction(
979979
getOpLocation(Inst->getLoc()), Inst->getParameterIndices(),
980-
getOpValue(Inst->getOriginalFunction()), assocFns));
980+
getOpValue(Inst->getOriginalFunction()), derivativeFns));
981981
}
982982

983983
template<typename ImplClass>

lib/AST/Builtins.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,10 +1045,10 @@ static ValueDecl *getAutoDiffApplyAssociatedFunction(
10451045
// Generator for the resultant function type, i.e. the AD associated function.
10461046
BuiltinGenericSignatureBuilder::LambdaGenerator resultGen{
10471047
[=, &Context](BuiltinGenericSignatureBuilder &builder) -> Type {
1048-
auto assocFnTy = origFnTy->getAutoDiffAssociatedFunctionType(
1048+
auto derivativeFnTy = origFnTy->getAutoDiffAssociatedFunctionType(
10491049
paramIndices, /*resultIndex*/ 0, kind,
10501050
LookUpConformanceInModule(Context.TheBuiltinModule));
1051-
return assocFnTy->getResult();
1051+
return derivativeFnTy->getResult();
10521052
}};
10531053
builder.addParameter(firstArgGen);
10541054
for (auto argGen : fnArgGens)

lib/SIL/SILDeclRef.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -694,9 +694,9 @@ std::string SILDeclRef::mangle(ManglingKind MKind) const {
694694
autoDiffAssociatedFunctionIdentifier->getParameterIndices(),
695695
getDecl()->getInterfaceType()->castTo<AnyFunctionType>());
696696
SILAutoDiffIndices indices(/*source*/ 0, silParameterIndices);
697-
auto assocFnKind = autoDiffAssociatedFunctionIdentifier->getKind();
697+
auto derivativeFnKind = autoDiffAssociatedFunctionIdentifier->getKind();
698698
return mangler.mangleAutoDiffAssociatedFunctionHelper(
699-
originalMangled, assocFnKind, indices);
699+
originalMangled, derivativeFnKind, indices);
700700
}
701701

702702
// As a special case, Clang functions and globals don't get mangled at all.

lib/SIL/SILFunctionType.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -154,16 +154,16 @@ CanSILFunctionType SILFunctionType::getWithoutDifferentiability() {
154154
// given an existing associated function generic signature. All differentiation
155155
// parameters are constrained to conform to `Differentiable`.
156156
static CanGenericSignature getAutoDiffAssociatedFunctionGenericSignature(
157-
CanGenericSignature assocFnGenSig,
157+
CanGenericSignature derivativeFnGenSig,
158158
ArrayRef<SILParameterInfo> originalParameters,
159159
AutoDiffIndexSubset *parameterIndices, ModuleDecl *module) {
160-
if (!assocFnGenSig)
160+
if (!derivativeFnGenSig)
161161
return nullptr;
162162
auto &ctx = module->getASTContext();
163163
GenericSignatureBuilder builder(ctx);
164164

165165
// Add associated function generic signature.
166-
builder.addGenericSignature(assocFnGenSig);
166+
builder.addGenericSignature(derivativeFnGenSig);
167167
// Constrain all wrt parameters to conform to `Differentiable`.
168168
auto source =
169169
GenericSignatureBuilder::FloatingRequirementSource::forAbstract();
@@ -182,7 +182,8 @@ static CanGenericSignature getAutoDiffAssociatedFunctionGenericSignature(
182182
CanSILFunctionType SILFunctionType::getAutoDiffAssociatedFunctionType(
183183
AutoDiffIndexSubset *parameterIndices, unsigned resultIndex,
184184
AutoDiffAssociatedFunctionKind kind, TypeConverter &TC,
185-
LookupConformanceFn lookupConformance, CanGenericSignature assocFnGenSig) {
185+
LookupConformanceFn lookupConformance,
186+
CanGenericSignature derivativeFnGenSig) {
186187
// JVP: (T...) -> ((R...),
187188
// (T.TangentVector...) -> (R.TangentVector...))
188189
// VJP: (T...) -> ((R...),
@@ -203,11 +204,11 @@ CanSILFunctionType SILFunctionType::getAutoDiffAssociatedFunctionType(
203204
wrtParams.push_back(valueAndIndex.value());
204205

205206
// Get the canonical associated function generic signature.
206-
if (!assocFnGenSig)
207-
assocFnGenSig = getGenericSignature();
208-
assocFnGenSig = getAutoDiffAssociatedFunctionGenericSignature(
209-
assocFnGenSig, getParameters(), parameterIndices, &TC.M);
210-
Lowering::GenericContextScope genericContextScope(TC, assocFnGenSig);
207+
if (!derivativeFnGenSig)
208+
derivativeFnGenSig = getGenericSignature();
209+
derivativeFnGenSig = getAutoDiffAssociatedFunctionGenericSignature(
210+
derivativeFnGenSig, getParameters(), parameterIndices, &TC.M);
211+
Lowering::GenericContextScope genericContextScope(TC, derivativeFnGenSig);
211212

212213
// Given a type, returns its formal SIL parameter info.
213214
auto getTangentParameterInfoForOriginalResult = [&](
@@ -310,12 +311,12 @@ CanSILFunctionType SILFunctionType::getAutoDiffAssociatedFunctionType(
310311
newResults.reserve(getNumResults() + 1);
311312
for (auto &result : getResults()) {
312313
auto mappedResult = result.getWithType(
313-
result.getType()->getCanonicalType(assocFnGenSig));
314+
result.getType()->getCanonicalType(derivativeFnGenSig));
314315
newResults.push_back(mappedResult);
315316
}
316-
newResults.push_back({closureType->getCanonicalType(assocFnGenSig),
317+
newResults.push_back({closureType->getCanonicalType(derivativeFnGenSig),
317318
ResultConvention::Owned});
318-
return SILFunctionType::get(assocFnGenSig, getExtInfo(),
319+
return SILFunctionType::get(derivativeFnGenSig, getExtInfo(),
319320
getCoroutineKind(), getCalleeConvention(),
320321
getParameters(), getYields(), newResults,
321322
getOptionalErrorResult(), ctx,

lib/SIL/TypeLowering.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -899,10 +899,10 @@ namespace {
899899
for (AutoDiffAssociatedFunctionKind kind :
900900
{AutoDiffAssociatedFunctionKind::JVP,
901901
AutoDiffAssociatedFunctionKind::VJP}) {
902-
auto assocFnTy = origFnTy->getAutoDiffAssociatedFunctionType(
902+
auto derivativeFnTy = origFnTy->getAutoDiffAssociatedFunctionType(
903903
paramIndices, 0, kind, TC,
904904
LookUpConformanceInModule(&TC.M));
905-
auto silTy = SILType::getPrimitiveObjectType(assocFnTy);
905+
auto silTy = SILType::getPrimitiveObjectType(derivativeFnTy);
906906
DifferentiableFunctionExtractee extractee(kind);
907907
// Assert that we have the right extractee. A terrible bug in the past
908908
// was caused by implicit conversions from `unsigned` to

lib/SILGen/SILGen.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -150,16 +150,16 @@ class LLVM_LIBRARY_VISIBILITY SILGenModule : public ASTVisitor<SILGenModule> {
150150
// SWIFT_ENABLE_TENSORFLOW
151151
/// Get or create an autodiff associated function thunk for the given
152152
/// SILDeclRef, SILFunction, and associated function type.
153-
SILFunction *getOrCreateAutoDiffThunk(SILDeclRef assocFnRef,
154-
SILFunction *assocFn,
155-
CanSILFunctionType assocFnTy);
153+
SILFunction *getOrCreateAutoDiffThunk(SILDeclRef derivativeFnRef,
154+
SILFunction *derivativeFn,
155+
CanSILFunctionType derivativeFnTy);
156156

157157
// SWIFT_ENABLE_TENSORFLOW
158158
/// Get or create an autodiff associated function vtable entry thunk for the
159159
/// given SILDeclRef and associated function type.
160160
SILFunction *
161-
getOrCreateAutoDiffClassMethodThunk(SILDeclRef assocFnRef,
162-
CanSILFunctionType assocFnTy);
161+
getOrCreateAutoDiffClassMethodThunk(SILDeclRef derivativeFnRef,
162+
CanSILFunctionType derivativeFnTy);
163163

164164
/// Emit a vtable thunk for a derived method if its natural abstraction level
165165
/// diverges from the overridden base method. If no thunking is needed,
@@ -187,8 +187,8 @@ class LLVM_LIBRARY_VISIBILITY SILGenModule : public ASTVisitor<SILGenModule> {
187187
/// - The last result in the returned pullback.
188188
SILFunction *getOrCreateAutoDiffAssociatedFunctionThunk(
189189
SILFunction *original, SILAutoDiffIndices &indices,
190-
SILFunction *assocFn, AutoDiffAssociatedFunctionKind assocFnKind,
191-
bool reorderSelf);
190+
SILFunction *derivativeFn,
191+
AutoDiffAssociatedFunctionKind derivativeFnKind, bool reorderSelf);
192192

193193
/// Determine whether the given class has any instance variables that
194194
/// need to be destroyed.

lib/SILGen/SILGenBuiltin.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,19 +1041,19 @@ static ManagedValue emitBuiltinAutoDiffApplyAssociatedFunction(
10411041
origFnArgVals.push_back(arg.getValue());
10421042

10431043
// Get the associated function.
1044-
SILValue assocFn = SGF.B.createDifferentiableFunctionExtract(
1044+
SILValue derivativeFn = SGF.B.createDifferentiableFunctionExtract(
10451045
loc, kind, origFnVal);
1046-
auto assocFnType = assocFn->getType().castTo<SILFunctionType>();
1046+
auto derivativeFnType = derivativeFn->getType().castTo<SILFunctionType>();
10471047

1048-
// We don't need to destroy the original function or retain the `assocFn`,
1049-
// because they are trivial (because they are @noescape).
1048+
// We don't need to destroy the original function or retain the
1049+
// `derivativeFn`, because they are trivial (because they are @noescape).
10501050
assert(origFnVal->getType().isTrivial(SGF.F));
1051-
assert(assocFn->getType().isTrivial(SGF.F));
1052-
bool assocFnNeedsDestroy = false;
1051+
assert(derivativeFn->getType().isTrivial(SGF.F));
1052+
bool derivativeFnNeedsDestroy = false;
10531053

10541054
// Unwrap curry levels.
10551055
SmallVector<SILFunctionType *, 2> curryLevels;
1056-
SILFunctionType *currentLevel = assocFnType;
1056+
SILFunctionType *currentLevel = derivativeFnType;
10571057
unsigned numParameters = 0;
10581058
while (currentLevel != nullptr) {
10591059
curryLevels.push_back(currentLevel);
@@ -1074,25 +1074,25 @@ static ManagedValue emitBuiltinAutoDiffApplyAssociatedFunction(
10741074
#endif
10751075

10761076
// Apply all the curry levels except the last one, whose results we handle
1077-
// specially. We overwrite `assocFn` with the application results.
1077+
// specially. We overwrite `derivativeFn` with the application results.
10781078
unsigned currentParameter = 0;
10791079
auto curryLevelsWithoutLast =
10801080
ArrayRef<SILFunctionType *>(curryLevels).drop_back(1);
10811081
for (auto *curryLevel : curryLevelsWithoutLast) {
10821082
auto curryLevelArgVals = ArrayRef<SILValue>(origFnArgVals).slice(
10831083
currentParameter, curryLevel->getNumParameters());
10841084
auto applyResult = SGF.B.createApply(
1085-
loc, assocFn, SubstitutionMap(), curryLevelArgVals,
1085+
loc, derivativeFn, SubstitutionMap(), curryLevelArgVals,
10861086
/*isNonThrowing*/ false);
10871087
currentParameter += curryLevel->getNumParameters();
10881088

1089-
assocFn = applyResult;
1089+
derivativeFn = applyResult;
10901090

1091-
// Our new `assocFn` needs to be released because it's an owned result from
1092-
// a function call.
1091+
// Our new `derivativeFn` needs to be released because it's an owned result
1092+
// from a function call.
10931093
assert(curryLevel->getSingleResult().getConvention() ==
10941094
ResultConvention::Owned);
1095-
assocFnNeedsDestroy = true;
1095+
derivativeFnNeedsDestroy = true;
10961096
}
10971097

10981098
assert(curryLevels.back()->getNumResults() == 2);
@@ -1109,10 +1109,10 @@ static ManagedValue emitBuiltinAutoDiffApplyAssociatedFunction(
11091109
currentParameter);
11101110
for (auto origFnArgVal : curryLevelArgVals)
11111111
applyArgs.push_back(origFnArgVal);
1112-
auto differential = SGF.B.createApply(
1113-
loc, assocFn, SubstitutionMap(), applyArgs, /*isNonThrowing*/ false);
1112+
auto differential = SGF.B.createApply(loc, derivativeFn, SubstitutionMap(),
1113+
applyArgs, /*isNonThrowing*/ false);
11141114

1115-
assocFn = SILValue();
1115+
derivativeFn = SILValue();
11161116

11171117
SGF.B.createStore(loc, differential,
11181118
SGF.B.createTupleElementAddr(loc, indResBuffer, 1),
@@ -1125,10 +1125,10 @@ static ManagedValue emitBuiltinAutoDiffApplyAssociatedFunction(
11251125
auto curryLevelArgVals = ArrayRef<SILValue>(origFnArgVals).slice(
11261126
currentParameter);
11271127
auto resultTuple = SGF.B.createApply(
1128-
loc, assocFn, SubstitutionMap(), curryLevelArgVals,
1128+
loc, derivativeFn, SubstitutionMap(), curryLevelArgVals,
11291129
/*isNonThrowing*/ false);
11301130

1131-
assocFn = SILValue();
1131+
derivativeFn = SILValue();
11321132

11331133
return SGF.emitManagedRValueWithCleanup(resultTuple);
11341134
}

lib/SILGen/SILGenPoly.cpp

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3311,22 +3311,24 @@ static ManagedValue createAutoDiffThunk(SILGenFunction &SGF,
33113311
return AbstractionPattern(
33123312
pattern.getGenericSignature(), getAssocFnTy(patternType, kind));
33133313
};
3314-
auto createAssocFnThunk = [&](AutoDiffAssociatedFunctionKind kind)
3315-
-> ManagedValue {
3316-
auto assocFnInputOrigType = getAssocFnPattern(inputOrigTypeNotDiff, kind);
3317-
auto assocFnInputSubstType = getAssocFnTy(inputSubstTypeNotDiff, kind);
3318-
auto assocFnOutputOrigType = getAssocFnPattern(outputOrigTypeNotDiff,
3314+
auto createAssocFnThunk =
3315+
[&](AutoDiffAssociatedFunctionKind kind) -> ManagedValue {
3316+
auto derivativeFnInputOrigType =
3317+
getAssocFnPattern(inputOrigTypeNotDiff, kind);
3318+
auto derivativeFnInputSubstType = getAssocFnTy(inputSubstTypeNotDiff, kind);
3319+
auto derivativeFnOutputOrigType = getAssocFnPattern(outputOrigTypeNotDiff,
33193320
kind);
3320-
auto assocFnOutputSubstType = getAssocFnTy(outputSubstTypeNotDiff, kind);
3321-
auto &assocFnExpectedTL = SGF.getTypeLowering(assocFnOutputOrigType,
3322-
assocFnOutputSubstType);
3323-
SILValue assocFn = SGF.B.createDifferentiableFunctionExtract(
3321+
auto derivativeFnOutputSubstType =
3322+
getAssocFnTy(outputSubstTypeNotDiff, kind);
3323+
auto &derivativeFnExpectedTL = SGF.getTypeLowering(
3324+
derivativeFnOutputOrigType, derivativeFnOutputSubstType);
3325+
SILValue derivativeFn = SGF.B.createDifferentiableFunctionExtract(
33243326
loc, kind, borrowedFnValue.getValue());
3325-
assocFn = SGF.B.emitCopyValueOperation(loc, assocFn);
3326-
auto managedAssocFn = SGF.emitManagedRValueWithCleanup(assocFn);
3327-
return createThunk(SGF, loc, managedAssocFn, assocFnInputOrigType,
3328-
assocFnInputSubstType, assocFnOutputOrigType,
3329-
assocFnOutputSubstType, assocFnExpectedTL);
3327+
derivativeFn = SGF.B.emitCopyValueOperation(loc, derivativeFn);
3328+
auto managedAssocFn = SGF.emitManagedRValueWithCleanup(derivativeFn);
3329+
return createThunk(SGF, loc, managedAssocFn, derivativeFnInputOrigType,
3330+
derivativeFnInputSubstType, derivativeFnOutputOrigType,
3331+
derivativeFnOutputSubstType, derivativeFnExpectedTL);
33303332
};
33313333

33323334
auto jvpThunk = createAssocFnThunk(AutoDiffAssociatedFunctionKind::JVP);
@@ -3666,59 +3668,61 @@ SILGenFunction::getThunkedAutoDiffLinearMap(
36663668
SILFunction *
36673669
SILGenModule::getOrCreateAutoDiffAssociatedFunctionThunk(
36683670
SILFunction *original, SILAutoDiffIndices &indices,
3669-
SILFunction *assocFn, AutoDiffAssociatedFunctionKind assocFnKind,
3671+
SILFunction *derivativeFn, AutoDiffAssociatedFunctionKind derivativeFnKind,
36703672
bool reorderSelf) {
3671-
auto assocFnType = assocFn->getLoweredFunctionType();
3673+
auto derivativeFnType = derivativeFn->getLoweredFunctionType();
36723674

36733675
// TODO(TF-685): Use principled thunk mangling.
36743676
// Do not simply reuse reabstraction thunk mangling.
36753677
Mangle::ASTMangler mangler;
36763678
auto name = getASTContext().getIdentifier(
36773679
mangler.mangleAutoDiffAssociatedFunctionHelper(
3678-
original->getName(), assocFnKind, indices)).str();
3680+
original->getName(), derivativeFnKind, indices)).str();
36793681

36803682
Lowering::GenericContextScope genericContextScope(
3681-
Types, assocFnType->getGenericSignature());
3682-
auto *thunkGenericEnv = assocFnType->getGenericSignature()
3683-
? assocFnType->getGenericSignature()->getGenericEnvironment()
3683+
Types, derivativeFnType->getGenericSignature());
3684+
auto *thunkGenericEnv = derivativeFnType->getGenericSignature()
3685+
? derivativeFnType->getGenericSignature()->getGenericEnvironment()
36843686
: nullptr;
36853687

36863688
auto origFnType = original->getLoweredFunctionType();
36873689
auto origAssocFnType = origFnType->getAutoDiffAssociatedFunctionType(
36883690
indices.parameters, indices.source,
3689-
assocFnKind, Types, LookUpConformanceInModule(M.getSwiftModule()),
3690-
assocFnType->getGenericSignature());
3691+
derivativeFnKind, Types, LookUpConformanceInModule(M.getSwiftModule()),
3692+
derivativeFnType->getGenericSignature());
36913693
assert(!origAssocFnType->getExtInfo().hasContext());
36923694

3693-
auto loc = assocFn->getLocation();
3695+
auto loc = derivativeFn->getLocation();
36943696
SILGenFunctionBuilder fb(*this);
36953697
auto linkage = autodiff::getAutoDiffAssociatedFunctionLinkage(
36963698
original->getLinkage(), /*isAssocFnExported*/ true);
36973699
auto *thunk = fb.getOrCreateFunction(
36983700
loc, name, linkage, origAssocFnType, IsBare, IsNotTransparent,
3699-
assocFn->isSerialized(), assocFn->isDynamicallyReplaceable(),
3700-
assocFn->getEntryCount(), assocFn->isThunk(),
3701-
assocFn->getClassSubclassScope());
3701+
derivativeFn->isSerialized(), derivativeFn->isDynamicallyReplaceable(),
3702+
derivativeFn->getEntryCount(), derivativeFn->isThunk(),
3703+
derivativeFn->getClassSubclassScope());
37023704
if (!thunk->empty())
37033705
return thunk;
37043706
thunk->setGenericEnvironment(thunkGenericEnv);
37053707

3706-
SILGenFunction thunkSGF(*this, *thunk, assocFn->getDeclContext());
3708+
SILGenFunction thunkSGF(*this, *thunk, derivativeFn->getDeclContext());
37073709
SmallVector<ManagedValue, 4> params;
37083710
SmallVector<SILArgument *, 4> indirectResults;
37093711
thunkSGF.collectThunkParams(loc, params, &indirectResults);
37103712

3711-
auto *assocFnRef = thunkSGF.B.createFunctionRef(loc, assocFn);
3712-
auto assocFnRefType = assocFnRef->getType().castTo<SILFunctionType>();
3713+
auto *derivativeFnRef = thunkSGF.B.createFunctionRef(loc, derivativeFn);
3714+
auto derivativeFnRefType =
3715+
derivativeFnRef->getType().castTo<SILFunctionType>();
37133716

37143717
// Collect thunk arguments, converting ownership.
37153718
SmallVector<SILValue, 8> arguments;
37163719
for (auto *indRes : indirectResults)
37173720
arguments.push_back(indRes);
3718-
forwardFunctionArguments(thunkSGF, loc, assocFnRefType, params, arguments);
3721+
forwardFunctionArguments(thunkSGF, loc, derivativeFnRefType, params,
3722+
arguments);
37193723
// Apply function argument.
37203724
auto apply = thunkSGF.emitApplyWithRethrow(
3721-
loc, assocFnRef, /*substFnType*/ assocFnRef->getType(),
3725+
loc, derivativeFnRef, /*substFnType*/ derivativeFnRef->getType(),
37223726
thunk->getForwardingSubstitutionMap(), arguments);
37233727

37243728
// Create return instruction in the thunk, first deallocating local
@@ -3734,7 +3738,9 @@ SILGenModule::getOrCreateAutoDiffAssociatedFunctionThunk(
37343738
// If self ordering is not necessary and linear map types are unchanged,
37353739
// return the `apply` instruction.
37363740
auto linearMapFnType = cast<SILFunctionType>(
3737-
thunk->mapTypeIntoContext(assocFnRefType->getResults().back().getType())
3741+
thunk
3742+
->mapTypeIntoContext(
3743+
derivativeFnRefType->getResults().back().getType())
37383744
->getCanonicalType());
37393745
auto targetLinearMapFnType = thunk->mapTypeIntoContext(
37403746
origAssocFnType->getResults().back().getSILStorageType())
@@ -3749,7 +3755,7 @@ SILGenModule::getOrCreateAutoDiffAssociatedFunctionThunk(
37493755
extractAllElements(apply, loc, thunkSGF.B, directResults);
37503756
auto linearMap = thunkSGF.emitManagedRValueWithCleanup(directResults.back());
37513757
assert(linearMap.getType().castTo<SILFunctionType>() == linearMapFnType);
3752-
auto linearMapKind = assocFnKind.getLinearMapKind();
3758+
auto linearMapKind = derivativeFnKind.getLinearMapKind();
37533759
linearMap = thunkSGF.getThunkedAutoDiffLinearMap(
37543760
linearMap, linearMapKind, linearMapFnType, targetLinearMapFnType,
37553761
reorderSelf);

0 commit comments

Comments
 (0)