@@ -12,15 +12,16 @@ class B : A {}
12
12
// Check whether the temporary holds a value.
13
13
// CHECK: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
14
14
// CHECK: [[ARG_COPY:%.*]] = copy_value [[BORROWED_ARG]]
15
- // CHECK: [[T1 :%.*]] = select_enum [[ARG_COPY]]
16
- // CHECK-NEXT: cond_br [[T1]], [[IS_PRESENT:bb.*]], [[NOT_PRESENT:bb[0-9]+]]
15
+ // CHECK: [[ARG_COPY_COPY :%.*]] = copy_value [[ARG_COPY]]
16
+ // CHECK: switch_enum [[ARG_COPY_COPY]] : $Optional<A>, case #Optional.some!enumelt.1: [[IS_PRESENT:bb[0-9]+]], case #Optional.none!enumelt: [[NOT_PRESENT:bb[0-9]+]]
17
17
//
18
18
// CHECK: [[NOT_PRESENT]]:
19
19
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
20
20
// CHECK: br [[NOT_PRESENT_FINISH:bb[0-9]+]]
21
21
//
22
22
// If so, pull the value out and check whether it's a B.
23
- // CHECK: [[IS_PRESENT]]:
23
+ // CHECK: [[IS_PRESENT]]([[IS_PRESENT_ARG:%.*]] :
24
+ // CHECK-NEXT: destroy_value [[IS_PRESENT_ARG]]
24
25
// CHECK-NEXT: [[VAL:%.*]] = unchecked_enum_data [[ARG_COPY]] : $Optional<A>, #Optional.some!enumelt.1
25
26
// CHECK-NEXT: [[X_VALUE:%.*]] = init_enum_data_addr [[PB]] : $*Optional<B>, #Optional.some
26
27
// CHECK-NEXT: checked_cast_br [[VAL]] : $A to $B, [[IS_B:bb.*]], [[NOT_B:bb[0-9]+]]
@@ -64,45 +65,49 @@ func foo(_ y : A?) {
64
65
// -- Check for some(...)
65
66
// CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
66
67
// CHECK-NEXT: [[ARG_COPY:%.*]] = copy_value [[BORROWED_ARG]]
67
- // CHECK: [[T1 :%.*]] = select_enum [[ARG_COPY]]
68
- // CHECK-NEXT: cond_br [[T1]], [[P:bb.*]], [[NIL_DEPTH_1:bb[0-9]+]]
68
+ // CHECK-NEXT: [[ARG_COPY_COPY :%.*]] = copy_value [[ARG_COPY]]
69
+ // CHECK-NEXT: switch_enum [[ARG_COPY_COPY]] : ${{.*}}, case #Optional.some!enumelt.1: [[P:bb[0-9]+]], case #Optional.none!enumelt: [[NIL_DEPTH_1:bb[0-9]+]]
69
70
//
70
71
// CHECK: [[NIL_DEPTH_1]]:
71
72
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
72
73
// CHECK: br [[FINISH_NIL_0:bb[0-9]+]]
73
74
//
74
75
// If so, drill down another level and check for some(some(...)).
75
- // CHECK: [[P]]:
76
+ // CHECK: [[P]]([[P_ARG:%.*]] :
77
+ // CHECK-NEXT: destroy_value [[P_ARG]]
76
78
// CHECK-NEXT: [[VALUE_OOOA:%.*]] = unchecked_enum_data [[ARG_COPY]]
77
- // CHECK: [[T1 :%.*]] = select_enum [[VALUE_OOOA]]
78
- // CHECK-NEXT: cond_br [[T1]], [[PP:bb.*]], [[NIL_DEPTH_2:bb[0-9]+]]
79
+ // CHECK-NEXT: [[VALUE_OOOA_COPY :%.*]] = copy_value [[VALUE_OOOA]]
80
+ // CHECK-NEXT: switch_enum [[VALUE_OOOA_COPY]] : ${{.*}}, case #Optional.some!enumelt.1: [[PP:bb[0-9]+]], case #Optional.none!enumelt: [[NIL_DEPTH_2:bb[0-9]+]]
79
81
//
80
82
// CHECK: [[NIL_DEPTH_2]]:
81
83
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
82
84
// CHECK: br [[FINISH_NIL_0]]
83
85
//
84
86
// If so, drill down another level and check for some(some(some(...))).
85
- // CHECK: [[PP]]:
87
+ // CHECK: [[PP]]([[PP_ARG:%.*]] :
88
+ // CHECK-NEXT: destroy_value [[PP_ARG]]
86
89
// CHECK-NEXT: [[VALUE_OOA:%.*]] = unchecked_enum_data [[VALUE_OOOA]]
87
- // CHECK: [[T1 :%.*]] = select_enum [[VALUE_OOA]]
88
- // CHECK-NEXT: cond_br [[T1]], [[PPP:bb.*]], [[NIL_DEPTH_3:bb[0-9]+]]
90
+ // CHECK-NEXT: [[VALUE_OOA_COPY :%.*]] = copy_value [[VALUE_OOA]]
91
+ // CHECK-NEXT: switch_enum [[VALUE_OOA_COPY]] : ${{.*}}, case #Optional.some!enumelt.1: [[PPP:bb[0-9]+]], case #Optional.none!enumelt: [[NIL_DEPTH_3:bb[0-9]+]]
89
92
//
90
93
// CHECK: [[NIL_DEPTH_3]]:
91
94
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
92
95
// CHECK: br [[FINISH_NIL_1:bb[0-9]+]]
93
96
//
94
97
// If so, drill down another level and check for some(some(some(some(...)))).
95
- // CHECK: [[PPP]]:
98
+ // CHECK: [[PPP]]([[PPP_ARG:%.*]] :
99
+ // CHECK-NEXT: destroy_value [[PPP_ARG]]
96
100
// CHECK-NEXT: [[VALUE_OA:%.*]] = unchecked_enum_data [[VALUE_OOA]]
97
- // CHECK: [[T1 :%.*]] = select_enum [[VALUE_OA]]
98
- // CHECK-NEXT: cond_br [[T1]], [[PPPP:bb.*]], [[NIL_DEPTH_4:bb[0-9]+]]
101
+ // CHECK-NEXT: [[VALUE_OA_COPY :%.*]] = copy_value [[VALUE_OA]]
102
+ // CHECK-NEXT: switch_enum [[VALUE_OA_COPY]] : ${{.*}}, case #Optional.some!enumelt.1: [[PPPP:bb[0-9]+]], case #Optional.none!enumelt: [[NIL_DEPTH_4:bb[0-9]+]]
99
103
//
100
104
// CHECK: [[NIL_DEPTH_4]]:
101
105
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
102
106
// CHECK: br [[FINISH_NIL_2:bb[0-9]+]]
103
107
//
104
108
// If so, pull out the A and check whether it's a B.
105
- // CHECK: [[PPPP]]:
109
+ // CHECK: [[PPPP]]([[PPPP_ARG:%.*]] :
110
+ // CHECK-NEXT: destroy_value [[PPPP_ARG]]
106
111
// CHECK-NEXT: [[VAL:%.*]] = unchecked_enum_data [[VALUE_OA]]
107
112
// CHECK-NEXT: checked_cast_br [[VAL]] : $A to $B, [[IS_B:bb.*]], [[NOT_B:bb[0-9]+]]
108
113
//
@@ -120,14 +125,14 @@ func foo(_ y : A?) {
120
125
//
121
126
// Switch out on the value in [[OB2]].
122
127
// CHECK: [[SWITCH_OB2]]([[VAL:%[0-9]+]] : @owned $Optional<B>):
123
- // CHECK: [[T0 :%.*]] = select_enum [[VAL]]
124
- // CHECK: cond_br [[T0]], [[HAVE_B:bb[0-9]+]], [[FINISH_NIL_4:bb[0-9]+]]
128
+ // CHECK-NEXT: [[VAL_COPY :%.*]] = copy_value [[VAL]]
129
+ // CHECK-NEXT: switch_enum [[VAL_COPY]] : ${{.*}}, case #Optional.some!enumelt.1: [[HAVE_B:bb[0-9]+]], case #Optional.none!enumelt: [[FINISH_NIL_4:bb[0-9]+]]
125
130
//
126
131
// CHECK: [[FINISH_NIL_4]]:
127
132
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
128
133
// CHECK: br [[FINISH_NIL_0]]
129
134
//
130
- // CHECK: [[HAVE_B]]:
135
+ // CHECK: [[HAVE_B]](
131
136
// CHECK: [[UNWRAPPED_VAL:%.*]] = unchecked_enum_data [[VAL]]
132
137
// CHECK: [[REWRAPPED_VAL:%.*]] = enum $Optional<B>, #Optional.some!enumelt.1, [[UNWRAPPED_VAL]]
133
138
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
@@ -171,7 +176,8 @@ func bar(_ y : A????) {
171
176
// CHECK-NEXT: [[PB:%.*]] = project_box [[X]]
172
177
// CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
173
178
// CHECK-NEXT: [[ARG_COPY:%.*]] = copy_value [[BORROWED_ARG]]
174
- // CHECK: [[T1:%.*]] = select_enum [[ARG_COPY]]
179
+ // CHECK-NEXT: [[ARG_COPY_COPY:%.*]] = copy_value [[ARG_COPY]]
180
+ // CHECK: switch_enum [[ARG_COPY_COPY]]
175
181
// CHECK: bb1:
176
182
// CHECK: [[VAL:%.*]] = unchecked_enum_data [[ARG_COPY]]
177
183
// CHECK-NEXT: [[X_VALUE:%.*]] = init_enum_data_addr [[PB]] : $*Optional<B>, #Optional.some
0 commit comments