[AutoDiff] Support '@differentiable(linear)' function conversion. #27687
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
@differentiable(linear)LinearFunctionExpr.LinearFunctionExprtolinear_function.@differentiable(linear)to non-differentiableLinearFunctionExtractOriginalExpr.LinearFunctionExtractOriginalExprtolinear_function_extract [original].@differentiableto@differentiable(linear)@differentiablefunction can never come directly from a closure expression or from a declaration/member reference.@differentiable(linear)to@differentiable(TF-908)@differentiable(linear)to a derivative (JVP) function where the derivative function returns the original result and the same linear map with@nondiffparameters partial-applied away.linear_function,differentiable_function_extract, andlinear_function_extractinswift::isGuaranteedForwardingValueKindandswift::isOwnershipForwardingValueKind. This fixed a previously uncaught assertion, which was becausedifferentiable_function_extractwas inswift::isOwnershipForwardingValueKindwhile it should really be inswift::isGuaranteedForwardingValueKind.For complete conversion rules among
@differentiablefunctions, see Differentiable Programming Mega-Proposal - Type conversion.Resolves TF-900.