@@ -384,12 +384,12 @@ bb3:
384
384
return %res : $()
385
385
}
386
386
387
+ // Test to check no dead args are passed to bb3 as phi arg
387
388
// CHECK-LABEL: sil [ossa] @multi_basic_block_stack_deallocated_phiarg :
388
389
// CHECK-NOT: alloc_stack
389
390
// CHECK-LABEL: bb2:
390
- // CHECK: br bb3(undef : $Klass)
391
- // CHECK: bb3([[PHI:%.*]] : @owned $Klass):
392
- // CHECK-NEXT: end_lifetime [[PHI]] : $Klass
391
+ // CHECK: br bb3
392
+ // CHECK: bb3:
393
393
// CHECK-LABEL: } // end sil function 'multi_basic_block_stack_deallocated_phiarg'
394
394
sil [ossa] @multi_basic_block_stack_deallocated_phiarg : $@convention(thin) (@owned Klass) -> () {
395
395
bb0(%0 : @owned $Klass):
@@ -410,13 +410,12 @@ bb3:
410
410
return %res : $()
411
411
}
412
412
413
+ // Test to check no dead args are passed to bb3 as phi arg
413
414
// CHECK-LABEL: sil [ossa] @multi_asi_basic_block_stack_deallocated_phiarg :
414
415
// CHECK-NOT: alloc_stack
415
416
// CHECK-LABEL: bb2:
416
- // CHECK: br bb3(undef : $Klass, undef : $Klass)
417
- // CHECK: bb3([[PHI1:%.*]] : @owned $Klass, [[PHI2:%.*]] : @owned $Klass):
418
- // CHECK-NEXT: end_lifetime [[PHI2]] : $Klass
419
- // CHECK-NEXT: end_lifetime [[PHI1]] : $Klass
417
+ // CHECK: br bb3
418
+ // CHECK: bb3:
420
419
// CHECK-LABEL: } // end sil function 'multi_asi_basic_block_stack_deallocated_phiarg'
421
420
sil [ossa] @multi_asi_basic_block_stack_deallocated_phiarg : $@convention(thin) (@owned Klass, @owned Klass) -> () {
422
421
bb0(%0 : @owned $Klass, %1 : @owned $Klass):
446
445
447
446
// CHECK-LABEL: sil [ossa] @multi_basic_block_destroyed_last_stored_val_phiarg :
448
447
// CHECK-NOT: alloc_stack
449
- // CHECK-LABEL: bb2:
450
- // CHECK: br bb3(undef : $Klass)
448
+ // CHECK-LABEL: bb3:
451
449
// CHECK-LABEL: } // end sil function 'multi_basic_block_destroyed_last_stored_val_phiarg'
452
450
sil [ossa] @multi_basic_block_destroyed_last_stored_val_phiarg : $@convention(thin) (@owned Klass) -> () {
453
451
bb0(%0 : @owned $Klass):
@@ -630,3 +628,51 @@ bb0(%0 : @owned $Klass):
630
628
return %7 : $()
631
629
}
632
630
631
+ // CHECK-LABEL: sil [ossa] @multi_basic_block_bug1 :
632
+ // CHECK-NOT: alloc_stack
633
+ // CHECK-LABEL: } // end sil function 'multi_basic_block_bug1'
634
+ sil [ossa] @multi_basic_block_bug1 : $@convention(thin) (@owned Klass, @owned Klass) -> @owned Klass {
635
+ bb0(%0 : @owned $Klass, %1 : @owned $Klass):
636
+ %stk1 = alloc_stack $Klass
637
+ store %0 to [init] %stk1 : $*Klass
638
+ cond_br undef, bb1, bb2
639
+
640
+ bb1:
641
+ %new1 = load [take] %stk1 : $*Klass
642
+ destroy_value %1 : $Klass
643
+ dealloc_stack %stk1 : $*Klass
644
+ br bbret(%new1 : $Klass)
645
+
646
+ bb2:
647
+ store %1 to [assign] %stk1 : $*Klass
648
+ %new2 = load [take] %stk1 : $*Klass
649
+ dealloc_stack %stk1 : $*Klass
650
+ br bbret(%new2 : $Klass)
651
+
652
+ bbret(%new : @owned $Klass):
653
+ return %new : $Klass
654
+ }
655
+
656
+ // CHECK-LABEL: sil [ossa] @multi_basic_block_bug2 :
657
+ // CHECK-NOT: alloc_stack
658
+ // CHECK-LABEL: } // end sil function 'multi_basic_block_bug2'
659
+ sil [ossa] @multi_basic_block_bug2 : $@convention(thin) (@owned Klass, @owned Klass) -> @owned Klass {
660
+ bb0(%0 : @owned $Klass, %1 : @owned $Klass):
661
+ %stk1 = alloc_stack $Klass
662
+ store %0 to [init] %stk1 : $*Klass
663
+ cond_br undef, bb1, bb2
664
+
665
+ bb1:
666
+ %new1 = load [take] %stk1 : $*Klass
667
+ destroy_value %1 : $Klass
668
+ br bbret(%new1 : $Klass)
669
+
670
+ bb2:
671
+ store %1 to [assign] %stk1 : $*Klass
672
+ %new2 = load [take] %stk1 : $*Klass
673
+ br bbret(%new2 : $Klass)
674
+
675
+ bbret(%new : @owned $Klass):
676
+ dealloc_stack %stk1 : $*Klass
677
+ return %new : $Klass
678
+ }
0 commit comments