@@ -274,6 +274,44 @@ bb0(%0 : @guaranteed $C):
274
274
return %99 : $()
275
275
}
276
276
277
+ // CHECK-LABEL: testInteriorUnconditionalAddrCast: interior-liveness with: %1
278
+ // CHECK: Interior liveness: %1 = argument of bb0 : $D
279
+ // CHECK-NEXT: bb0: LiveWithin
280
+ // CHECK-NEXT: regular user: [[FIELD:%.*]] = ref_element_addr %1 : $D, #D.object
281
+ // CHECK-NEXT: regular user: unconditional_checked_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
282
+ // CHECK-NEXT: regular user: copy_addr [take] %4 to [init] [[FIELD]] : $*C
283
+ // CHECK-NEXT: regular user: unchecked_ref_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
284
+ // CHECK-NEXT: Complete liveness
285
+ // CHECK-NEXT: Unenclosed phis {
286
+ // CHECK-NEXT: }
287
+ // CHECK-NEXT: last user: unchecked_ref_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
288
+ // CHECK-NEXT: testInteriorUnconditionalAddrCast: interior-liveness with: %1
289
+
290
+ // CHECK-LABEL: testInteriorUnconditionalAddrCast: interior_liveness_swift with: %1
291
+ // CHECK: Interior liveness: %1 = argument of bb0 : $D
292
+ // CHECK-NEXT: begin: [[FIELD]] = ref_element_addr %1 : $D, #D.object
293
+ // CHECK-NEXT: ends: unchecked_ref_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
294
+ // CHECK-NEXT: exits:
295
+ // CHECK-NEXT: interiors: copy_addr [take] %4 to [init] [[FIELD]] : $*C
296
+ // CHECK-NEXT: unconditional_checked_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
297
+ // CHECK-NEXT: [[FIELD]] = ref_element_addr %1 : $D, #D.object
298
+ // CHECK-NEXT: Unenclosed phis {
299
+ // CHECK-NEXT: }
300
+ // CHECK-NEXT: last user: unchecked_ref_cast_addr C in [[FIELD]] : $*C to D in %0 : $*D
301
+ // CHECK-NEXT: testInteriorUnconditionalAddrCast: interior_liveness_swift with: %1
302
+ sil [ossa] @testInteriorUnconditionalAddrCast : $@convention(thin) (@guaranteed D) -> @out D {
303
+ bb0(%0 : $*D, %1 : @guaranteed $D):
304
+ specify_test "interior-liveness %1"
305
+ specify_test "interior_liveness_swift %1"
306
+ %c1 = ref_element_addr %1 : $D, #D.object
307
+ unconditional_checked_cast_addr C in %c1 : $*C to D in %0 : $*D
308
+ %c2 = unchecked_addr_cast %0 : $*D to $*C
309
+ copy_addr [take] %c2 to [init] %c1 : $*C
310
+ unchecked_ref_cast_addr C in %c1 : $*C to D in %0 : $*D
311
+ %99 = tuple()
312
+ return %99 : $()
313
+ }
314
+
277
315
// CHECK-LABEL: testInteriorReborrow: interior-liveness with: %borrow
278
316
// CHECK: Complete liveness
279
317
// CHECK-NEXT: Unenclosed phis {
0 commit comments