@@ -127,3 +127,87 @@ define i32 @switch_dup_default(i32 %0, i32 %1, i32 %2, i32 %3) {
127127 %9 = phi i32 [ %3 , %5 ], [ %2 , %6 ], [ %2 , %7 ]
128128 ret i32 %9
129129}
130+
131+ define i32 @switch_dup_exit (i32 %val ) {
132+ ; SIMPLIFY-CFG-LABEL: define i32 @switch_dup_exit(
133+ ; SIMPLIFY-CFG-SAME: i32 [[VAL:%.*]]) {
134+ ; SIMPLIFY-CFG-NEXT: [[ENTRY:.*]]:
135+ ; SIMPLIFY-CFG-NEXT: switch i32 [[VAL]], label %[[DEFAULT:.*]] [
136+ ; SIMPLIFY-CFG-NEXT: i32 1, label %[[EXIT:.*]]
137+ ; SIMPLIFY-CFG-NEXT: i32 11, label %[[EXIT]]
138+ ; SIMPLIFY-CFG-NEXT: i32 22, label %[[BB1:.*]]
139+ ; SIMPLIFY-CFG-NEXT: i32 15, label %[[BB2:.*]]
140+ ; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB2]]
141+ ; SIMPLIFY-CFG-NEXT: ]
142+ ; SIMPLIFY-CFG: [[BB1]]:
143+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
144+ ; SIMPLIFY-CFG: [[BB2]]:
145+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
146+ ; SIMPLIFY-CFG: [[DEFAULT]]:
147+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
148+ ; SIMPLIFY-CFG: [[EXIT]]:
149+ ; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = phi i32 [ 0, %[[DEFAULT]] ], [ 0, %[[BB2]] ], [ 3, %[[BB1]] ], [ 1, %[[ENTRY]] ], [ 1, %[[ENTRY]] ]
150+ ; SIMPLIFY-CFG-NEXT: ret i32 [[RET]]
151+ ;
152+ entry:
153+ switch i32 %val , label %default [
154+ i32 1 , label %exit
155+ i32 11 , label %exit
156+ i32 22 , label %bb1
157+ i32 15 , label %bb2
158+ i32 0 , label %bb2
159+ ]
160+
161+ bb1:
162+ br label %exit
163+
164+ bb2:
165+ br label %exit
166+
167+ default:
168+ br label %exit
169+
170+ exit:
171+ %ret = phi i32 [ 0 , %default ], [ 0 , %bb2 ], [ 3 , %bb1 ], [ 1 , %entry ], [ 1 , %entry ]
172+ ret i32 %ret
173+ }
174+
175+ define i64 @switch_dup_exit_2 (i32 %val ) {
176+ ; SIMPLIFY-CFG-LABEL: define i64 @switch_dup_exit_2(
177+ ; SIMPLIFY-CFG-SAME: i32 [[VAL:%.*]]) {
178+ ; SIMPLIFY-CFG-NEXT: [[ENTRY:.*]]:
179+ ; SIMPLIFY-CFG-NEXT: switch i32 [[VAL]], label %[[DEFAULT:.*]] [
180+ ; SIMPLIFY-CFG-NEXT: i32 1, label %[[EXIT:.*]]
181+ ; SIMPLIFY-CFG-NEXT: i32 11, label %[[EXIT]]
182+ ; SIMPLIFY-CFG-NEXT: i32 13, label %[[BB1:.*]]
183+ ; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB1]]
184+ ; SIMPLIFY-CFG-NEXT: ]
185+ ; SIMPLIFY-CFG: [[BB1]]:
186+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
187+ ; SIMPLIFY-CFG: [[DEFAULT]]:
188+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
189+ ; SIMPLIFY-CFG: [[EXIT]]:
190+ ; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = phi i64 [ 0, %[[DEFAULT]] ], [ 0, %[[BB1]] ], [ 1, %[[ENTRY]] ], [ 1, %[[ENTRY]] ]
191+ ; SIMPLIFY-CFG-NEXT: ret i64 [[RET]]
192+ ;
193+ entry:
194+ switch i32 %val , label %default [
195+ i32 1 , label %bb2
196+ i32 11 , label %exit
197+ i32 13 , label %bb1
198+ i32 0 , label %bb1
199+ ]
200+
201+ bb1:
202+ br label %exit
203+
204+ bb2:
205+ br label %exit
206+
207+ default:
208+ br label %exit
209+
210+ exit:
211+ %ret = phi i64 [ 0 , %default ], [ 0 , %bb1 ], [ 1 , %entry ], [ 1 , %bb2 ]
212+ ret i64 %ret
213+ }
0 commit comments