Skip to content

Commit 0340e9a

Browse files
author
marcrasi
authored
Merge pull request swiftlang#30887 from marcrasi/ad-upstream-tests
[AutoDiff upstream] witness table IRGen test
2 parents e162d0a + 105e3b2 commit 0340e9a

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// RUN: %target-swift-frontend -parse-sil %s -emit-ir | %FileCheck %s
2+
3+
sil_stage canonical
4+
5+
import _Differentiation
6+
import Builtin
7+
import Swift
8+
import SwiftShims
9+
10+
protocol DifferentiableRequirement {
11+
@differentiable(wrt: x)
12+
func f(_ x: Float) -> Float
13+
}
14+
15+
struct DifferentiableConformance : DifferentiableRequirement {
16+
@differentiable(wrt: x)
17+
func f(_ x: Float) -> Float
18+
@derivative(of: f)
19+
func df(_ x: Float) -> (value: Float, differential: (Float) -> Float)
20+
@derivative(of: f)
21+
func pf(_ x: Float) -> (value: Float, pullback: (Float) -> Float)
22+
}
23+
24+
struct AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceV1fyS2fF__Type__src_0_wrt_0 {
25+
}
26+
27+
// DifferentiableConformance.f(_:)
28+
sil hidden @$s41witness_table_differentiable_requirements25DifferentiableConformanceV1fyS2fF : $@convention(method) (Float, DifferentiableConformance) -> Float {
29+
bb0(%0 : $Float, %1 : $DifferentiableConformance):
30+
return undef : $Float
31+
} // end sil function '$s41witness_table_differentiable_requirements25DifferentiableConformanceV1fyS2fF'
32+
33+
// DifferentiableConformance.df(_:)
34+
sil hidden @$s41witness_table_differentiable_requirements25DifferentiableConformanceV2dfySf_S2fctSfF : $@convention(method) (Float, DifferentiableConformance) -> (Float, @owned @callee_guaranteed (Float) -> Float) {
35+
bb0(%0 : $Float, %1 : $DifferentiableConformance):
36+
return undef : $(Float, @callee_guaranteed (Float) -> Float)
37+
}
38+
39+
// DifferentiableConformance.pf(_:)
40+
sil hidden @$s41witness_table_differentiable_requirements25DifferentiableConformanceV2pfySf_S2fctSfF : $@convention(method) (Float, DifferentiableConformance) -> (Float, @owned @callee_guaranteed (Float) -> Float) {
41+
bb0(%0 : $Float, %1 : $DifferentiableConformance):
42+
return undef : $(Float, @callee_guaranteed (Float) -> Float)
43+
} // end sil function '$s41witness_table_differentiable_requirements25DifferentiableConformanceV2pfySf_S2fctSfF'
44+
45+
// protocol witness for DifferentiableRequirement.f(_:) in conformance DifferentiableConformance
46+
sil private [transparent] [thunk] @$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW : $@convention(witness_method: DifferentiableRequirement) (Float, @in_guaranteed DifferentiableConformance) -> Float {
47+
bb0(%0 : $Float, %1 : $*DifferentiableConformance):
48+
return undef : $Float
49+
} // end sil function '$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW'
50+
51+
// AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_jvp_SU
52+
sil private [transparent] [thunk] @AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_jvp_SU : $@convention(witness_method: DifferentiableRequirement) (Float, @in_guaranteed DifferentiableConformance) -> (Float, @owned @callee_guaranteed (Float) -> Float) {
53+
bb0(%0 : $Float, %1 : $*DifferentiableConformance):
54+
return undef : $(Float, @callee_guaranteed (Float) -> Float)
55+
} // end sil function 'AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_jvp_SU'
56+
57+
// AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_vjp_SU
58+
sil private [transparent] [thunk] @AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_vjp_SU : $@convention(witness_method: DifferentiableRequirement) (Float, @in_guaranteed DifferentiableConformance) -> (Float, @owned @callee_guaranteed (Float) -> Float) {
59+
bb0(%0 : $Float, %1 : $*DifferentiableConformance):
60+
return undef : $(Float, @callee_guaranteed (Float) -> Float)
61+
} // end sil function 'AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_vjp_SU'
62+
63+
// AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceV1fyS2fF__adjoint_src_0_wrt_0
64+
sil hidden @AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceV1fyS2fF__adjoint_src_0_wrt_0 : $@convention(method) (Float, AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceV1fyS2fF__Type__src_0_wrt_0, Float, Float, DifferentiableConformance) -> Float {
65+
bb0(%0 : $Float, %1 : $AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceV1fyS2fF__Type__src_0_wrt_0, %2 : $Float, %3 : $Float, %4 : $DifferentiableConformance):
66+
return undef : $Float
67+
} // end sil function 'AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceV1fyS2fF__adjoint_src_0_wrt_0'
68+
69+
sil_witness_table hidden DifferentiableConformance: DifferentiableRequirement module witness_tables_autodiff {
70+
method #DifferentiableRequirement.f: <Self where Self : DifferentiableRequirement> (Self) -> (Float) -> Float : @$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW // protocol witness for DifferentiableRequirement.f(_:) in conformance DifferentiableConformance
71+
method #DifferentiableRequirement.f!jvp.SU.<Self where Self : DifferentiableRequirement>: <Self where Self : DifferentiableRequirement> (Self) -> (Float) -> Float : @AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_jvp_SU // AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_jvp_SU
72+
method #DifferentiableRequirement.f!vjp.SU.<Self where Self : DifferentiableRequirement>: <Self where Self : DifferentiableRequirement> (Self) -> (Float) -> Float : @AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_vjp_SU // AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_vjp_SU
73+
}
74+
75+
// CHECK: @"$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementAAWP" = hidden constant [4 x i8*] [
76+
// CHECK-SAME: i8* bitcast (%swift.protocol_conformance_descriptor* @"$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementAAMc" to i8*),
77+
// CHECK-SAME: i8* bitcast (float (float, %T41witness_table_differentiable_requirements25DifferentiableConformanceV*, %swift.type*, i8**)* @"$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW" to i8*),
78+
// CHECK-SAME: i8* bitcast ({ float, i8*, %swift.refcounted* } (float, %T41witness_table_differentiable_requirements25DifferentiableConformanceV*, %swift.type*, i8**)* @"AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_jvp_SU" to i8*),
79+
// CHECK-SAME: i8* bitcast ({ float, i8*, %swift.refcounted* } (float, %T41witness_table_differentiable_requirements25DifferentiableConformanceV*, %swift.type*, i8**)* @"AD__$s41witness_table_differentiable_requirements25DifferentiableConformanceVAA0E11RequirementA2aDP1fyS2fFTW_vjp_SU" to i8*)
80+
// CHECK-SAME: ]

0 commit comments

Comments
 (0)