Skip to content

Commit 6f4b812

Browse files
committed
[AutoDiff upstream] Fix LinearMapInfo result indices calculation.
Result indices capacity should equal original function "semantic result" count (formal results and `inout` parameters), not just the formal result count. Fixes `inout` parameter differentiation.
1 parent a282ee6 commit 6f4b812

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

lib/SILOptimizer/Utils/Differentiation/LinearMapInfo.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,11 @@ LinearMapInfo::createBranchingTraceDecl(SILBasicBlock *originalBB,
122122
auto &file = getSynthesizedFile();
123123
// Create a branching trace enum.
124124
Mangle::ASTMangler mangler;
125+
auto originalFnTy = original->getLoweredFunctionType();
126+
auto numResults = originalFnTy->getNumResults() +
127+
originalFnTy->getNumIndirectMutatingParameters();
125128
auto *resultIndices = IndexSubset::get(
126-
original->getASTContext(),
127-
original->getLoweredFunctionType()->getNumResults(), indices.source);
129+
original->getASTContext(), numResults, indices.source);
128130
auto *parameterIndices = indices.parameters;
129131
AutoDiffConfig config(parameterIndices, resultIndices, genericSig);
130132
auto enumName = mangler.mangleAutoDiffGeneratedDeclaration(
@@ -193,9 +195,11 @@ LinearMapInfo::createLinearMapStruct(SILBasicBlock *originalBB,
193195
auto &file = getSynthesizedFile();
194196
// Create a linear map struct.
195197
Mangle::ASTMangler mangler;
198+
auto originalFnTy = original->getLoweredFunctionType();
199+
auto numResults = originalFnTy->getNumResults() +
200+
originalFnTy->getNumIndirectMutatingParameters();
196201
auto *resultIndices = IndexSubset::get(
197-
original->getASTContext(),
198-
original->getLoweredFunctionType()->getNumResults(), indices.source);
202+
original->getASTContext(), numResults, indices.source);
199203
auto *parameterIndices = indices.parameters;
200204
AutoDiffConfig config(parameterIndices, resultIndices, genericSig);
201205
auto structName = mangler.mangleAutoDiffGeneratedDeclaration(

0 commit comments

Comments
 (0)