Commit Graph

673 Commits

Author SHA1 Message Date
swift-ci
e6a7c056a3 Merge remote-tracking branch 'origin/main' into rebranch 2021-01-13 13:32:29 -08:00
Saleem Abdulrasool
edad6810e1 test: explicitly reference SR (NFC)
Adjust the disabled tests to explicitly reference the SR.  This cleans
up the previous change to enable the autodifferentiation CI tests on
Windows.
2021-01-13 13:17:38 -08:00
Saleem Abdulrasool
d5fadcca5f Merge pull request #35384 from compnerd/windows-differential
CI: disable 4 tests, enable autodiff tests on Windows
2021-01-13 13:15:06 -08:00
swift-ci
ab3bd7d053 Merge remote-tracking branch 'origin/main' into rebranch 2021-01-13 11:52:35 -08:00
Victor Guerra
6298351ad5 [AutoDiff] Registers VJPs for FloatingPoint.[maximum|minimum] (#35379)
Resolves TF-1134.
2021-01-13 11:40:46 -08:00
Nate Chandler
20db2c0981 Merge branch 'main' into rebranch
Conflicts:
	include/swift/Basic/AnyValue.h
2021-01-12 16:30:02 -08:00
Saleem Abdulrasool
0511af57f5 CI: disable 4 tests, enable autodiff tests on Windows
This disables 4 tests:
  - DerivativeRegistrationTests.NonCanonicalizedGenericSignatureComparison
  - Reabstraction.diff param generic => concrete
  - Reabstraction.diff param and nondiff param generic => concrete
  - Reabstraction.result generic => concrete

Simultaneously, enable the remainder of the auto-diff test suite on
Windows.  These tests fail on Windows due to an invalid parameter during
the reabstraction of the generic differentiable parameters.  The
remainder of the auto-differentiation tests pass on all the platforms.
2021-01-12 14:42:50 -08:00
Richard Wei
f79391b684 [AutoDiff] Remove 'differentiableFunction(from:)' and 'linearFunction(from:)'.
Remove unused APIs `differentiableFunction(from:)` and `linearFunction(from:)`. They were never official APIs, are not included in the [initial proposal](https://github.com/rxwei/swift-evolution/blob/autodiff/proposals/0000-differentiable-programming.md#make-a-function-differentiable-using-derivative), and are unused by existing supported client libraries (SwiftFusion and S4TF). Most importantly, they block crucial optimizations on linear map closures (#34935) and would need nontrivial work in SILGen to support.
2021-01-12 11:58:48 -08:00
swift-ci
12909036d7 Merge remote-tracking branch 'origin/main' into rebranch 2021-01-09 04:12:56 -08:00
Richard Wei
eadb4bc87c [AutoDiff] Differentials should have private linkage
Like pullbacks, differentials should have private linkage, not hidden linkage. This patch fixes that.
2021-01-08 19:42:44 -08:00
swift_jenkins
797e165962 Merge remote-tracking branch 'origin/main' into next 2021-01-07 09:31:18 -08:00
Richard Wei
ffe6064101 Mangle derivative functions and linear maps.
- `Mangle::ASTMangler::mangleAutoDiffDerivativeFunction()` and `Mangle::ASTMangler::mangleAutoDiffLinearMap()` accept original function declarations and return a mangled name for a derivative function or linear map. This is called during SILGen and TBDGen.
- `Mangle::DifferentiationMangler` handles differentiation function mangling in the differentiation transform. This part is necessary because we need to perform demangling on the original function and remangle it as part of a differentiation function mangling tree in order to get the correct substitutions in the mangled derivative generic signature.

A mangled differentiation function name includes:
- The original function.
- The differentiation function kind.
- The parameter indices for differentiation.
- The result indices for differentiation.
- The derivative generic signature.
2021-01-07 02:21:10 -08:00
swift_jenkins
189718aaef Merge remote-tracking branch 'origin/main' into next 2021-01-05 09:01:24 -08:00
Richard Wei
399d1c9f34 Merge pull request #35236 from marcrasi/sr-13945
[AutoDiff] generated linear maps should be "convention(thin)"
2021-01-04 17:34:16 -08:00
Dan Zheng
126f1ac6fb [AutoDiff] Disable differentiable_function_extract explicit type as… (#35239)
`differentiability_function_extract` instruction has an optional explicit
extractee type. This is currently used by TypeSubstCloner and the
LoadableByAddress transform to rewrite `differentiability_function_extract`
instructions while preserving `@differentiable` function type invariants.

There is an assertion that `differentiability_function_extract` instructions do
not have explicit extractee types outside of canonical/lowered SIL. However,
this does not handle the SIL deserialization case above: when a function
containing a `differentiable_function_extract` instruction with an explicit type
is deserialized into a raw SIL module (which happens when optimizations are
enabled).

Removing the assertion unblocks this encountered use case.

A more robust longer-term solution may be to change SIL `@differentiable`
function types to explicitly store component original/JVP/VJP function types.

Also fix `differentiable_function_extract` extractee type serialization.

Resolves SR-14004.
2021-01-04 18:40:11 -05:00
Marc Rasi
0142e524e1 [AutoDiff] generated linear maps should be "convention(thin)" 2020-12-28 16:50:34 -08:00
swift_jenkins
cf0d385bf2 Merge remote-tracking branch 'origin/main' into next 2020-12-23 16:51:37 -08:00
Dan Zheng
f2de54678b [AutoDiff] Disable flaky test on Linux.
Disable test that occasionally flake on Linux.

SR-13021 tracks re-enabling related failing AutoDiff tests.
2020-12-23 18:54:04 -05:00
swift_jenkins
65c2c20305 Merge remote-tracking branch 'origin/main' into next 2020-12-23 04:38:06 -08:00
Dan Zheng
07f632acaa [AutoDiff] NFC: document test suite. (#35194)
Add README files explaining the differentiable programming test suite.

Add lit.local.cfg files so individual tests do not need to add
`REQUIRES: asserts` in these directories:

- test/AutoDiff/compiler_crashers
- test/AutoDiff/compiler_crashers_fixed

Motivation: it is important for compiler crasher tests to require assertions
enabled, because many of these tests crash on compiler assertions.
2020-12-23 07:19:19 -05:00
swift_jenkins
fcec26a47c Merge remote-tracking branch 'origin/main' into next 2020-12-17 11:21:35 -08:00
Dan Zheng
a8a95d0a75 [AutoDiff upstream] Enable @differentiable on setters. (#35133)
Enable `@differentiable` attribute on setters of properties and
subscripts in `Differentiable`-conforming types.

Add automatically-differentiated `@differentiable` setter test.

Resolves TF-1166.
2020-12-17 14:05:22 -05:00
swift_jenkins
20836fd582 Merge remote-tracking branch 'origin/main' into next 2020-12-14 14:33:29 -08:00
Richard Wei
8d8614058b [AudoDiff] NFC: Replace 'SILAutoDiffIndices' with 'AutoDiffConfig'. (#35079)
Resolve rdar://71678394 / SR-13889.
2020-12-14 14:32:40 -08:00
swift_jenkins
9550869d12 Merge remote-tracking branch 'origin/main' into next 2020-12-08 17:14:36 -08:00
Dan Zheng
2cf7d63a5e [AutoDiff] Fix ownership error in VJPCloner::visitApplyInst. (#35003)
Change the following code pattern:

```
%x1 = convert_function %x0 : $@differentiable (...) -> ...
%x2 = begin_borrow %x1
... // use %x2
%x3 = end_borrow %x2
destroy_value %x0
```

To the following:

```
%x1 = begin_borrow %x0 : $@differentiable (...) -> ...
%x2 = convert_function %x0
... // use %x2
%x3 = end_borrow %x1
destroy_value %x0
```

Resolves SR-13933: "multiple consuming users" ownership error caused by
`VJPCloner::visitApply` related to `@differentiable`-function-typed callees.

Also upstream test/AutoDiff/SILOptimizer/generics.swift from tensorflow branch.
2020-12-08 19:48:31 -05:00
swift_jenkins
b5f0ea4c18 Merge remote-tracking branch 'origin/main' into next 2020-12-03 22:28:07 -08:00
Anthony Latsis
413352b77c Merge pull request #34620 from AnthonyLatsis/parse-misc
Parse: Only diagnose dollar-prefixed identifiers that are Swift declarations
2020-12-04 09:09:45 +03:00
Arnold Schwaighofer
e49bccc2d1 More sret fixes 2020-12-03 10:15:24 -08:00
Arnold Schwaighofer
3ae4e6291e Merge pull request #34924 from aschwaighofer/fix_autodiff_test_failure_on_os_stdlib
The runtime function swift_autoDiffCreateLinearMapContext was recently added
2020-12-03 05:02:36 -08:00
Michael Gottesman
ec71713fb0 [ownership] Teach CanonicalizeInstruction how to eliminate trivial copies/borrows.
I am going to be using in inst-simplify/sil-combine/canonicalize instruction a
RAUW everything against everything API (*). This creates some extra ARC
traffic/borrows. It is going to be useful to have some simple peepholes that
gets rid of some of the extraneous traffic.

(*) Noting that we are not going to support replacing non-trivial
OwnershipKind::None values with non-trivial OwnershipKind::* values. This is a
corner case that only comes up with non-trivial enums that have a non-payloaded
or trivial enum case. It is much more complex to implement that transform, but
it is an edge case, so we are just not going to support those for now.

----

I also eliminated the dependence of SILGenCleanup on Swift/SwiftShims. This
speeds up iterating on the test case with a debug compiler since we don't need
those modules.
2020-12-02 17:25:13 -08:00
Arnold Schwaighofer
27a4e824c2 The runtime function swift_autoDiffCreateLinearMapContext was recently added
So these tests fail with missing symbols if the test is deployed with stdlib's on older OSes

rdar://71900166
2020-12-02 11:45:22 -08:00
Michael Gottesman
3fd4aaeb37 Merge pull request #34898 from gottesmm/pr-d3b6d903b097410b535d20940005a1fa67d3a1bf
[auto-diff] Fix a bunch of places in the *Cloners where we were not closing borrow scopes.
2020-12-01 12:42:10 -08:00
marcrasi
4e048bfc35 Merge pull request #34893 from marcrasi/make-it-automatically-inherit
inherit required protocols during TangentVector synthesis
2020-11-30 23:51:40 -08:00
Marc Rasi
6378c3ef0e fix SourceLoc-related crasher and add tests 2020-11-30 16:47:24 -08:00
Michael Gottesman
affeba98f9 [auto-diff] Fix a bunch of places in the *Cloners where we were not closing borrow scopes.
These were all just trying to open a borrow scope, so I changed them to use the
API SILBuilder::emitScopedBorrowOperation(SILLocation, SIL).
2020-11-30 16:05:37 -08:00
Richard Wei
de2dbe57ed [AutoDiff] Bump-pointer allocate pullback structs in loops. (#34886)
In derivatives of loops, no longer allocate boxes for indirect case payloads. Instead, use a custom pullback context in the runtime which contains a bump-pointer allocator.

When a function contains a differentiated loop, the closure context is a `Builtin.NativeObject`, which contains a `swift::AutoDiffLinearMapContext` and a tail-allocated top-level linear map struct (which represents the linear map struct that was previously directly partial-applied into the pullback). In branching trace enums, the payloads of previously indirect cases will be allocated by `swift::AutoDiffLinearMapContext::allocate` and stored as a `Builtin.RawPointer`.
2020-11-30 15:49:38 -08:00
Saleem Abdulrasool
b9122ef428 Merge pull request #34866 from compnerd/not-so-optional-property
test: repair Autodiff/validation-test/optional-property on Win32
2020-11-30 08:32:02 -08:00
Richard Wei
16daae9fef [AutoDiff] [Sema] Reject function types where all parameters are '@noDerivative'. (#34861)
A `@differentiable` function type require at least 1 differentiability parameter. This PR adds a diagnostic that rejects cases where all parameters are marked with `@noDerivative`. This fixes a compiler crasher.

```swift
test2.swift:3:24: error: '@differentiable' function type requires at least one differentiability parameter, i.e. a non-'@noDerivative' parameter whose type conforms to 'Differentiable'
let _: @differentiable (@noDerivative Float) -> Float = { _ in 0 }
                       ^~~~~~~~~~~~~~~~~~~~~
test2.swift:4:32: error: '@differentiable' function type requires at least one differentiability parameter, i.e. a non-'@noDerivative' parameter whose type conforms to 'Differentiable' with its 'TangentVector' equal to itself
let _: @differentiable(linear) (@noDerivative Float, @noDerivative Int) -> Float = { _, _ in 0 }
                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```
2020-11-29 23:33:15 -08:00
Marc Rasi
9e9de1d6d9 inherit required protocols during TangentVector synthesis 2020-11-24 18:33:55 -08:00
Saleem Abdulrasool
627046d849 test: repair Autodiff/validation-test/optional-property on Win32
The test relies on the module name being `null`.  This is implied by the
`-o /dev/null`.  However, that is not guaranteed.  Explicitly use the
desired module name.
2020-11-23 11:52:42 -08:00
Ben Langmuir
a0c5ffbacd [test] Temporarily disable AutoDiff tests failing with optimizations
These recently started failing when optimized. Disable while we
investigate and fix.

rdar://71642726
2020-11-20 19:47:32 -08:00
Xiaodi Wu
59f1f10b77 Merge pull request #34799 from kkshinkai/main
Fix misspellings
2020-11-20 08:25:54 -05:00
Anthony Latsis
47ce1529f0 Parse: Only diagnose dollar-prefixed identifiers that are Swift declarations 2020-11-19 20:30:53 +03:00
Kk Shinkai
a0f0747283 Fix misspellings 2020-11-18 11:47:16 +08:00
Richard Wei
35aa99bc1a [AutoDiff] Fix crasher on property getter in library evolution mode. (#34777)
`SILBuilder::createAllocStack` expects a debug variable when the location is a `VarDecl`. Since we are in pullbacks, there's no debug variables so we pass an empty one.

General support for debug-info-in-pullbacks will be added as part of SR-13535.

Also add a negative test for SR-13866.

Resolves SR-13865.
2020-11-17 14:35:19 -08:00
Richard Wei
517bcc4493 [AutoDiff] Fix differentiation transform crashers in library evolution mode. (#34704)
AD-generated data structures (linear map structs and branching trace enums) do not need to be resilient data structures. These decls ade missing a `@frozen` attribute.

Resolves rdar://71319547.
2020-11-12 13:30:56 -08:00
Michael Gottesman
58d4191470 [ownership] Try harder to make sure we do not propagate ownership info when ownership is disabled.
Specifically, I made it so that assuming our instruction is inserted into a
block already that we:

1. Return a constraint of {OwnershipKind::Any, UseLifetimeConstraint::NonLifetimeEnding}.
2. Return OwnershipKind::None for all values.

Noticed above I said that if the instruction is already inserted into a block
then we do this. The reason why is that if this is called before an instruction
is inserted into a block, we can't get access to the SILFunction that has the
information on whether or not we are in OSSA form. The only time this can happen
is if one is using these APIs from within SILBuilder since SILBuilder is the
only place where we allow this to happen. In SILBuilder, we already know whether
or not our function is in ossa or not and already does different things as
appropriate (namely in non-ossa does not call getOwnershipKind()). So we know
that if these APIs are called in such a situation, we will only be calling it if
we are in OSSA already. Given that, we just assume we are in OSSA if we do not
have a function.

To make sure that no mistakes are made as a result of that assumption, I put in
a verifier check that all values when ownership is disabled return a
OwnershipKind::None from getOwnershipKind().

The main upside to this is this means that we can write code for both
OSSA/non-OSSA and write code for non-None ownership without needing to check if
ownership is enabled.
2020-11-11 18:56:59 -08:00
swift-ci
d74c261f09 Merge pull request #34681 from rxwei/71191415-debug-scope 2020-11-10 21:23:42 -08:00
Richard Wei
c9dc67d383 [AST] Fix AutoDiff crasher in optimized builds.
`getModuleScopeContext()` can produce a `ModuleDecl *` instead of a `FileUnit *`, which happens to be the case for generic-specialized derivative functions.

Resolves rdar://71191415.
2020-11-10 16:50:21 -08:00