xref: /llvm-project/llvm/test/Transforms/CorrelatedValuePropagation/switch.ll (revision 394e321a2ea021194891cf5b0c5747a901fb7915)
1*394e321aSYingwei Zheng; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2*394e321aSYingwei Zheng; RUN: opt < %s -passes=correlated-propagation -S | FileCheck %s
3*394e321aSYingwei Zheng
4*394e321aSYingwei Zhengdefine i32 @test_unreachable_default(i32 noundef %num) {
5*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_unreachable_default(
6*394e321aSYingwei Zheng; CHECK-SAME: i32 noundef [[NUM:%.*]]) {
7*394e321aSYingwei Zheng; CHECK-NEXT:  entry:
8*394e321aSYingwei Zheng; CHECK-NEXT:    [[SUB:%.*]] = add i32 [[NUM]], -120
9*394e321aSYingwei Zheng; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[SUB]], 3
10*394e321aSYingwei Zheng; CHECK-NEXT:    [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 2
11*394e321aSYingwei Zheng; CHECK-NEXT:    switch i32 [[COND]], label [[DEFAULT_UNREACHABLE:%.*]] [
12*394e321aSYingwei Zheng; CHECK-NEXT:      i32 0, label [[SW_BB:%.*]]
13*394e321aSYingwei Zheng; CHECK-NEXT:      i32 1, label [[SW_BB2:%.*]]
14*394e321aSYingwei Zheng; CHECK-NEXT:      i32 2, label [[SW_BB4:%.*]]
15*394e321aSYingwei Zheng; CHECK-NEXT:    ]
16*394e321aSYingwei Zheng; CHECK:       sw.bb:
17*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL:%.*]] = call i32 @call0()
18*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP:%.*]]
19*394e321aSYingwei Zheng; CHECK:       sw.bb2:
20*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL3:%.*]] = call i32 @call1()
21*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
22*394e321aSYingwei Zheng; CHECK:       sw.bb4:
23*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL5:%.*]] = call i32 @call2()
24*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
25*394e321aSYingwei Zheng; CHECK:       default.unreachable:
26*394e321aSYingwei Zheng; CHECK-NEXT:    unreachable
27*394e321aSYingwei Zheng; CHECK:       sw.default:
28*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL6:%.*]] = call i32 @call3()
29*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
30*394e321aSYingwei Zheng; CHECK:       cleanup:
31*394e321aSYingwei Zheng; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i32 [ [[CALL6]], [[SW_DEFAULT:%.*]] ], [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ]
32*394e321aSYingwei Zheng; CHECK-NEXT:    ret i32 [[RETVAL_0]]
33*394e321aSYingwei Zheng;
34*394e321aSYingwei Zhengentry:
35*394e321aSYingwei Zheng  %sub = add i32 %num, -120
36*394e321aSYingwei Zheng  %cmp = icmp ult i32 %sub, 3
37*394e321aSYingwei Zheng  %cond = select i1 %cmp, i32 %sub, i32 2
38*394e321aSYingwei Zheng  switch i32 %cond, label %sw.default [
39*394e321aSYingwei Zheng  i32 0, label %sw.bb
40*394e321aSYingwei Zheng  i32 1, label %sw.bb2
41*394e321aSYingwei Zheng  i32 2, label %sw.bb4
42*394e321aSYingwei Zheng  ]
43*394e321aSYingwei Zheng
44*394e321aSYingwei Zhengsw.bb:
45*394e321aSYingwei Zheng  %call = call i32 @call0()
46*394e321aSYingwei Zheng  br label %cleanup
47*394e321aSYingwei Zheng
48*394e321aSYingwei Zhengsw.bb2:
49*394e321aSYingwei Zheng  %call3 = call i32 @call1()
50*394e321aSYingwei Zheng  br label %cleanup
51*394e321aSYingwei Zheng
52*394e321aSYingwei Zhengsw.bb4:
53*394e321aSYingwei Zheng  %call5 = call i32 @call2()
54*394e321aSYingwei Zheng  br label %cleanup
55*394e321aSYingwei Zheng
56*394e321aSYingwei Zhengsw.default:
57*394e321aSYingwei Zheng  %call6 = call i32 @call3()
58*394e321aSYingwei Zheng  br label %cleanup
59*394e321aSYingwei Zheng
60*394e321aSYingwei Zhengcleanup:
61*394e321aSYingwei Zheng  %retval.0 = phi i32 [ %call6, %sw.default ], [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ]
62*394e321aSYingwei Zheng  ret i32 %retval.0
63*394e321aSYingwei Zheng}
64*394e321aSYingwei Zheng
65*394e321aSYingwei Zhengdefine i32 @test_unreachable_default_shared_edge(i32 noundef %num) {
66*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_unreachable_default_shared_edge(
67*394e321aSYingwei Zheng; CHECK-SAME: i32 noundef [[NUM:%.*]]) {
68*394e321aSYingwei Zheng; CHECK-NEXT:  entry:
69*394e321aSYingwei Zheng; CHECK-NEXT:    [[SUB:%.*]] = add i32 [[NUM]], -120
70*394e321aSYingwei Zheng; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[SUB]], 3
71*394e321aSYingwei Zheng; CHECK-NEXT:    [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 2
72*394e321aSYingwei Zheng; CHECK-NEXT:    switch i32 [[COND]], label [[DEFAULT_UNREACHABLE:%.*]] [
73*394e321aSYingwei Zheng; CHECK-NEXT:      i32 0, label [[SW_BB:%.*]]
74*394e321aSYingwei Zheng; CHECK-NEXT:      i32 1, label [[SW_BB2:%.*]]
75*394e321aSYingwei Zheng; CHECK-NEXT:      i32 2, label [[SW_BB4:%.*]]
76*394e321aSYingwei Zheng; CHECK-NEXT:    ]
77*394e321aSYingwei Zheng; CHECK:       sw.bb:
78*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL:%.*]] = call i32 @call0()
79*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP:%.*]]
80*394e321aSYingwei Zheng; CHECK:       sw.bb2:
81*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL3:%.*]] = call i32 @call1()
82*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
83*394e321aSYingwei Zheng; CHECK:       default.unreachable:
84*394e321aSYingwei Zheng; CHECK-NEXT:    unreachable
85*394e321aSYingwei Zheng; CHECK:       sw.bb4:
86*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL5:%.*]] = call i32 @call4(i32 [[SUB]])
87*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
88*394e321aSYingwei Zheng; CHECK:       cleanup:
89*394e321aSYingwei Zheng; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i32 [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ]
90*394e321aSYingwei Zheng; CHECK-NEXT:    ret i32 [[RETVAL_0]]
91*394e321aSYingwei Zheng;
92*394e321aSYingwei Zhengentry:
93*394e321aSYingwei Zheng  %sub = add i32 %num, -120
94*394e321aSYingwei Zheng  %cmp = icmp ult i32 %sub, 3
95*394e321aSYingwei Zheng  %cond = select i1 %cmp, i32 %sub, i32 2
96*394e321aSYingwei Zheng  switch i32 %cond, label %sw.bb4 [
97*394e321aSYingwei Zheng  i32 0, label %sw.bb
98*394e321aSYingwei Zheng  i32 1, label %sw.bb2
99*394e321aSYingwei Zheng  i32 2, label %sw.bb4
100*394e321aSYingwei Zheng  ]
101*394e321aSYingwei Zheng
102*394e321aSYingwei Zhengsw.bb:
103*394e321aSYingwei Zheng  %call = call i32 @call0()
104*394e321aSYingwei Zheng  br label %cleanup
105*394e321aSYingwei Zheng
106*394e321aSYingwei Zhengsw.bb2:
107*394e321aSYingwei Zheng  %call3 = call i32 @call1()
108*394e321aSYingwei Zheng  br label %cleanup
109*394e321aSYingwei Zheng
110*394e321aSYingwei Zhengsw.bb4:
111*394e321aSYingwei Zheng  %val = phi i32 [ %sub, %entry ], [ %sub, %entry ]
112*394e321aSYingwei Zheng  %call5 = call i32 @call4(i32 %val)
113*394e321aSYingwei Zheng  br label %cleanup
114*394e321aSYingwei Zheng
115*394e321aSYingwei Zhengcleanup:
116*394e321aSYingwei Zheng  %retval.0 = phi i32 [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ]
117*394e321aSYingwei Zheng  ret i32 %retval.0
118*394e321aSYingwei Zheng}
119*394e321aSYingwei Zheng
120*394e321aSYingwei Zheng; Negative tests
121*394e321aSYingwei Zheng
122*394e321aSYingwei Zhengdefine i32 @test_reachable_default(i32 noundef %num) {
123*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_reachable_default(
124*394e321aSYingwei Zheng; CHECK-SAME: i32 noundef [[NUM:%.*]]) {
125*394e321aSYingwei Zheng; CHECK-NEXT:  entry:
126*394e321aSYingwei Zheng; CHECK-NEXT:    [[SUB:%.*]] = add i32 [[NUM]], -120
127*394e321aSYingwei Zheng; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[SUB]], 3
128*394e321aSYingwei Zheng; CHECK-NEXT:    [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 4
129*394e321aSYingwei Zheng; CHECK-NEXT:    switch i32 [[COND]], label [[SW_DEFAULT:%.*]] [
130*394e321aSYingwei Zheng; CHECK-NEXT:      i32 0, label [[SW_BB:%.*]]
131*394e321aSYingwei Zheng; CHECK-NEXT:      i32 1, label [[SW_BB2:%.*]]
132*394e321aSYingwei Zheng; CHECK-NEXT:      i32 2, label [[SW_BB4:%.*]]
133*394e321aSYingwei Zheng; CHECK-NEXT:    ]
134*394e321aSYingwei Zheng; CHECK:       sw.bb:
135*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL:%.*]] = call i32 @call0()
136*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP:%.*]]
137*394e321aSYingwei Zheng; CHECK:       sw.bb2:
138*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL3:%.*]] = call i32 @call1()
139*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
140*394e321aSYingwei Zheng; CHECK:       sw.bb4:
141*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL5:%.*]] = call i32 @call2()
142*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
143*394e321aSYingwei Zheng; CHECK:       sw.default:
144*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL6:%.*]] = call i32 @call3()
145*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
146*394e321aSYingwei Zheng; CHECK:       cleanup:
147*394e321aSYingwei Zheng; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i32 [ [[CALL6]], [[SW_DEFAULT]] ], [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ]
148*394e321aSYingwei Zheng; CHECK-NEXT:    ret i32 [[RETVAL_0]]
149*394e321aSYingwei Zheng;
150*394e321aSYingwei Zhengentry:
151*394e321aSYingwei Zheng  %sub = add i32 %num, -120
152*394e321aSYingwei Zheng  %cmp = icmp ult i32 %sub, 3
153*394e321aSYingwei Zheng  %cond = select i1 %cmp, i32 %sub, i32 4
154*394e321aSYingwei Zheng  switch i32 %cond, label %sw.default [
155*394e321aSYingwei Zheng  i32 0, label %sw.bb
156*394e321aSYingwei Zheng  i32 1, label %sw.bb2
157*394e321aSYingwei Zheng  i32 2, label %sw.bb4
158*394e321aSYingwei Zheng  ]
159*394e321aSYingwei Zheng
160*394e321aSYingwei Zhengsw.bb:
161*394e321aSYingwei Zheng  %call = call i32 @call0()
162*394e321aSYingwei Zheng  br label %cleanup
163*394e321aSYingwei Zheng
164*394e321aSYingwei Zhengsw.bb2:
165*394e321aSYingwei Zheng  %call3 = call i32 @call1()
166*394e321aSYingwei Zheng  br label %cleanup
167*394e321aSYingwei Zheng
168*394e321aSYingwei Zhengsw.bb4:
169*394e321aSYingwei Zheng  %call5 = call i32 @call2()
170*394e321aSYingwei Zheng  br label %cleanup
171*394e321aSYingwei Zheng
172*394e321aSYingwei Zhengsw.default:
173*394e321aSYingwei Zheng  %call6 = call i32 @call3()
174*394e321aSYingwei Zheng  br label %cleanup
175*394e321aSYingwei Zheng
176*394e321aSYingwei Zhengcleanup:
177*394e321aSYingwei Zheng  %retval.0 = phi i32 [ %call6, %sw.default ], [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ]
178*394e321aSYingwei Zheng  ret i32 %retval.0
179*394e321aSYingwei Zheng}
180*394e321aSYingwei Zheng
181*394e321aSYingwei Zhengdefine i32 @test_unreachable_default_cond_may_be_undef(i32 %num) {
182*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_unreachable_default_cond_may_be_undef(
183*394e321aSYingwei Zheng; CHECK-SAME: i32 [[NUM:%.*]]) {
184*394e321aSYingwei Zheng; CHECK-NEXT:  entry:
185*394e321aSYingwei Zheng; CHECK-NEXT:    [[SUB:%.*]] = add i32 [[NUM]], -120
186*394e321aSYingwei Zheng; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[SUB]], 3
187*394e321aSYingwei Zheng; CHECK-NEXT:    [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 2
188*394e321aSYingwei Zheng; CHECK-NEXT:    switch i32 [[COND]], label [[SW_DEFAULT:%.*]] [
189*394e321aSYingwei Zheng; CHECK-NEXT:      i32 0, label [[SW_BB:%.*]]
190*394e321aSYingwei Zheng; CHECK-NEXT:      i32 1, label [[SW_BB2:%.*]]
191*394e321aSYingwei Zheng; CHECK-NEXT:      i32 2, label [[SW_BB4:%.*]]
192*394e321aSYingwei Zheng; CHECK-NEXT:    ]
193*394e321aSYingwei Zheng; CHECK:       sw.bb:
194*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL:%.*]] = call i32 @call0()
195*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP:%.*]]
196*394e321aSYingwei Zheng; CHECK:       sw.bb2:
197*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL3:%.*]] = call i32 @call1()
198*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
199*394e321aSYingwei Zheng; CHECK:       sw.bb4:
200*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL5:%.*]] = call i32 @call2()
201*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
202*394e321aSYingwei Zheng; CHECK:       sw.default:
203*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL6:%.*]] = call i32 @call3()
204*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
205*394e321aSYingwei Zheng; CHECK:       cleanup:
206*394e321aSYingwei Zheng; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i32 [ [[CALL6]], [[SW_DEFAULT]] ], [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ]
207*394e321aSYingwei Zheng; CHECK-NEXT:    ret i32 [[RETVAL_0]]
208*394e321aSYingwei Zheng;
209*394e321aSYingwei Zhengentry:
210*394e321aSYingwei Zheng  %sub = add i32 %num, -120
211*394e321aSYingwei Zheng  %cmp = icmp ult i32 %sub, 3
212*394e321aSYingwei Zheng  %cond = select i1 %cmp, i32 %sub, i32 2
213*394e321aSYingwei Zheng  switch i32 %cond, label %sw.default [
214*394e321aSYingwei Zheng  i32 0, label %sw.bb
215*394e321aSYingwei Zheng  i32 1, label %sw.bb2
216*394e321aSYingwei Zheng  i32 2, label %sw.bb4
217*394e321aSYingwei Zheng  ]
218*394e321aSYingwei Zheng
219*394e321aSYingwei Zhengsw.bb:
220*394e321aSYingwei Zheng  %call = call i32 @call0()
221*394e321aSYingwei Zheng  br label %cleanup
222*394e321aSYingwei Zheng
223*394e321aSYingwei Zhengsw.bb2:
224*394e321aSYingwei Zheng  %call3 = call i32 @call1()
225*394e321aSYingwei Zheng  br label %cleanup
226*394e321aSYingwei Zheng
227*394e321aSYingwei Zhengsw.bb4:
228*394e321aSYingwei Zheng  %call5 = call i32 @call2()
229*394e321aSYingwei Zheng  br label %cleanup
230*394e321aSYingwei Zheng
231*394e321aSYingwei Zhengsw.default:
232*394e321aSYingwei Zheng  %call6 = call i32 @call3()
233*394e321aSYingwei Zheng  br label %cleanup
234*394e321aSYingwei Zheng
235*394e321aSYingwei Zhengcleanup:
236*394e321aSYingwei Zheng  %retval.0 = phi i32 [ %call6, %sw.default ], [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ]
237*394e321aSYingwei Zheng  ret i32 %retval.0
238*394e321aSYingwei Zheng}
239*394e321aSYingwei Zheng
240*394e321aSYingwei Zhengdefine i32 @test_default_is_already_unreachable(i32 %num) {
241*394e321aSYingwei Zheng; CHECK-LABEL: define i32 @test_default_is_already_unreachable(
242*394e321aSYingwei Zheng; CHECK-SAME: i32 [[NUM:%.*]]) {
243*394e321aSYingwei Zheng; CHECK-NEXT:  entry:
244*394e321aSYingwei Zheng; CHECK-NEXT:    [[SUB:%.*]] = add i32 [[NUM]], -120
245*394e321aSYingwei Zheng; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[SUB]], 3
246*394e321aSYingwei Zheng; CHECK-NEXT:    [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 2
247*394e321aSYingwei Zheng; CHECK-NEXT:    switch i32 [[COND]], label [[SW_DEFAULT:%.*]] [
248*394e321aSYingwei Zheng; CHECK-NEXT:      i32 0, label [[SW_BB:%.*]]
249*394e321aSYingwei Zheng; CHECK-NEXT:      i32 1, label [[SW_BB2:%.*]]
250*394e321aSYingwei Zheng; CHECK-NEXT:      i32 2, label [[SW_BB4:%.*]]
251*394e321aSYingwei Zheng; CHECK-NEXT:    ]
252*394e321aSYingwei Zheng; CHECK:       sw.bb:
253*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL:%.*]] = call i32 @call0()
254*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP:%.*]]
255*394e321aSYingwei Zheng; CHECK:       sw.bb2:
256*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL3:%.*]] = call i32 @call1()
257*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
258*394e321aSYingwei Zheng; CHECK:       sw.bb4:
259*394e321aSYingwei Zheng; CHECK-NEXT:    [[CALL5:%.*]] = call i32 @call2()
260*394e321aSYingwei Zheng; CHECK-NEXT:    br label [[CLEANUP]]
261*394e321aSYingwei Zheng; CHECK:       sw.default:
262*394e321aSYingwei Zheng; CHECK-NEXT:    unreachable
263*394e321aSYingwei Zheng; CHECK:       cleanup:
264*394e321aSYingwei Zheng; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi i32 [ [[CALL5]], [[SW_BB4]] ], [ [[CALL3]], [[SW_BB2]] ], [ [[CALL]], [[SW_BB]] ]
265*394e321aSYingwei Zheng; CHECK-NEXT:    ret i32 [[RETVAL_0]]
266*394e321aSYingwei Zheng;
267*394e321aSYingwei Zhengentry:
268*394e321aSYingwei Zheng  %sub = add i32 %num, -120
269*394e321aSYingwei Zheng  %cmp = icmp ult i32 %sub, 3
270*394e321aSYingwei Zheng  %cond = select i1 %cmp, i32 %sub, i32 2
271*394e321aSYingwei Zheng  switch i32 %cond, label %sw.default [
272*394e321aSYingwei Zheng  i32 0, label %sw.bb
273*394e321aSYingwei Zheng  i32 1, label %sw.bb2
274*394e321aSYingwei Zheng  i32 2, label %sw.bb4
275*394e321aSYingwei Zheng  ]
276*394e321aSYingwei Zheng
277*394e321aSYingwei Zhengsw.bb:
278*394e321aSYingwei Zheng  %call = call i32 @call0()
279*394e321aSYingwei Zheng  br label %cleanup
280*394e321aSYingwei Zheng
281*394e321aSYingwei Zhengsw.bb2:
282*394e321aSYingwei Zheng  %call3 = call i32 @call1()
283*394e321aSYingwei Zheng  br label %cleanup
284*394e321aSYingwei Zheng
285*394e321aSYingwei Zhengsw.bb4:
286*394e321aSYingwei Zheng  %call5 = call i32 @call2()
287*394e321aSYingwei Zheng  br label %cleanup
288*394e321aSYingwei Zheng
289*394e321aSYingwei Zhengsw.default:
290*394e321aSYingwei Zheng  unreachable
291*394e321aSYingwei Zheng
292*394e321aSYingwei Zhengcleanup:
293*394e321aSYingwei Zheng  %retval.0 = phi i32 [ %call5, %sw.bb4 ], [ %call3, %sw.bb2 ], [ %call, %sw.bb ]
294*394e321aSYingwei Zheng  ret i32 %retval.0
295*394e321aSYingwei Zheng}
296*394e321aSYingwei Zheng
297*394e321aSYingwei Zhengdeclare i32 @call0()
298*394e321aSYingwei Zhengdeclare i32 @call1()
299*394e321aSYingwei Zhengdeclare i32 @call2()
300*394e321aSYingwei Zhengdeclare i32 @call3()
301*394e321aSYingwei Zhengdeclare i32 @call4(i32)
302