@@ -68,29 +68,30 @@ func cond(_ x: Float) -> Float {
68
68
// CHECK-SIL: [[PB:%.*]] = partial_apply [callee_guaranteed] [[PULLBACK_REF]]([[BB3_PB_STRUCT]])
69
69
// CHECK-SIL: [[VJP_RESULT:%.*]] = tuple ([[ORIG_RES]] : $Float, [[PB]] : $@callee_guaranteed (Float) -> Float)
70
70
// CHECK-SIL: return [[VJP_RESULT]]
71
+ // CHECK-SIL-LABEL: } // end sil function 'AD__cond__vjp_src_0_wrt_0'
71
72
72
73
73
74
// CHECK-SIL-LABEL: sil private [ossa] @AD__cond__pullback_src_0_wrt_0 : $@convention(thin) (Float, @owned _AD__cond_bb3__PB__src_0_wrt_0) -> Float {
74
75
// CHECK-SIL: bb0([[SEED:%.*]] : $Float, [[BB3_PB_STRUCT:%.*]] : @owned $_AD__cond_bb3__PB__src_0_wrt_0):
75
76
// CHECK-SIL: [[BB3_PRED:%.*]] = destructure_struct [[BB3_PB_STRUCT]] : $_AD__cond_bb3__PB__src_0_wrt_0
76
- // CHECK-SIL: switch_enum [[BB3_PRED]] : $_AD__cond_bb3__Pred__src_0_wrt_0, case #_AD__cond_bb3__Pred__src_0_wrt_0.bb2!enumelt: bb3 , case #_AD__cond_bb3__Pred__src_0_wrt_0.bb1!enumelt: bb1
77
+ // CHECK-SIL: switch_enum [[BB3_PRED]] : $_AD__cond_bb3__Pred__src_0_wrt_0, case #_AD__cond_bb3__Pred__src_0_wrt_0.bb2!enumelt: bb1 , case #_AD__cond_bb3__Pred__src_0_wrt_0.bb1!enumelt: bb3
77
78
78
- // CHECK-SIL: bb1([[BB3_PRED1_TRAMP_PB_STRUCT :%.*]] : @owned $_AD__cond_bb1__PB__src_0_wrt_0 ):
79
- // CHECK-SIL: br bb2({{%.*}} : $Float, {{%.*}}: $Float, [[BB3_PRED1_TRAMP_PB_STRUCT ]] : $_AD__cond_bb1__PB__src_0_wrt_0 )
79
+ // CHECK-SIL: bb1([[BB3_PRED2_TRAMP_PB_STRUCT :%.*]] : @owned $_AD__cond_bb2__PB__src_0_wrt_0 ):
80
+ // CHECK-SIL: br bb2({{%.*}} : $Float, {{%.*}}: $Float, [[BB3_PRED2_TRAMP_PB_STRUCT ]] : $_AD__cond_bb2__PB__src_0_wrt_0 )
80
81
81
- // CHECK-SIL: bb2({{%.*}} : $Float, {{%.*}} : $Float, [[BB1_PB_STRUCT:%.*]] : @owned $_AD__cond_bb1__PB__src_0_wrt_0):
82
- // CHECK-SIL: ([[BB1_PRED:%.*]], [[BB1_PB:%.*]]) = destructure_struct [[BB1_PB_STRUCT]]
83
- // CHECK-SIL: [[BB1_ADJVALS:%.*]] = apply [[BB1_PB]]([[SEED]]) : $@callee_guaranteed (Float) -> (Float, Float)
84
- // CHECK-SIL: switch_enum [[BB1_PRED]] : $_AD__cond_bb1__Pred__src_0_wrt_0, case #_AD__cond_bb1__Pred__src_0_wrt_0.bb0!enumelt: bb5
85
-
86
- // CHECK-SIL: bb3([[BB3_PRED2_TRAMP_PB_STRUCT:%.*]] : @owned $_AD__cond_bb2__PB__src_0_wrt_0):
87
- // CHECK-SIL: br bb4({{%.*}} : $Float, {{%.*}}: $Float, [[BB3_PRED2_TRAMP_PB_STRUCT]] : $_AD__cond_bb2__PB__src_0_wrt_0)
88
-
89
- // CHECK-SIL: bb4({{%.*}} : $Float, {{%.*}} : $Float, [[BB2_PB_STRUCT:%.*]] : @owned $_AD__cond_bb2__PB__src_0_wrt_0):
82
+ // CHECK-SIL: bb2({{%.*}} : $Float, {{%.*}} : $Float, [[BB2_PB_STRUCT:%.*]] : @owned $_AD__cond_bb2__PB__src_0_wrt_0):
90
83
// CHECK-SIL: ([[BB2_PRED:%.*]], [[BB2_PB:%.*]]) = destructure_struct [[BB2_PB_STRUCT]]
91
84
// CHECK-SIL: [[BB2_ADJVALS:%.*]] = apply [[BB2_PB]]([[SEED]]) : $@callee_guaranteed (Float) -> (Float, Float)
92
85
// CHECK-SIL: switch_enum [[BB2_PRED]] : $_AD__cond_bb2__Pred__src_0_wrt_0, case #_AD__cond_bb2__Pred__src_0_wrt_0.bb0!enumelt: bb6
93
86
87
+ // CHECK-SIL: bb3([[BB3_PRED1_TRAMP_PB_STRUCT:%.*]] : @owned $_AD__cond_bb1__PB__src_0_wrt_0):
88
+ // CHECK-SIL: br bb4({{%.*}} : $Float, {{%.*}}: $Float, [[BB3_PRED1_TRAMP_PB_STRUCT]] : $_AD__cond_bb1__PB__src_0_wrt_0)
89
+
90
+ // CHECK-SIL: bb4({{%.*}} : $Float, {{%.*}} : $Float, [[BB1_PB_STRUCT:%.*]] : @owned $_AD__cond_bb1__PB__src_0_wrt_0):
91
+ // CHECK-SIL: ([[BB1_PRED:%.*]], [[BB1_PB:%.*]]) = destructure_struct [[BB1_PB_STRUCT]]
92
+ // CHECK-SIL: [[BB1_ADJVALS:%.*]] = apply [[BB1_PB]]([[SEED]]) : $@callee_guaranteed (Float) -> (Float, Float)
93
+ // CHECK-SIL: switch_enum [[BB1_PRED]] : $_AD__cond_bb1__Pred__src_0_wrt_0, case #_AD__cond_bb1__Pred__src_0_wrt_0.bb0!enumelt: bb5
94
+
94
95
// CHECK-SIL: bb5([[BB1_PRED0_TRAMP_PB_STRUCT:%.*]] : $_AD__cond_bb0__PB__src_0_wrt_0):
95
96
// CHECK-SIL: br bb7({{%.*}} : $Float, [[BB1_PRED0_TRAMP_PB_STRUCT]] : $_AD__cond_bb0__PB__src_0_wrt_0)
96
97
@@ -99,6 +100,7 @@ func cond(_ x: Float) -> Float {
99
100
100
101
// CHECK-SIL: bb7({{%.*}} : $Float, [[BB0_PB_STRUCT:%.*]] : $_AD__cond_bb0__PB__src_0_wrt_0):
101
102
// CHECK-SIL: return {{%.*}} : $Float
103
+ // CHECK-SIL-LABEL: } // end sil function 'AD__cond__pullback_src_0_wrt_0'
102
104
103
105
@differentiable
104
106
@_silgen_name ( " nested_cond " )
@@ -178,7 +180,7 @@ func enum_notactive(_ e: Enum, _ x: Float) -> Float {
178
180
// CHECK-SIL: [[PB:%.*]] = partial_apply [callee_guaranteed] [[PULLBACK_REF]]([[BB3_PB_STRUCT]])
179
181
// CHECK-SIL: [[VJP_RESULT:%.*]] = tuple ([[ORIG_RES]] : $Float, [[PB]] : $@callee_guaranteed (Float) -> Float)
180
182
// CHECK-SIL: return [[VJP_RESULT]]
181
- // CHECK-SIL: }
183
+ // CHECK-SIL-LABEL : } // end sil function 'AD__enum_notactive__vjp_src_0_wrt_1'
182
184
183
185
// Test `switch_enum_addr`.
184
186
@@ -227,7 +229,7 @@ func enum_addr_notactive<T>(_ e: AddressOnlyEnum<T>, _ x: Float) -> Float {
227
229
// CHECK-SIL: [[PB:%.*]] = partial_apply [callee_guaranteed] [[PB_FNREF]]<τ_0_0>([[BB3_PB_STRUCT]]) : $@convention(thin) <τ_0_0> (Float, @owned _AD__enum_addr_notactive_bb3__PB__src_0_wrt_1_l<τ_0_0>) -> Float
228
230
// CHECK-SIL: [[VJP_RESULT:%.*]] = tuple ([[X_ARG]] : $Float, [[PB]] : $@callee_guaranteed (Float) -> Float)
229
231
// CHECK-SIL: return [[VJP_RESULT]] : $(Float, @callee_guaranteed (Float) -> Float)
230
- // CHECK-SIL: }
232
+ // CHECK-SIL-LABEL : } // end sil function 'AD__enum_addr_notactive__vjp_src_0_wrt_1_l'
231
233
232
234
// Test control flow + tuple buffer.
233
235
// Verify that pullback buffers are not allocated for address projections.
@@ -248,25 +250,25 @@ func cond_tuple_var(_ x: Float) -> Float {
248
250
// CHECK-SIL: [[BB3_PRED:%.*]] = destructure_struct [[BB3_PB_STRUCT]] : $_AD__cond_tuple_var_bb3__PB__src_0_wrt_0
249
251
// CHECK-SIL: copy_addr {{%.*}} to {{%.*}} : $*(Float, Float)
250
252
// CHECK-SIL-NOT: copy_addr {{%.*}} to {{%.*}} : $*Float
251
- // CHECK-SIL: switch_enum [[BB3_PRED]] : $_AD__cond_tuple_var_bb3__Pred__src_0_wrt_0, case #_AD__cond_tuple_var_bb3__Pred__src_0_wrt_0.bb2!enumelt: bb3 , case #_AD__cond_tuple_var_bb3__Pred__src_0_wrt_0.bb1!enumelt: bb1
253
+ // CHECK-SIL: switch_enum [[BB3_PRED]] : $_AD__cond_tuple_var_bb3__Pred__src_0_wrt_0, case #_AD__cond_tuple_var_bb3__Pred__src_0_wrt_0.bb2!enumelt: bb1 , case #_AD__cond_tuple_var_bb3__Pred__src_0_wrt_0.bb1!enumelt: bb3
252
254
253
- // CHECK-SIL: bb1([[BB3_PRED1_TRAMP_PB_STRUCT :%.*]] : $_AD__cond_tuple_var_bb1__PB__src_0_wrt_0 ):
254
- // CHECK-SIL: br bb2({{%.*}} : $Float, {{%.*}} : $Float, [[BB3_PRED1_TRAMP_PB_STRUCT ]] : $_AD__cond_tuple_var_bb1__PB__src_0_wrt_0 )
255
+ // CHECK-SIL: bb1([[BB3_PRED2_TRAMP_PB_STRUCT :%.*]] : $_AD__cond_tuple_var_bb2__PB__src_0_wrt_0 ):
256
+ // CHECK-SIL: br bb2({{%.*}} : $Float, {{%.*}} : $Float, [[BB3_PRED2_TRAMP_PB_STRUCT ]] : $_AD__cond_tuple_var_bb2__PB__src_0_wrt_0 )
255
257
256
- // CHECK-SIL: bb2({{%.*}} : $Float, {{%.*}} : $Float, [[BB1_PB_STRUCT :%.*]] : $_AD__cond_tuple_var_bb1__PB__src_0_wrt_0 ):
257
- // CHECK-SIL: [[BB1_PRED :%.*]] = destructure_struct [[BB1_PB_STRUCT ]]
258
+ // CHECK-SIL: bb2({{%.*}} : $Float, {{%.*}} : $Float, [[BB2_PB_STRUCT :%.*]] : $_AD__cond_tuple_var_bb2__PB__src_0_wrt_0 ):
259
+ // CHECK-SIL: [[BB2_PRED :%.*]] = destructure_struct [[BB2_PB_STRUCT ]]
258
260
// CHECK-SIL: copy_addr {{%.*}} to {{%.*}} : $*(Float, Float)
259
261
// CHECK-SIL-NOT: copy_addr {{%.*}} to {{%.*}} : $*Float
260
- // CHECK-SIL: switch_enum [[BB1_PRED ]] : $_AD__cond_tuple_var_bb1__Pred__src_0_wrt_0 , case #_AD__cond_tuple_var_bb1__Pred__src_0_wrt_0 .bb0!enumelt: bb5
262
+ // CHECK-SIL: switch_enum [[BB2_PRED ]] : $_AD__cond_tuple_var_bb2__Pred__src_0_wrt_0 , case #_AD__cond_tuple_var_bb2__Pred__src_0_wrt_0 .bb0!enumelt: bb6
261
263
262
- // CHECK-SIL: bb3([[BB3_PRED2_TRAMP_PB_STRUCT :%.*]] : $_AD__cond_tuple_var_bb2__PB__src_0_wrt_0 ):
263
- // CHECK-SIL: br bb4({{%.*}} : $Float, {{%.*}} : $Float, [[BB3_PRED2_TRAMP_PB_STRUCT ]] : $_AD__cond_tuple_var_bb2__PB__src_0_wrt_0 )
264
+ // CHECK-SIL: bb3([[BB3_PRED1_TRAMP_PB_STRUCT :%.*]] : $_AD__cond_tuple_var_bb1__PB__src_0_wrt_0 ):
265
+ // CHECK-SIL: br bb4({{%.*}} : $Float, {{%.*}} : $Float, [[BB3_PRED1_TRAMP_PB_STRUCT ]] : $_AD__cond_tuple_var_bb1__PB__src_0_wrt_0 )
264
266
265
- // CHECK-SIL: bb4({{%.*}} : $Float, {{%.*}} : $Float, [[BB2_PB_STRUCT :%.*]] : $_AD__cond_tuple_var_bb2__PB__src_0_wrt_0 ):
266
- // CHECK-SIL: [[BB2_PRED :%.*]] = destructure_struct [[BB2_PB_STRUCT ]]
267
+ // CHECK-SIL: bb4({{%.*}} : $Float, {{%.*}} : $Float, [[BB1_PB_STRUCT :%.*]] : $_AD__cond_tuple_var_bb1__PB__src_0_wrt_0 ):
268
+ // CHECK-SIL: [[BB1_PRED :%.*]] = destructure_struct [[BB1_PB_STRUCT ]]
267
269
// CHECK-SIL: copy_addr {{%.*}} to {{%.*}} : $*(Float, Float)
268
270
// CHECK-SIL-NOT: copy_addr {{%.*}} to {{%.*}} : $*Float
269
- // CHECK-SIL: switch_enum [[BB2_PRED ]] : $_AD__cond_tuple_var_bb2__Pred__src_0_wrt_0 , case #_AD__cond_tuple_var_bb2__Pred__src_0_wrt_0 .bb0!enumelt: bb6
271
+ // CHECK-SIL: switch_enum [[BB1_PRED ]] : $_AD__cond_tuple_var_bb1__Pred__src_0_wrt_0 , case #_AD__cond_tuple_var_bb1__Pred__src_0_wrt_0 .bb0!enumelt: bb5
270
272
271
273
// CHECK-SIL: bb5([[BB1_PRED0_TRAMP_PB_STRUCT:%.*]] : $_AD__cond_tuple_var_bb0__PB__src_0_wrt_0):
272
274
// CHECK-SIL: br bb7({{%.*}} : $Float, [[BB1_PRED0_TRAMP_PB_STRUCT]] : $_AD__cond_tuple_var_bb0__PB__src_0_wrt_0)
@@ -276,3 +278,4 @@ func cond_tuple_var(_ x: Float) -> Float {
276
278
277
279
// CHECK-SIL: bb7({{%.*}} : $Float, [[BB0_PB_STRUCT:%.*]] : $_AD__cond_tuple_var_bb0__PB__src_0_wrt_0):
278
280
// CHECK-SIL: return {{%.*}} : $Float
281
+ // CHECK-SIL-LABEL: } // end sil function 'AD__cond_tuple_var__pullback_src_0_wrt_0'
0 commit comments