Commit Graph

110 Commits

Author SHA1 Message Date
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
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
Saleem Abdulrasool
2fc5cbdc14 stdlib: remove swiftMSVCRT, replace with swiftCRT on Windows
This replaces swiftMSVCRT with swiftCRT.  The big difference here is
that the `visualc` module is no longer imported nor exported.  The
`visualc` module remains in use for a singular test wrt availability,
but this should effectively remove the need for the `visualc` module.

The difference between the MSVCRT and ucrt module was not well
understood by most.  MSVCRT provided ucrt AND visualc, combining pieces
of the old MSVCRT and the newer ucrt.  The ucrt module is what you
really wanted most of the time, however, would need to use MSVCRT for
the convenience aliases for type-generic math and the deprecated math
constants.

Unfortunately, we cannot shadow the `ucrt` module and create a Swift SDK
overlay for ucrt as that seems to result in circular dependencies when
processing the `_Concurrency` module.

Although this makes using the C library easier for most people, it has a
more important subtle change: it cleaves the dependency on visualc.
This means that this enables use of Swift without Visual Studio for the
singular purpose of providing 3 header files.  Additionally, it removes
the need for the installation of 2 of the 4 support files.  This greatly
simplifies the deployment process on Windows.
2020-10-15 16:02:01 -07:00
Dan Zheng
cfd75a1667 [AutoDiff] Fix forward-mode differentiation ownership verification failure. (#33898)
Previously, `LinearMapInfo::shouldDifferentiateInstruction` had a special case
for `copy_value`, returning true for `copy_value` instructions with an active
operand.

This is unexpected and led to "leaked owned value" ownership verification
failures due to unnecessarily cloned `copy_value` instructions during
differential generation.

Now, the special case is removed, fixing the failures.
`shouldDifferentiateInstruction` returns true for `copy_value` instructions
whose operand and result are both active.

Resolves SR-13530.
2020-09-10 18:49:04 -07:00
Alex Efremov
a532756cd6 [AutoDiff] Split forward_mode.swift test into separate files. (#33728)
Splits the large `forward_mode.swift` test file into 3 files:

- `forward_mode_simple.swift`
- `forward_mode_array.swift`
- `forward_mode_simd.swift`

This significantly speeds up testing time when tests are run in parallel.
2020-09-09 20:49:12 -07:00
Dan Zheng
9de171a51f [AutoDiff] Add missing REQUIRES: asserts to test. (#33874)
`test/AutoDiff/validation-test/optional-property.swift` uses
`-Xllvm -debug-only=differentiation`, which requires assertions enabled.
2020-09-09 15:20:01 -07:00
Alex Efremov
0ceaa5899c [AutoDiff] Fix forward-mode crashes related to tangent buffers (#33633)
Fixes foward-mode crashed related to:
- Missing tangent buffers for non-wrt `inout` parameters.
- Tangent buffers not being initialized due to the corresponding original
  buffer intialization instructions being non-active.
- Non-varied indirect results not being initialized.
- `emitDestroyValue` crashes due to `TangentVector` value category mismatch.

Resolves TF-984 and SR-13447.

Co-authored-by: Dan Zheng <danielzheng@google.com>
2020-09-08 18:15:48 -07:00
Dan Zheng
5c3cb36a7c Merge pull request #33611 from dan-zheng/autodiff-fix-tangent-value-category
[AutoDiff] Fix PullbackCloner tangent value category mismatch issues.
2020-09-03 11:51:56 -07:00
Richard Wei
76d0648e60 [AutoDiff] [Sema] Include certain 'let' properties in 'Differentiable' derived conformances. (#33700)
In `Differentiable` derived conformances, `let` properties are currently treated as if they had `@noDerivative` and excluded from the derived `Differentiable` conformance implementation. This is limiting to properties that have a non-mutating `move(along:)` (e.g. class properties), which can be mathematically treated as differentiable variables.

This patch changes the derived conformances behavior such that `let` properties will be included as differentiable variables if they have a non-mutating `move(along:)`. This unblocks the following code:

```swift
final class Foo: Differentiable {
   let x: ClassStuff // Class type with a non-mutating 'move(along:)'

   // Synthesized code:
   //   struct TangentVector {
   //     var x: ClassStuff.TangentVector
   //   }
   //   ...
   //   func move(along direction: TangentVector) {
   //     x.move(along: direction.x)
   //   }
}
```

Resolves SR-13474 (rdar://67982207).
2020-08-29 21:46:58 -07:00
Dan Zheng
48c048f34d [AutoDiff] Fix PullbackCloner tangent value category mismatch issues.
Fix SIL pullback function type calculation: remap original `unowned` results to
the correct pullback parameter convention depending on the `TangentVector` type
lowering.

Make `PullbackCloner` visitors for the following instructions check and handle
tangent value categories: `struct`, `struct_extract`, `tuple`, `destructure_tuple`.

Add differentiation tests for `Optional` struct and class stored properties,
exercising the instruction visitors above.

Resolves SR-13430.
2020-08-24 10:39:23 -07:00
Alex Efremov
83b2ebe8f1 [AutoDiff] Support forward mode differentiation of functions with inout parameters (#33584)
Adds forward mode support for `apply` instruction with `inout` arguments.

Example of supported code:
```
func add(_ x: inout Float, _ y: inout Float) -> Float {
  var result = x
  result += y
  return result
}
print(differential(at: 1, 1, in: add)(1, 1)) // prints "2"
```
2020-08-21 17:57:39 -07:00
Dan Zheng
e2a1862870 [AutoDiff upstream] Add inout parameter differentiation tests. (#33555) 2020-08-19 17:05:52 -07:00
Alex Efremov
40c448514a [AutoDiff] Support differentiation of non-active try_apply. (#33483)
Add differentiation support for non-active `try_apply` SIL instructions.

Notable pullback generation changes:
* Original basic blocks are now visited in a different order:
* starting from the original basic block, all its predecessors
* are visited in a breadth-first search order. This ensures that
* all successors of any block are visited before the block itself.

Resolves TF-433.
2020-08-15 10:22:28 -07:00
Dan Zheng
4391f4264e [AutoDiff] Fix Optional differentiation crash. (#33386)
Fix `Optional` differentiation crash for non-resilient `Wrapped` reference type.
Add `NonresilientTracked` type to `DifferentiationUnittest` for testing.

Resolves SR-13377.
2020-08-11 09:14:12 -07:00
Alex Efremov
ccca08b7f7 [AutoDiff] Add reverse-mode switch_enum support for Optional. (#33218)
Pullback generation now supports `switch_enum` and `switch_enum_addr`
instructions for `Optional`-typed operands.

Currently, the logic is special-cased to `Optional`, but may be generalized in
the future to support enums following general rules.
2020-08-07 17:56:15 -07:00
Dan Zheng
849c63634c [AutoDiff] Fix differentiation for non-wrt inout parameters. (#33304)
Fix SIL differential function type calculation to handle non-wrt `inout`
parameters.

Patch `SILFunctionType::getDifferentiabilityResultIndices` to prevent returning
empty result indices for `@differentiable` function types with no formal results
where all `inout` parameters are `@noDerivative`. TF-1305 tracks a robust fix.

Resolves SR-13305.

Exposes TF-1305: parameter/result differentiability hole for `inout` parameters.
2020-08-05 09:34:06 -07:00
Dan Zheng
8e7dc70fa8 [AutoDiff] NFC: Garden test. (#33263)
Remove unused commented lines.
2020-08-03 23:19:38 -07:00
Rintaro Ishizaki
8ac2abc81c [Tests] Guard Float80 usage in AutoDiff test
Float80 is avaialble in limited platforms

rdar://problem/66409898
2020-07-31 23:26:14 -07:00
Dan Zheng
9fe0ed24be [AutoDiff] Fix class differentiation. (#33151)
Fix pullback generation for `unchecked_ref_cast` and `upcast` instructions
for class types with an address tangent value category.

Upstream end-to-end class differentiation tests.
2020-07-30 11:22:42 -07:00
Alex Efremov
17eafafbd2 [AutoDiff] [stdlib] Fix a bug in _jvpMultiply in SIMDDifferentiation.swift.gyb (#32963) 2020-07-23 14:25:57 -07:00
Dan Zheng
b6c3ab1e58 [AutoDiff] Disable failing test: SR-13250. (#32981) 2020-07-19 10:05:07 -07:00
Mike Ash
78594e9437 [Test] Mark differentiable_protocol_requirements as requiring executable_test 2020-07-17 17:17:47 -04:00
Dan Zheng
3b8b632687 [AutoDiff upstream] Add @differentiable protocol requirement tests. (#32939) 2020-07-16 21:22:17 -07:00
Alex Efremov
cff144af13 [AutoDiff][stdlib] Add JVPs to SIMDDifferentiation.swift.gyb (#32854) 2020-07-14 12:59:36 -07:00
Alex Efremov
bfcf12bac6 [AutoDiff][stdlib] Add JVPs to ArrayDifferentiation.swift (#32840)
Adds JVPs to `Array` and `Array.DifferentiableView`

`_jvpDifferentiableReduce` is taken from #29324
2020-07-12 15:04:33 -07:00
ematejska
fbec91a1b5 [Autodiff] Derivative Registration for the Get and Set Accessors (#32614)
* initial changes

* Add tests, undo unnecessary changes.

* Fixing up computed properties accessors and adding tests for getters.

* Adding nested type testcase

* Fixing error message for when accessor is referenced but not acutally found.

* Cleanup.

- Improve diagnostic message.
- Clean up code and tests.
- Delete unrelated nested type `@derivative` attribute tests.

* Temporarily disable class subscript setter derivative registration test.

Blocked by SR-13096.

* Adding libsyntax integration and fixing up an error message.

* Added a helper function for checking if the next token is an accessor label.

* Update utils/gyb_syntax_support/AttributeNodes.py

Co-authored-by: Dan Zheng <danielzheng@google.com>

* Update lib/Parse/ParseDecl.cpp

Co-authored-by: Dan Zheng <danielzheng@google.com>

* Add end-to-end derivative registration tests.

* NFC: run `git clang-format`.

* NFC: clean up formatting.

Re-apply `git clang-format`.

* Clarify parsing ambiguity FIXME comments.

* Adding couple of more testcases and fixing up error message for when accessor is not found on functions resolved.

* Update lib/Sema/TypeCheckAttr.cpp

Co-authored-by: Dan Zheng <danielzheng@google.com>

Co-authored-by: Dan Zheng <danielzheng@google.com>
2020-07-01 20:14:58 -07:00
Robert Widmann
b766544327 Merge pull request #32642 from CodaFi/ossignpost
[Gardening] Clean Up OS Conditionals With canImport and Vendor=apple
2020-07-01 12:08:15 -07:00
Robert Widmann
cddf73ecdb [Gardening] Clean Up OS-Test Patterns Across The Codebase
Clean up a few general patterns that are now obviated by canImport

This aligns more generally with the cleanup that the Swift Package
Manager has already done in their automated XCTest-plumbing tool in
apple/swift-package-manager#1826.
2020-06-30 22:55:58 -07:00
Dan Zheng
1bc9159e4f [AutoDiff] Support differentiation of functions with multiple results in SIL. (#32629)
Reverse-mode differentiation now supports `apply` instructions with multiple
active "semantic results" (formal results or `inout` parameters).

The "cannot differentiate through multiple results" non-differentiability error
is lifted.

Resolves TF-983.
2020-06-30 17:33:25 -07:00
Dan Zheng
46c2073784 [AutoDiff] Start supporting loadable types with address-only tangents. (#32540)
Previously, PullbackEmitter assumed that original values' value category
matches their `TangentVector` types' value category. This was problematic
for loadable types with address-only `TangentVector` types.

Now, PullbackEmitter starts to support differentiation of loadable types with
address-only `TangentVector` types. This patch focuses on supporting and testing
class types, more support can be added incrementally.

Resolves TF-1149.
2020-06-25 08:27:03 -07:00
Dan Zheng
bcae5016dd [AutoDiff] NFC: garden test. (#32209)
Clarify test name and contents.
2020-06-05 16:26:42 -07:00
Dan Zheng
756788eb95 [AutoDiff upstream] Add forward-mode differentiation runtime tests. (#32106)
Forward-mode differentiation development isn't currently prioritized, but
upstreaming tests allows us to prevent regressions.
2020-05-30 21:37:50 -07:00
Dan Zheng
a6bb9742fe [AutoDiff] NFC: garden tests. (#32102)
Remove extraneous code.
Clarify test name: test/AutoDiff/SIL/Serialization/differentiable_function_type.swift.
2020-05-30 11:51:49 -07:00
Dan Zheng
f9c5d7ae6c [AutoDiff] Derive Differentiable.zeroTangentVectorInitializer. (#31823)
`Differentiable` conformance derivation now supports
`Differentiable.zeroTangentVectorInitializer`.

There are two potential cases:
1. Memberwise derivation: done when `TangentVector` can be initialized memberwise.
2. `{ TangentVector.zero }` derivation: done as a fallback.

`zeroTangentVectorInitializer` is a closure that produces a zero tangent vector,
capturing minimal necessary information from `self`.

It is an instance property, unlike the static property `AdditiveArithmetic.zero`,
and should be used by the differentiation transform for correctness.

Remove `Differentiable.zeroTangentVectorInitializer` dummy default implementation.

Update stdlib `Differentiable` conformances and tests.
Clean up DerivedConformanceDifferentiable.cpp cruft.

Resolves TF-1007.
Progress towards TF-1008: differentiation correctness for projection operations.
2020-05-29 01:59:52 -07:00
Dan Zheng
d5d076db6a [AutoDiff] Support differentiation of branching cast instructions.
Support differentiation of `is` and `as?` operators.

These operators lower to branching cast SIL instructions, requiring control
flow differentiation support.

Resolves SR-12898.
2020-05-28 12:54:38 -07:00
Dan Zheng
24de636822 [AutoDiff] Re-enable control_flow.swift test.
This test was disabled in SR-12741 due to iphonesimulator-i386 failures.
Enabling the test on other platforms is important to prevent regressions.
2020-05-28 12:41:55 -07:00
Dan Zheng
e3938b5c7d [AutoDiff] Fix Array.append(_:) pullback.
The derivative wrt `self` should drop the last element from the incoming seed.

Example:
- Incoming seed: [1, 2, 3, 4]
- Derivative wrt `self`: [1, 2, 3]
- Derivative wrt appended element: 4
2020-05-14 09:27:50 -07:00
Dan Zheng
2e690e2d5e [AutoDiff] NFC: garden array differentiation.
Use consistent variable naming. Reorganize code.
2020-05-14 09:27:50 -07:00
Dan Zheng
212c89d869 [AutoDiff] NFC: add clarifying comments to test. 2020-05-11 01:43:43 -07:00
Dan Zheng
96f3f6fbcb [AutoDiff] Finish wrapped property differentiation support.
Add special-case VJP generation support for "semantic member accessors".
This is necessary to avoid activity analysis related diagnostics and simplifies
generated code.

Fix "wrapped property mutability" check in `Differentiable` derived conformnances.
This resolves SR-12642.

Add e2e test using real world property wrappers (`@Lazy` and `@Clamping`).
2020-05-10 15:55:29 -07:00
Dan Zheng
1f5818a5e9 [AutoDiff] Support property wrapper differentiation.
Support differentiation of property wrapper wrapped value getters and setters.

Create new pullback generation code path for "semantic member accessors".
"Semantic member accessors" are attached to member properties that have a
corresponding tangent stored property in the parent `TangentVector` type.

These accessors have special-case pullback generation based on their semantic
behavior. Currently, only getters and setters are supported.

This special-case pullback generation is currently used for stored property
accessors and property wrapper wrapped value accessors. In the future, it can
also be used to support `@differentiable(useInTangentVector)` computed
properties: SR-12636.

User-defined accesors cannot use this code path because they may use custom
logic that does not semantically perform a member access.

Resolves SR-12639.
2020-05-09 16:43:06 -07:00
Andrew Trick
4150dbd2ed SR-12741: disable AutoDiff/validation-test/control_flow.swift. 2020-05-06 01:08:06 -07:00
Dan Zheng
bab23d8298 SILOptimizer: fix partial_apply optimization. (#31552)
`partial_apply` can be rewritten to `thin_to_thick_function` only if the
specialized callee is `@convention(thin)`.

This condition is newly exercised by the differentiation transform:
`{JVP,VJP}Emitter::visitApplyInst` generates argument-less `partial_apply`
with `@convention(method)` callees.

Resolves SR-12732.
2020-05-05 09:09:42 -07:00
Andrew Trick
2f1b21d64c Temporarily disable 3 AutoDiff tests: SR-12732
https://bugs.swift.org/browse/SR-12732
3 AutoDiff test failures: crashing in SIL verification

Failing Tests (3):
06:26:12     Swift(macosx-x86_64) :: AutoDiff/validation-test/derivative_registration.swift
06:26:12     Swift(macosx-x86_64) :: AutoDiff/validation-test/custom_derivatives.swift
06:26:12     Swift(macosx-x86_64) :: AutoDiff/stdlib/derivative_customization.swift

Possibly from:

commit 738ef730e8
Author: Dan Zheng <danielzheng@google.com>
Date:   Mon May 4 00:44:48 2020 -0700

    [AutoDiff] Fix `@differentiable` attribute derivative configurations. (#31524)
2020-05-04 14:34:51 -07:00
Saleem Abdulrasool
debc627ce5 Merge pull request #31332 from compnerd/custom-derivative
test: repair the `custom_derivative` test
2020-04-26 16:11:56 -07:00
Saleem Abdulrasool
fef09af0b1 Merge pull request #31330 from compnerd/autodiff-module
test: repair the `separate_tangent_type` test on Windows
2020-04-26 16:10:45 -07:00
Saleem Abdulrasool
54e4994f6f test: repai the custom_derivative test
The test imports the C library for the math library.  Add a case for
Windows.
2020-04-26 11:56:03 -07:00
Saleem Abdulrasool
e18a61f1a4 test: repair the cross_module_derivative_attr test
Convert to dynamic libraries, fix the run lines, remove the workaround
for the TBD validation.
2020-04-26 11:53:03 -07:00
Saleem Abdulrasool
281d5198ce test: repair the separate_tangent_type test on Windows 2020-04-26 11:44:41 -07:00