1
1
// RUN: %target-swift-frontend -emit-silgen -enable-experimental-differentiable-programming %s | %target-sil-opt -enable-experimental-differentiable-programming | %FileCheck %s
2
- // REQUIRES: differentiable_programming
3
2
4
3
// Test SIL differentiability witness SIL generation.
5
4
@@ -31,9 +30,9 @@ public func foo_vjp(_ x: Float) -> (value: Float, pullback: (Float) -> Float) {
31
30
}
32
31
33
32
// CHECK-LABEL: // differentiability witness for foo(_:)
34
- // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s36sil_differentiability_witness_silgen3fooyS2fF : $@convention(thin) (Float) -> Float {
35
- // CHECK-NEXT: jvp: @AD__$s36sil_differentiability_witness_silgen3fooyS2fF__jvp_src_0_wrt_0 : $@convention(thin) (Float) -> (Float, @owned @callee_guaranteed (Float) -> Float)
36
- // CHECK-NEXT: vjp: @AD__$s36sil_differentiability_witness_silgen3fooyS2fF__vjp_src_0_wrt_0 : $@convention(thin) (Float) -> (Float, @owned @callee_guaranteed (Float) -> Float)
33
+ // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s29sil_differentiability_witness3fooyS2fF : $@convention(thin) (Float) -> Float {
34
+ // CHECK-NEXT: jvp: @AD__$s29sil_differentiability_witness3fooyS2fF__jvp_src_0_wrt_0 : $@convention(thin) (Float) -> (Float, @owned @callee_guaranteed (Float) -> Float)
35
+ // CHECK-NEXT: vjp: @AD__$s29sil_differentiability_witness3fooyS2fF__vjp_src_0_wrt_0 : $@convention(thin) (Float) -> (Float, @owned @callee_guaranteed (Float) -> Float)
37
36
// CHECK-NEXT: }
38
37
39
38
// Test internal non-generic function.
@@ -50,8 +49,8 @@ public func bar_jvp<T>(_ x: Float, _ y: T) -> (value: Float, differential: (Floa
50
49
}
51
50
52
51
// CHECK-LABEL: // differentiability witness for bar<A>(_:_:)
53
- // CHECK-NEXT: sil_differentiability_witness hidden [parameters 0] [results 0] <τ_0_0> @$s36sil_differentiability_witness_silgen3baryS2f_xtlF : $@convention(thin) <T> (Float, @in_guaranteed T) -> Float {
54
- // CHECK-NEXT: jvp: @AD__$s36sil_differentiability_witness_silgen3baryS2f_xtlF__jvp_src_0_wrt_0_l : $@convention(thin) <τ_0_0> (Float, @in_guaranteed τ_0_0) -> (Float, @owned @callee_guaranteed (Float) -> Float)
52
+ // CHECK-NEXT: sil_differentiability_witness hidden [parameters 0] [results 0] <τ_0_0> @$s29sil_differentiability_witness3baryS2f_xtlF : $@convention(thin) <T> (Float, @in_guaranteed T) -> Float {
53
+ // CHECK-NEXT: jvp: @AD__$s29sil_differentiability_witness3baryS2f_xtlF__jvp_src_0_wrt_0_l : $@convention(thin) <τ_0_0> (Float, @in_guaranteed τ_0_0) -> (Float, @owned @callee_guaranteed (Float) -> Float)
55
54
// CHECK-NEXT: }
56
55
57
56
// Test internal generic function.
@@ -76,9 +75,9 @@ func generic_vjp<T: Differentiable>(_ x: T, _ y: Float) -> (
76
75
}
77
76
78
77
// CHECK-LABEL: // differentiability witness for generic<A>(_:_:)
79
- // CHECK-NEXT: sil_differentiability_witness hidden [parameters 0 1] [results 0] <τ_0_0 where τ_0_0 : Differentiable> @$s36sil_differentiability_witness_silgen7genericyxx_SftlF : $@convention(thin) <T> (@in_guaranteed T, Float) -> @out T {
80
- // CHECK-NEXT: jvp: @AD__$s36sil_differentiability_witness_silgen7genericyxx_SftlF__jvp_src_0_wrt_0_1_ {{s|16_Differentiation}}14DifferentiableRzl : $@convention(thin) <τ_0_0 where τ_0_0 : Differentiable> (@in_guaranteed τ_0_0, Float) -> (@out τ_0_0, @owned @callee_guaranteed @substituted <τ_0_0, τ_0_1> (@in_guaranteed τ_0_0, Float) -> @out τ_0_1 for <τ_0_0.TangentVector, τ_0_0.TangentVector>)
81
- // CHECK-NEXT: vjp: @AD__$s36sil_differentiability_witness_silgen7genericyxx_SftlF__vjp_src_0_wrt_0_1_ {{s|16_Differentiation}}14DifferentiableRzl : $@convention(thin) <τ_0_0 where τ_0_0 : Differentiable> (@in_guaranteed τ_0_0, Float) -> (@out τ_0_0, @owned @callee_guaranteed @substituted <τ_0_0, τ_0_1> (@in_guaranteed τ_0_0) -> (@out τ_0_1, Float) for <τ_0_0.TangentVector, τ_0_0.TangentVector>)
78
+ // CHECK-NEXT: sil_differentiability_witness hidden [parameters 0 1] [results 0] <τ_0_0 where τ_0_0 : Differentiable> @$s29sil_differentiability_witness7genericyxx_SftlF : $@convention(thin) <T> (@in_guaranteed T, Float) -> @out T {
79
+ // CHECK-NEXT: jvp: @AD__$s29sil_differentiability_witness7genericyxx_SftlF__jvp_src_0_wrt_0_1_ {{s|16_Differentiation}}14DifferentiableRzl : $@convention(thin) <τ_0_0 where τ_0_0 : Differentiable> (@in_guaranteed τ_0_0, Float) -> (@out τ_0_0, @owned @callee_guaranteed @substituted <τ_0_0, τ_0_1> (@in_guaranteed τ_0_0, Float) -> @out τ_0_1 for <τ_0_0.TangentVector, τ_0_0.TangentVector>)
80
+ // CHECK-NEXT: vjp: @AD__$s29sil_differentiability_witness7genericyxx_SftlF__vjp_src_0_wrt_0_1_ {{s|16_Differentiation}}14DifferentiableRzl : $@convention(thin) <τ_0_0 where τ_0_0 : Differentiable> (@in_guaranteed τ_0_0, Float) -> (@out τ_0_0, @owned @callee_guaranteed @substituted <τ_0_0, τ_0_1> (@in_guaranteed τ_0_0) -> (@out τ_0_1, Float) for <τ_0_0.TangentVector, τ_0_0.TangentVector>)
82
81
// CHECK-NEXT: }
83
82
84
83
public struct Foo : Differentiable {
@@ -89,7 +88,7 @@ public struct Foo: Differentiable {
89
88
public var x : Float
90
89
91
90
// CHECK-LABEL: // differentiability witness for Foo.x.getter
92
- // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s36sil_differentiability_witness_silgen3FooV1xSfvg : $@convention(method) (Foo) -> Float {
91
+ // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s29sil_differentiability_witness3FooV1xSfvg : $@convention(method) (Foo) -> Float {
93
92
// CHECK-NEXT: }
94
93
95
94
@differentiable
@@ -98,7 +97,7 @@ public struct Foo: Differentiable {
98
97
}
99
98
100
99
// CHECK-LABEL: // differentiability witness for Foo.init(_:)
101
- // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s36sil_differentiability_witness_silgen3FooVyACSfcfC : $@convention(method) (Float, @thin Foo.Type) -> Foo {
100
+ // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s29sil_differentiability_witness3FooVyACSfcfC : $@convention(method) (Float, @thin Foo.Type) -> Foo {
102
101
// CHECK-NEXT: }
103
102
104
103
@differentiable
@@ -107,7 +106,7 @@ public struct Foo: Differentiable {
107
106
}
108
107
109
108
// CHECK-LABEL: // differentiability witness for Foo.method()
110
- // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s36sil_differentiability_witness_silgen3FooV6methodSfyF : $@convention(method) (Foo) -> Float {
109
+ // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s29sil_differentiability_witness3FooV6methodSfyF : $@convention(method) (Foo) -> Float {
111
110
// CHECK-NEXT: }
112
111
113
112
@differentiable
@@ -116,7 +115,7 @@ public struct Foo: Differentiable {
116
115
}
117
116
118
117
// CHECK-LABEL: // differentiability witness for Foo.computedProperty.getter
119
- // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s36sil_differentiability_witness_silgen3FooV16computedPropertySfvg : $@convention(method) (Foo) -> Float {
118
+ // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s29sil_differentiability_witness3FooV16computedPropertySfvg : $@convention(method) (Foo) -> Float {
120
119
// CHECK-NEXT: }
121
120
122
121
@differentiable
@@ -125,7 +124,7 @@ public struct Foo: Differentiable {
125
124
}
126
125
127
126
// CHECK-LABEL: // differentiability witness for Foo.subscript.getter
128
- // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s36sil_differentiability_witness_silgen3FooVSfycig : $@convention(method) (Foo) -> Float {
127
+ // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 0] [results 0] @$s29sil_differentiability_witness3FooVSfycig : $@convention(method) (Foo) -> Float {
129
128
// CHECK-NEXT: }
130
129
}
131
130
@@ -161,17 +160,17 @@ public func wrt_subset_vjp_wrt_x_y(_ tup: (Int, Int), _ x: Float, _ y: Float) ->
161
160
}
162
161
163
162
// CHECK-LABEL: // differentiability witness for wrt_subset(_:_:_:)
164
- // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 2] [results 0] @$s36sil_differentiability_witness_silgen10wrt_subsetySfSi_Sit_S2ftF : $@convention(thin) (Int, Int, Float, Float) -> Float {
163
+ // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 2] [results 0] @$s29sil_differentiability_witness10wrt_subsetySfSi_Sit_S2ftF : $@convention(thin) (Int, Int, Float, Float) -> Float {
165
164
// CHECK-NEXT: }
166
165
167
166
// CHECK-LABEL: // differentiability witness for wrt_subset(_:_:_:)
168
- // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 3] [results 0] @$s36sil_differentiability_witness_silgen10wrt_subsetySfSi_Sit_S2ftF : $@convention(thin) (Int, Int, Float, Float) -> Float {
167
+ // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 3] [results 0] @$s29sil_differentiability_witness10wrt_subsetySfSi_Sit_S2ftF : $@convention(thin) (Int, Int, Float, Float) -> Float {
169
168
// CHECK-NEXT: jvp:
170
169
// CHECK-NEXT: vjp:
171
170
// CHECK-NEXT: }
172
171
173
172
// CHECK-LABEL: // differentiability witness for wrt_subset(_:_:_:)
174
- // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 2 3] [results 0] @$s36sil_differentiability_witness_silgen10wrt_subsetySfSi_Sit_S2ftF : $@convention(thin) (Int, Int, Float, Float) -> Float {
173
+ // CHECK-NEXT: sil_differentiability_witness [serialized] [parameters 2 3] [results 0] @$s29sil_differentiability_witness10wrt_subsetySfSi_Sit_S2ftF : $@convention(thin) (Int, Int, Float, Float) -> Float {
175
174
// CHECK-NEXT: jvp:
176
175
// CHECK-NEXT: vjp:
177
176
// CHECK-NEXT: }
@@ -191,8 +190,8 @@ extension P1 {
191
190
}
192
191
193
192
// CHECK-LABEL: // differentiability witness for P1.foo()
194
- // CHECK-NEXT: sil_differentiability_witness hidden [parameters 0] [results 0] <τ_0_0 where τ_0_0 : P1> @$s36sil_differentiability_witness_silgen2P1PAAE3fooSfyF : $@convention(method) <Self where Self : P1> (@in_guaranteed Self) -> Float {
195
- // CHECK-NEXT: vjp: @AD__$s36sil_differentiability_witness_silgen2P1PAAE3fooSfyF__vjp_src_0_wrt_0_36sil_differentiability_witness_silgen2P1Rzl : $@convention(method) <τ_0_0 where τ_0_0 : P1> (@in_guaranteed τ_0_0) -> (Float, @owned @callee_guaranteed @substituted <τ_0_0> (Float) -> @out τ_0_0 for <τ_0_0.TangentVector>)
193
+ // CHECK-NEXT: sil_differentiability_witness hidden [parameters 0] [results 0] <τ_0_0 where τ_0_0 : P1> @$s29sil_differentiability_witness2P1PAAE3fooSfyF : $@convention(method) <Self where Self : P1> (@in_guaranteed Self) -> Float {
194
+ // CHECK-NEXT: vjp: @AD__$s29sil_differentiability_witness2P1PAAE3fooSfyF__vjp_src_0_wrt_0_29sil_differentiability_witness2P1Rzl : $@convention(method) <τ_0_0 where τ_0_0 : P1> (@in_guaranteed τ_0_0) -> (Float, @owned @callee_guaranteed @substituted <τ_0_0> (Float) -> @out τ_0_0 for <τ_0_0.TangentVector>)
196
195
// CHECK-NEXT: }
197
196
198
197
// Test custom derivatives of functions with generic signatures and `@differentiable` attributes.
0 commit comments