File tree Expand file tree Collapse file tree 2 files changed +35
-0
lines changed
lib/SILOptimizer/Transforms Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Original file line number Diff line number Diff line change @@ -2191,6 +2191,9 @@ bool SimplifyCFG::simplifySwitchEnumBlock(SwitchEnumInst *SEI) {
2191
2191
SEI->eraseFromParent ();
2192
2192
updateBorrowedFromPhis (PM, { cast<SILPhiArgument>(LiveBlock->getArgument (0 )) });
2193
2193
} else {
2194
+ if (SEI->getOperand ()->getOwnershipKind () == OwnershipKind::Owned) {
2195
+ Builder.createDestroyValue (loc, SEI->getOperand ());
2196
+ }
2194
2197
Builder.createBranch (loc, LiveBlock);
2195
2198
SEI->eraseFromParent ();
2196
2199
}
Original file line number Diff line number Diff line change @@ -1887,3 +1887,35 @@ bb6(%21 : $Optional<Int>):
1887
1887
return %22 : $()
1888
1888
}
1889
1889
1890
+
1891
+ // CHECK-LABEL: sil [ossa] @simplify_switch_enum3 :
1892
+ // CHECK-NOT: switch_enum
1893
+ // CHECK: destroy_value %{{[0-9]+}} : $Optional<String>
1894
+ // CHECK: } // end sil function 'simplify_switch_enum3'
1895
+ sil [ossa] @simplify_switch_enum3 : $@convention(thin) () -> () {
1896
+ bb0:
1897
+ cond_br undef, bb1, bb2
1898
+
1899
+ bb1:
1900
+ %1 = enum $Optional<String>, #Optional.none!enumelt
1901
+ br bb3(%1 : $Optional<String>)
1902
+
1903
+ bb2:
1904
+ %4 = enum $Optional<String>, #Optional.none!enumelt
1905
+ br bb3(%4 : $Optional<String>)
1906
+
1907
+ bb3(%10 : @owned $Optional<String>):
1908
+ debug_value %10 : $Optional<String>
1909
+ switch_enum %10 : $Optional<String>, case #Optional.some!enumelt: bb5, case #Optional.none!enumelt: bb4
1910
+
1911
+ bb4:
1912
+ br bb6
1913
+
1914
+ bb5(%14 : @owned $String):
1915
+ destroy_value %14 : $String
1916
+ br bb6
1917
+
1918
+ bb6:
1919
+ %17 = tuple ()
1920
+ return %17 : $()
1921
+ }
You can’t perform that action at this time.
0 commit comments