@@ -13,6 +13,11 @@ struct NonTrivialStruct {
13
13
var val:Klass
14
14
}
15
15
16
+ enum FakeOptional<T> {
17
+ case none
18
+ case some(T)
19
+ }
20
+
16
21
sil [ossa] @$testtryapplyklassgen : $@convention(thin) () -> (@owned Klass, @error Error)
17
22
sil [ossa] @$use_klass1 : $@convention(thin) (@owned Klass) -> ()
18
23
sil [ossa] @$use_klass2 : $@convention(thin) (@guaranteed Klass) -> ()
@@ -558,3 +563,51 @@ bb3(%newborrow : @guaranteed $NonTrivialStruct, %newowned1 : @owned $NonTrivialS
558
563
return %res : $NonTrivialStruct
559
564
}
560
565
566
+ // CHECK-LABEL: sil [ossa] @dce_deadterm1 :
567
+ // CHECK-NOT: switch_enum
568
+ // CHECK-LABEL: } // end sil function 'dce_deadterm1'
569
+ sil [ossa] @dce_deadterm1 : $@convention(thin) (@owned FakeOptional<Builtin.NativeObject>) -> () {
570
+ bb0(%0 : @owned $FakeOptional<Builtin.NativeObject>):
571
+ %0a = alloc_stack $FakeOptional<Builtin.NativeObject>
572
+ store %0 to [init] %0a : $*FakeOptional<Builtin.NativeObject>
573
+ %1 = load [take] %0a : $*FakeOptional<Builtin.NativeObject>
574
+ switch_enum %1 : $FakeOptional<Builtin.NativeObject>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
575
+
576
+ bb1(%2 : @owned $Builtin.NativeObject):
577
+ destroy_value %2 : $Builtin.NativeObject
578
+ br bb3
579
+
580
+ bb2:
581
+ br bb3
582
+
583
+ bb3:
584
+ dealloc_stack %0a : $*FakeOptional<Builtin.NativeObject>
585
+ %9999 = tuple()
586
+ return %9999 : $()
587
+ }
588
+
589
+ // CHECK-LABEL: sil [ossa] @dce_deadterm2 :
590
+ // CHECK-NOT: load [copy]
591
+ // CHECK-NOT: switch_enum
592
+ // CHECK-LABEL: } // end sil function 'dce_deadterm2'
593
+ sil [ossa] @dce_deadterm2 : $@convention(thin) (@owned FakeOptional<Builtin.NativeObject>) -> () {
594
+ bb0(%0 : @owned $FakeOptional<Builtin.NativeObject>):
595
+ %0a = alloc_stack $FakeOptional<Builtin.NativeObject>
596
+ store %0 to [init] %0a : $*FakeOptional<Builtin.NativeObject>
597
+ %1 = load [copy] %0a : $*FakeOptional<Builtin.NativeObject>
598
+ switch_enum %1 : $FakeOptional<Builtin.NativeObject>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
599
+
600
+ bb1(%2 : @owned $Builtin.NativeObject):
601
+ destroy_value %2 : $Builtin.NativeObject
602
+ br bb3
603
+
604
+ bb2:
605
+ br bb3
606
+
607
+ bb3:
608
+ destroy_addr %0a : $*FakeOptional<Builtin.NativeObject>
609
+ dealloc_stack %0a : $*FakeOptional<Builtin.NativeObject>
610
+ %9999 = tuple()
611
+ return %9999 : $()
612
+ }
613
+
0 commit comments