swift
0266a0a0 - [AutoDiff][sil-combine] Support `differentiable_function` with borrowed scopes (#87826)

Commit
70 days ago
[AutoDiff][sil-combine] Support `differentiable_function` with borrowed scopes (#87826) Support folding `differentiable_function_extract` of `differentiable_function` in presence of borrowed scopes. Such folding is crucial for VJP inlining, which is required for AutoDiff closure specialization (ADCS) pass working properly. Such handling was not required previously, but now ADCS runs in presence of OSSA, making handling of borrowed scopes essential. The folding logic is based on similar logic for `struct`/`struct_extract` simplification. Note that the `AutoDiff/SILOptimizer/licm_context.swift` test needs to be modified since it relies on specific inlining behavior. Particularly, we need to force inlining of the implicitly generated VJP of `B.a()` into the VJP of `q()`. Without `@inline(__always)`, this particular inlining decision stops happening on MacOS because the SIL combiner changes from this patch affect the inlining decisions. The changes from this patch make some new inlining decisions possible to be taken befor attempting to inline the VJP of `B.a()` into the VJP of `q()`. As a result, the VJP of `B.a()` becomes bigger because of other VJPs being inlined into that, and the inlining cost of `B.a()` VJP becomes too high when trying to perform inlining inside the VJP of `q()`. Depends on #87859 to allow force-inlining in `AutoDiff/SILOptimizer/licm_context.swift`.
Author
Parents
Loading