Skip to content

Commit 2c4c865

Browse files
author
Joe Shajrawi
committed
[SR-2512] add a test-case for duplicate conditions in SimplifyCFG
1 parent 57ad621 commit 2c4c865

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// RUN: %target-sil-opt -enable-sil-verify-all %s -simplify-cfg | %FileCheck %s
2+
3+
sil_stage canonical
4+
5+
import Builtin
6+
import Swift
7+
8+
enum DupCaseEnum {
9+
case firstCase
10+
case secondCase
11+
}
12+
13+
// CHECK-LABEL: sil @performSwitch : $@convention(thin) (Int, @thin DupCaseEnum.Type) -> DupCaseEnum {
14+
// CHECK: bb0(%0 : $Int, %1 : $@thin DupCaseEnum.Type):
15+
// CHECK: select_value
16+
// CHECK: br bb1
17+
// CHECK: bb1:
18+
// CHECK: return
19+
sil @performSwitch : $@convention(thin) (Int, @thin DupCaseEnum.Type) -> DupCaseEnum {
20+
// %0 // users: %9, %5, %3, %2
21+
bb0(%0 : $Int, %1 : $@thin DupCaseEnum.Type):
22+
%4 = integer_literal $Builtin.Int64, 0 // user: %6
23+
%5 = struct_extract %0 : $Int, #Int._value // user: %6
24+
%6 = builtin "cmp_eq_Int64"(%4 : $Builtin.Int64, %5 : $Builtin.Int64) : $Builtin.Int1 // users: %10, %7
25+
cond_br %6, bb6, bb1 // id: %7
26+
27+
bb1: // Preds: bb0
28+
br bb2 // id: %8
29+
30+
bb2: // Preds: bb1
31+
cond_br %6, bb5, bb3 // id: %10
32+
33+
bb3: // Preds: bb2
34+
br bb4 // id: %11
35+
36+
bb4: // Preds: bb3
37+
%12 = enum $DupCaseEnum, #DupCaseEnum.secondCase!enumelt // user: %13
38+
br bb7(%12 : $DupCaseEnum) // id: %13
39+
40+
bb5: // Preds: bb2
41+
%14 = enum $DupCaseEnum, #DupCaseEnum.firstCase!enumelt // user: %15
42+
br bb7(%14 : $DupCaseEnum) // id: %15
43+
44+
bb6: // Preds: bb0
45+
%16 = enum $DupCaseEnum, #DupCaseEnum.firstCase!enumelt // user: %17
46+
br bb7(%16 : $DupCaseEnum) // id: %17
47+
48+
// %18 // user: %19
49+
bb7(%18 : $DupCaseEnum): // Preds: bb6 bb5 bb4
50+
return %18 : $DupCaseEnum // id: %19
51+
}
52+
53+
// CHECK-LABEL: sil @performSwitch_bail_out : $@convention(thin) (Int, @thin DupCaseEnum.Type) -> DupCaseEnum {
54+
// CHECK: bb0(%0 : $Int, %1 : $@thin DupCaseEnum.Type):
55+
// CHECK-NOT: select_value
56+
// CHECK-NOT: br bb1
57+
// CHECK: cond_br
58+
sil @performSwitch_bail_out : $@convention(thin) (Int, @thin DupCaseEnum.Type) -> DupCaseEnum {
59+
// %0 // users: %9, %5, %3, %2
60+
bb0(%0 : $Int, %1 : $@thin DupCaseEnum.Type):
61+
%4 = integer_literal $Builtin.Int64, 0 // user: %6
62+
%5 = struct_extract %0 : $Int, #Int._value // user: %6
63+
%6 = builtin "cmp_eq_Int64"(%4 : $Builtin.Int64, %5 : $Builtin.Int64) : $Builtin.Int1 // users: %10, %7
64+
cond_br %6, bb6, bb1 // id: %7
65+
66+
bb1: // Preds: bb0
67+
br bb2 // id: %8
68+
69+
bb2: // Preds: bb1
70+
cond_br %6, bb5, bb3 // id: %10
71+
72+
bb3: // Preds: bb2
73+
br bb4 // id: %11
74+
75+
bb4: // Preds: bb3
76+
%12 = enum $DupCaseEnum, #DupCaseEnum.secondCase!enumelt // user: %13
77+
br bb7(%12 : $DupCaseEnum) // id: %13
78+
79+
bb5: // Preds: bb2
80+
%14 = enum $DupCaseEnum, #DupCaseEnum.secondCase!enumelt // user: %15
81+
br bb7(%14 : $DupCaseEnum) // id: %15
82+
83+
bb6: // Preds: bb0
84+
%16 = enum $DupCaseEnum, #DupCaseEnum.firstCase!enumelt // user: %17
85+
br bb7(%16 : $DupCaseEnum) // id: %17
86+
87+
// %18 // user: %19
88+
bb7(%18 : $DupCaseEnum): // Preds: bb6 bb5 bb4
89+
return %18 : $DupCaseEnum // id: %19
90+
}

0 commit comments

Comments
 (0)