@@ -413,9 +413,7 @@ class E : C {}
413
413
// CHECK-LABEL: sil hidden @$s6switch16test_isa_class_11xyAA1BC_tF : $@convention(thin) (@guaranteed B) -> () {
414
414
func test_isa_class_1( x: B ) {
415
415
// CHECK: bb0([[X:%.*]] : @guaranteed $B):
416
- // CHECK: [[X_COPY:%.*]] = copy_value [[X]]
417
- // CHECK: [[BORROWED_X_COPY:%.*]] = begin_borrow [[X_COPY]]
418
- // CHECK: checked_cast_br [[BORROWED_X_COPY]] : $B to $D1, [[IS_D1:bb[0-9]+]], [[IS_NOT_D1:bb[0-9]+]]
416
+ // CHECK: checked_cast_br [[X]] : $B to $D1, [[IS_D1:bb[0-9]+]], [[IS_NOT_D1:bb[0-9]+]]
419
417
switch x {
420
418
421
419
// CHECK: [[IS_D1]]([[CAST_D1:%.*]] : @guaranteed $D1):
@@ -427,40 +425,32 @@ func test_isa_class_1(x: B) {
427
425
case is D1 where runced ( ) :
428
426
// CHECK: destroy_value [[CAST_D1_COPY]]
429
427
// CHECK: end_borrow [[CAST_D1]]
430
- // CHECK: end_borrow [[BORROWED_X_COPY]]
431
- // CHECK: destroy_value [[X_COPY]]
432
428
// CHECK: function_ref @$s6switch1ayyF
433
429
// CHECK: br [[CONT:bb[0-9]+]]
434
430
a ( )
435
431
436
432
// CHECK: [[NO_CASE1]]:
437
433
// CHECK-NEXT: destroy_value [[CAST_D1_COPY]]
438
434
// CHECK-NEXT: end_borrow [[CAST_D1]]
439
- // CHECK-NEXT: end_borrow [[BORROWED_X_COPY]]
440
435
// CHECK: br [[NEXT_CASE:bb[0-9]+]]
441
436
442
437
// CHECK: [[IS_NOT_D1]]([[CASTFAIL_D1:%.*]] : @guaranteed $B):
443
438
// CHECK-NEXT: end_borrow [[CASTFAIL_D1]]
444
- // CHECK-NEXT: end_borrow [[BORROWED_X_COPY]]
445
439
// CHECK-NEXT: br [[NEXT_CASE]]
446
440
447
441
// CHECK: [[NEXT_CASE]]:
448
- // CHECK: [[BORROWED_X_COPY:%.*]] = begin_borrow [[X_COPY]]
449
- // CHECK: checked_cast_br [[BORROWED_X_COPY]] : $B to $D2, [[IS_D2:bb[0-9]+]], [[IS_NOT_D2:bb[0-9]+]]
442
+ // CHECK: checked_cast_br [[X]] : $B to $D2, [[IS_D2:bb[0-9]+]], [[IS_NOT_D2:bb[0-9]+]]
450
443
case is D2 :
451
444
// CHECK: [[IS_D2]]([[CAST_D2:%.*]] : @guaranteed $D2):
452
445
// CHECK: [[CAST_D2_COPY:%.*]] = copy_value [[CAST_D2]]
453
446
// CHECK: destroy_value [[CAST_D2_COPY]]
454
- // CHECK: end_borrow [[BORROWED_X_COPY]]
455
- // CHECK: destroy_value [[X_COPY]]
456
447
// CHECK: function_ref @$s6switch1byyF
457
448
// CHECK: br [[CONT]]
458
449
b ( )
459
450
460
451
// CHECK: [[IS_NOT_D2]]([[CASTFAIL_D2:%.*]] : @guaranteed $B):
461
452
// CHECK: end_borrow [[CASTFAIL_D2]]
462
- // CHECK: [[BORROWED_X_COPY:%.*]] = begin_borrow [[X_COPY]]
463
- // CHECK: checked_cast_br [[BORROWED_X_COPY]] : $B to $E, [[IS_E:bb[0-9]+]], [[IS_NOT_E:bb[0-9]+]]
453
+ // CHECK: checked_cast_br [[X]] : $B to $E, [[IS_E:bb[0-9]+]], [[IS_NOT_E:bb[0-9]+]]
464
454
case is E where funged ( ) :
465
455
// CHECK: [[IS_E]]([[CAST_E:%.*]] : @guaranteed $E):
466
456
// CHECK: [[CAST_E_COPY:%.*]] = copy_value [[CAST_E]]
@@ -469,40 +459,34 @@ func test_isa_class_1(x: B) {
469
459
470
460
// CHECK: [[CASE3]]:
471
461
// CHECK: destroy_value [[CAST_E_COPY]]
472
- // CHECK: end_borrow [[BORROWED_X_COPY]]
473
- // CHECK: destroy_value [[X_COPY]]
474
462
// CHECK: function_ref @$s6switch1cyyF
475
463
// CHECK: br [[CONT]]
476
464
c ( )
477
465
478
466
// CHECK: [[NO_CASE3]]:
479
467
// CHECK-NEXT: destroy_value [[CAST_E_COPY]]
480
468
// CHECK-NEXT: end_borrow
481
- // CHECK-NEXT: end_borrow [[BORROWED_X_COPY]]
482
469
// CHECK: br [[NEXT_CASE:bb[0-9]+]]
483
470
484
471
// CHECK: [[IS_NOT_E]]([[NOTCAST_E:%.*]] : @guaranteed $B):
485
472
// CHECK: end_borrow [[NOTCAST_E]]
486
473
// CHECK: br [[NEXT_CASE]]
487
474
488
475
// CHECK: [[NEXT_CASE]]:
489
- // CHECK: [[BORROWED_X_COPY:%.*]] = begin_borrow [[X_COPY]]
490
- // CHECK: checked_cast_br [[BORROWED_X_COPY]] : $B to $C, [[IS_C:bb[0-9]+]], [[IS_NOT_C:bb[0-9]+]]
476
+ // CHECK: checked_cast_br [[X]] : $B to $C, [[IS_C:bb[0-9]+]], [[IS_NOT_C:bb[0-9]+]]
491
477
492
478
case is C :
493
479
// CHECK: [[IS_C]]([[CAST_C:%.*]] : @guaranteed $C):
494
480
// CHECK: [[CAST_C_COPY:%.*]] = copy_value [[CAST_C]]
495
481
// CHECK: destroy_value [[CAST_C_COPY]]
496
482
// CHECK: end_borrow [[CAST_C]]
497
- // CHECK: destroy_value [[X_COPY]]
498
483
// CHECK: function_ref @$s6switch1dyyF
499
484
// CHECK: br [[CONT]]
500
485
d ( )
501
486
502
487
// CHECK: [[IS_NOT_C]]([[NOCAST_C:%.*]] : @guaranteed $B):
503
488
// CHECK: end_borrow [[NOCAST_C]]
504
489
default :
505
- // CHECK: destroy_value [[X_COPY]]
506
490
// CHECK: function_ref @$s6switch1eyyF
507
491
// CHECK: br [[CONT]]
508
492
e ( )
@@ -517,11 +501,9 @@ func test_isa_class_1(x: B) {
517
501
// CHECK-LABEL: sil hidden @$s6switch16test_isa_class_21xyXlAA1BC_tF : $@convention(thin)
518
502
func test_isa_class_2( x: B ) -> AnyObject {
519
503
// CHECK: bb0([[X:%.*]] : @guaranteed $B):
520
- // CHECK: [[X_COPY:%.*]] = copy_value [[X]]
521
- // CHECK: [[BORROWED_X_COPY:%.*]] = begin_borrow [[X_COPY]]
522
504
switch x {
523
505
524
- // CHECK: checked_cast_br [[BORROWED_X_COPY ]] : $B to $D1, [[IS_D1:bb[0-9]+]], [[IS_NOT_D1:bb[0-9]+]]
506
+ // CHECK: checked_cast_br [[X ]] : $B to $D1, [[IS_D1:bb[0-9]+]], [[IS_NOT_D1:bb[0-9]+]]
525
507
case let y as D1 where runced ( ) :
526
508
// CHECK: [[IS_D1]]([[CAST_D1:%.*]] : @guaranteed $D1):
527
509
// CHECK: [[CAST_D1_COPY:%.*]] = copy_value [[CAST_D1]]
@@ -535,8 +517,6 @@ func test_isa_class_2(x: B) -> AnyObject {
535
517
// CHECK: [[RET:%.*]] = init_existential_ref [[CAST_D1_COPY_COPY]]
536
518
// CHECK: end_borrow [[BORROWED_CAST_D1_COPY]]
537
519
// CHECK: destroy_value [[CAST_D1_COPY]]
538
- // CHECK: end_borrow [[BORROWED_X_COPY]]
539
- // CHECK: destroy_value [[X_COPY]] : $B
540
520
// CHECK: br [[CONT:bb[0-9]+]]([[RET]] : $AnyObject)
541
521
a ( )
542
522
return y
@@ -550,8 +530,7 @@ func test_isa_class_2(x: B) -> AnyObject {
550
530
// CHECK: br [[NEXT_CASE]]
551
531
552
532
// CHECK: [[NEXT_CASE]]:
553
- // CHECK: [[BORROWED_X_COPY:%.*]] = begin_borrow [[X_COPY]]
554
- // CHECK: checked_cast_br [[BORROWED_X_COPY]] : $B to $D2, [[CASE2:bb[0-9]+]], [[IS_NOT_D2:bb[0-9]+]]
533
+ // CHECK: checked_cast_br [[X]] : $B to $D2, [[CASE2:bb[0-9]+]], [[IS_NOT_D2:bb[0-9]+]]
555
534
case let y as D2 :
556
535
// CHECK: [[CASE2]]([[CAST_D2:%.*]] : @guaranteed $D2):
557
536
// CHECK: [[CAST_D2_COPY:%.*]] = copy_value [[CAST_D2]]
@@ -561,16 +540,13 @@ func test_isa_class_2(x: B) -> AnyObject {
561
540
// CHECK: [[RET:%.*]] = init_existential_ref [[CAST_D2_COPY_COPY]]
562
541
// CHECK: end_borrow [[BORROWED_CAST_D2_COPY]]
563
542
// CHECK: destroy_value [[CAST_D2_COPY]]
564
- // CHECK: end_borrow [[BORROWED_X_COPY]]
565
- // CHECK: destroy_value [[X_COPY]]
566
543
// CHECK: br [[CONT]]([[RET]] : $AnyObject)
567
544
b ( )
568
545
return y
569
546
570
547
// CHECK: [[IS_NOT_D2]]([[NOCAST_D2:%.*]] : @guaranteed $B):
571
548
// CHECK: end_borrow [[NOCAST_D2]]
572
- // CHECK: [[BORROWED_X_COPY:%.*]] = begin_borrow [[X_COPY]]
573
- // CHECK: checked_cast_br [[BORROWED_X_COPY]] : $B to $E, [[IS_E:bb[0-9]+]], [[IS_NOT_E:bb[0-9]+]]
549
+ // CHECK: checked_cast_br [[X]] : $B to $E, [[IS_E:bb[0-9]+]], [[IS_NOT_E:bb[0-9]+]]
574
550
case let y as E where funged ( ) :
575
551
// CHECK: [[IS_E]]([[CAST_E:%.*]] : @guaranteed $E):
576
552
// CHECK: [[CAST_E_COPY:%.*]] = copy_value [[CAST_E]]
@@ -585,7 +561,6 @@ func test_isa_class_2(x: B) -> AnyObject {
585
561
// CHECK: end_borrow [[BORROWED_CAST_E_COPY]]
586
562
// CHECK: destroy_value [[CAST_E_COPY]]
587
563
// CHECK: end_borrow [[CAST_E]]
588
- // CHECK: destroy_value [[X_COPY]] : $B
589
564
// CHECK: br [[CONT]]([[RET]] : $AnyObject)
590
565
c ( )
591
566
return y
@@ -599,8 +574,7 @@ func test_isa_class_2(x: B) -> AnyObject {
599
574
// CHECK: br [[NEXT_CASE]]
600
575
601
576
// CHECK: [[NEXT_CASE]]
602
- // CHECK: [[BORROWED_X_COPY:%.*]] = begin_borrow [[X_COPY]]
603
- // CHECK: checked_cast_br [[BORROWED_X_COPY]] : $B to $C, [[CASE4:bb[0-9]+]], [[IS_NOT_C:bb[0-9]+]]
577
+ // CHECK: checked_cast_br [[X]] : $B to $C, [[CASE4:bb[0-9]+]], [[IS_NOT_C:bb[0-9]+]]
604
578
case let y as C :
605
579
// CHECK: [[CASE4]]([[CAST_C:%.*]] : @guaranteed $C):
606
580
// CHECK: [[CAST_C_COPY:%.*]] = copy_value [[CAST_C]]
@@ -610,16 +584,13 @@ func test_isa_class_2(x: B) -> AnyObject {
610
584
// CHECK: [[RET:%.*]] = init_existential_ref [[CAST_C_COPY_COPY]]
611
585
// CHECK: end_borrow [[BORROWED_CAST_C_COPY]]
612
586
// CHECK: destroy_value [[CAST_C_COPY]]
613
- // CHECK: end_borrow [[BORROWED_X_COPY]]
614
- // CHECK: destroy_value [[X_COPY]]
615
587
// CHECK: br [[CONT]]([[RET]] : $AnyObject)
616
588
d ( )
617
589
return y
618
590
619
591
// CHECK: [[IS_NOT_C]]([[NOCAST_C:%.*]] : @guaranteed $B):
620
592
// CHECK: end_borrow [[NOCAST_C]]
621
593
default :
622
- // CHECK: destroy_value [[X_COPY]]
623
594
// CHECK: function_ref @$s6switch1eyyF
624
595
// CHECK: [[X_COPY_2:%.*]] = copy_value [[X]]
625
596
// CHECK: [[RET:%.*]] = init_existential_ref [[X_COPY_2]]
@@ -663,17 +634,15 @@ func test_union_1(u: MaybePair) {
663
634
// CHECK: br [[CONT]]
664
635
b ( )
665
636
666
- // CHECK: [[IS_RIGHT]]([[STR:%.*]] : @owned $String):
637
+ // CHECK: [[IS_RIGHT]]([[STR:%.*]] : @guaranteed $String):
667
638
case var . Right:
668
- // CHECK: destroy_value [[STR]] : $String
669
639
// CHECK: function_ref @$s6switch1cyyF
670
640
// CHECK: br [[CONT]]
671
641
c ( )
672
642
673
- // CHECK: [[IS_BOTH]]([[TUP:%.*]] : @owned $(Int, String)):
643
+ // CHECK: [[IS_BOTH]]([[TUP:%.*]] : @guaranteed $(Int, String)):
674
644
case . Both:
675
645
// CHECK: ({{%.*}}, [[TUP_STR:%.*]]) = destructure_tuple [[TUP]]
676
- // CHECK: destroy_value [[TUP_STR]] : $String
677
646
// CHECK: function_ref @$s6switch1dyyF
678
647
// CHECK: br [[CONT]]
679
648
d ( )
@@ -688,9 +657,7 @@ func test_union_1(u: MaybePair) {
688
657
// CHECK-LABEL: sil hidden @$s6switch12test_union_31uyAA9MaybePairO_tF : $@convention(thin) (@guaranteed MaybePair) -> () {
689
658
func test_union_3( u: MaybePair ) {
690
659
// CHECK: bb0([[ARG:%.*]] : @guaranteed $MaybePair):
691
- // CHECK: [[ARG_COPY:%.*]] = copy_value [[ARG]]
692
- // CHECK: [[SUBJECT:%.*]] = begin_borrow [[ARG_COPY]]
693
- // CHECK: switch_enum [[SUBJECT]] : $MaybePair,
660
+ // CHECK: switch_enum [[ARG]] : $MaybePair,
694
661
// CHECK: case #MaybePair.Neither!enumelt: [[IS_NEITHER:bb[0-9]+]],
695
662
// CHECK: case #MaybePair.Left!enumelt.1: [[IS_LEFT:bb[0-9]+]],
696
663
// CHECK: case #MaybePair.Right!enumelt.1: [[IS_RIGHT:bb[0-9]+]],
@@ -716,7 +683,6 @@ func test_union_3(u: MaybePair) {
716
683
717
684
// CHECK: [[DEFAULT]](
718
685
// -- Ensure the fully-opaque value is destroyed in the default case.
719
- // CHECK: destroy_value [[ARG_COPY]] :
720
686
// CHECK: function_ref @$s6switch1dyyF
721
687
// CHECK: br [[CONT]]
722
688
0 commit comments