Skip to content

Commit f6eb2f8

Browse files
committed
Precommit testcases
1 parent b256d0a commit f6eb2f8

File tree

1 file changed

+317
-0
lines changed

1 file changed

+317
-0
lines changed
Lines changed: 317 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,317 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
2+
; RUN: opt -S -passes=dfa-jump-threading %s | FileCheck %s
3+
4+
declare void @do_something()
5+
declare void @user(i32)
6+
7+
define void @equivalent_on_default(i1 %c1) {
8+
; CHECK-LABEL: define void @equivalent_on_default(
9+
; CHECK-SAME: i1 [[C1:%.*]]) {
10+
; CHECK-NEXT: entry:
11+
; CHECK-NEXT: br label [[SWITCH_BB:%.*]]
12+
; CHECK: switch_bb:
13+
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ poison, [[CASE2END:%.*]] ]
14+
; CHECK-NEXT: switch i32 [[PHI]], label [[DEFAULT_DEST:%.*]] [
15+
; CHECK-NEXT: i32 0, label [[CASE1:%.*]]
16+
; CHECK-NEXT: i32 1, label [[CASE2:%.*]]
17+
; CHECK-NEXT: ]
18+
; CHECK: switch_bb.jt3:
19+
; CHECK-NEXT: [[PHI_JT3:%.*]] = phi i32 [ [[PHI_CASE2_JT3:%.*]], [[CASE2END_JT3:%.*]] ]
20+
; CHECK-NEXT: br label [[DEFAULT_DEST]]
21+
; CHECK: switch_bb.jt2:
22+
; CHECK-NEXT: [[PHI_JT2:%.*]] = phi i32 [ [[PHI_CASE2_JT2:%.*]], [[CASE2END_JT2:%.*]] ]
23+
; CHECK-NEXT: br label [[DEFAULT_DEST]]
24+
; CHECK: switch_bb.jt1:
25+
; CHECK-NEXT: [[PHI_JT1:%.*]] = phi i32 [ 1, [[CASE1]] ]
26+
; CHECK-NEXT: br label [[CASE2]]
27+
; CHECK: case1:
28+
; CHECK-NEXT: br label [[SWITCH_BB_JT1:%.*]]
29+
; CHECK: case2:
30+
; CHECK-NEXT: br i1 [[C1]], label [[CASE2THEN:%.*]], label [[CASE2END_JT2]]
31+
; CHECK: case2then:
32+
; CHECK-NEXT: br label [[CASE2END_JT3]]
33+
; CHECK: case2end:
34+
; CHECK-NEXT: call void @do_something()
35+
; CHECK-NEXT: br label [[SWITCH_BB]]
36+
; CHECK: case2end.jt3:
37+
; CHECK-NEXT: [[PHI_CASE2_JT3]] = phi i32 [ 3, [[CASE2THEN]] ]
38+
; CHECK-NEXT: call void @do_something()
39+
; CHECK-NEXT: br label [[SWITCH_BB_JT3:%.*]]
40+
; CHECK: case2end.jt2:
41+
; CHECK-NEXT: [[PHI_CASE2_JT2]] = phi i32 [ 2, [[CASE2]] ]
42+
; CHECK-NEXT: call void @do_something()
43+
; CHECK-NEXT: br label [[SWITCH_BB_JT2:%.*]]
44+
; CHECK: default_dest:
45+
; CHECK-NEXT: ret void
46+
;
47+
entry:
48+
br label %switch_bb
49+
50+
switch_bb:
51+
%phi = phi i32 [ 0, %entry ], [ 1, %case1 ], [ %phi_case2, %case2end ]
52+
switch i32 %phi, label %default_dest [
53+
i32 0, label %case1
54+
i32 1, label %case2
55+
]
56+
57+
case1:
58+
br label %switch_bb
59+
60+
case2:
61+
br i1 %c1, label %case2then, label %case2end
62+
63+
case2then:
64+
br label %case2end
65+
66+
case2end:
67+
%phi_case2 = phi i32 [ 2, %case2 ] , [ 3, %case2then ]
68+
call void @do_something()
69+
br label %switch_bb
70+
71+
default_dest:
72+
ret void
73+
}
74+
75+
define void @equivalent_on_default_user(i1 %c1) {
76+
; CHECK-LABEL: define void @equivalent_on_default_user(
77+
; CHECK-SAME: i1 [[C1:%.*]]) {
78+
; CHECK-NEXT: entry:
79+
; CHECK-NEXT: br label [[SWITCH_BB:%.*]]
80+
; CHECK: switch_bb:
81+
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ poison, [[CASE2END:%.*]] ]
82+
; CHECK-NEXT: switch i32 [[PHI]], label [[DEFAULT_DEST:%.*]] [
83+
; CHECK-NEXT: i32 0, label [[CASE1:%.*]]
84+
; CHECK-NEXT: i32 1, label [[CASE2:%.*]]
85+
; CHECK-NEXT: ]
86+
; CHECK: switch_bb.jt3:
87+
; CHECK-NEXT: [[PHI_JT3:%.*]] = phi i32 [ [[PHI_CASE2_JT3:%.*]], [[CASE2END_JT3:%.*]] ]
88+
; CHECK-NEXT: br label [[DEFAULT_DEST]]
89+
; CHECK: switch_bb.jt2:
90+
; CHECK-NEXT: [[PHI_JT2:%.*]] = phi i32 [ [[PHI_CASE2_JT2:%.*]], [[CASE2END_JT2:%.*]] ]
91+
; CHECK-NEXT: br label [[DEFAULT_DEST]]
92+
; CHECK: switch_bb.jt1:
93+
; CHECK-NEXT: [[PHI_JT1:%.*]] = phi i32 [ 1, [[CASE1]] ]
94+
; CHECK-NEXT: br label [[CASE2]]
95+
; CHECK: case1:
96+
; CHECK-NEXT: br label [[SWITCH_BB_JT1:%.*]]
97+
; CHECK: case2:
98+
; CHECK-NEXT: br i1 [[C1]], label [[CASE2THEN:%.*]], label [[CASE2END_JT2]]
99+
; CHECK: case2then:
100+
; CHECK-NEXT: br label [[CASE2END_JT3]]
101+
; CHECK: case2end:
102+
; CHECK-NEXT: call void @do_something()
103+
; CHECK-NEXT: call void @user(i32 poison)
104+
; CHECK-NEXT: br label [[SWITCH_BB]]
105+
; CHECK: case2end.jt3:
106+
; CHECK-NEXT: [[PHI_CASE2_JT3]] = phi i32 [ 3, [[CASE2THEN]] ]
107+
; CHECK-NEXT: call void @do_something()
108+
; CHECK-NEXT: call void @user(i32 [[PHI_CASE2_JT3]])
109+
; CHECK-NEXT: br label [[SWITCH_BB_JT3:%.*]]
110+
; CHECK: case2end.jt2:
111+
; CHECK-NEXT: [[PHI_CASE2_JT2]] = phi i32 [ 2, [[CASE2]] ]
112+
; CHECK-NEXT: call void @do_something()
113+
; CHECK-NEXT: call void @user(i32 [[PHI_CASE2_JT2]])
114+
; CHECK-NEXT: br label [[SWITCH_BB_JT2:%.*]]
115+
; CHECK: default_dest:
116+
; CHECK-NEXT: ret void
117+
;
118+
entry:
119+
br label %switch_bb
120+
121+
switch_bb:
122+
%phi = phi i32 [ 0, %entry ], [ 1, %case1 ], [ %phi_case2, %case2end ]
123+
switch i32 %phi, label %default_dest [
124+
i32 0, label %case1
125+
i32 1, label %case2
126+
]
127+
128+
case1:
129+
br label %switch_bb
130+
131+
case2:
132+
br i1 %c1, label %case2then, label %case2end
133+
134+
case2then:
135+
br label %case2end
136+
137+
case2end:
138+
%phi_case2 = phi i32 [ 2, %case2 ] , [ 3, %case2then ]
139+
call void @do_something()
140+
call void @user(i32 %phi_case2)
141+
br label %switch_bb
142+
143+
default_dest:
144+
ret void
145+
}
146+
147+
define void @equivalent_only_cases(i1 %c1) {
148+
; CHECK-LABEL: define void @equivalent_only_cases(
149+
; CHECK-SAME: i1 [[C1:%.*]]) {
150+
; CHECK-NEXT: entry:
151+
; CHECK-NEXT: br label [[SWITCH_BB:%.*]]
152+
; CHECK: switch_bb:
153+
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ poison, [[CASE2END:%.*]] ]
154+
; CHECK-NEXT: switch i32 [[PHI]], label [[DEFAULT_DEST:%.*]] [
155+
; CHECK-NEXT: i32 0, label [[CASE1:%.*]]
156+
; CHECK-NEXT: i32 1, label [[CASE2:%.*]]
157+
; CHECK-NEXT: i32 2, label [[CASE1]]
158+
; CHECK-NEXT: i32 3, label [[CASE1]]
159+
; CHECK-NEXT: ]
160+
; CHECK: switch_bb.jt3:
161+
; CHECK-NEXT: [[PHI_JT3:%.*]] = phi i32 [ [[PHI_CASE2_JT3:%.*]], [[CASE2END_JT3:%.*]] ]
162+
; CHECK-NEXT: br label [[CASE1]]
163+
; CHECK: switch_bb.jt2:
164+
; CHECK-NEXT: [[PHI_JT2:%.*]] = phi i32 [ [[PHI_CASE2_JT2:%.*]], [[CASE2END_JT2:%.*]] ]
165+
; CHECK-NEXT: br label [[CASE1]]
166+
; CHECK: switch_bb.jt1:
167+
; CHECK-NEXT: [[PHI_JT1:%.*]] = phi i32 [ 1, [[CASE1]] ]
168+
; CHECK-NEXT: br label [[CASE2]]
169+
; CHECK: case1:
170+
; CHECK-NEXT: call void @do_something()
171+
; CHECK-NEXT: br label [[SWITCH_BB_JT1:%.*]]
172+
; CHECK: case2:
173+
; CHECK-NEXT: br i1 [[C1]], label [[CASE2THEN:%.*]], label [[CASE2END_JT2]]
174+
; CHECK: case2then:
175+
; CHECK-NEXT: br label [[CASE2END_JT3]]
176+
; CHECK: case2end:
177+
; CHECK-NEXT: call void @do_something()
178+
; CHECK-NEXT: br label [[SWITCH_BB]]
179+
; CHECK: case2end.jt3:
180+
; CHECK-NEXT: [[PHI_CASE2_JT3]] = phi i32 [ 3, [[CASE2THEN]] ]
181+
; CHECK-NEXT: call void @do_something()
182+
; CHECK-NEXT: br label [[SWITCH_BB_JT3:%.*]]
183+
; CHECK: case2end.jt2:
184+
; CHECK-NEXT: [[PHI_CASE2_JT2]] = phi i32 [ 2, [[CASE2]] ]
185+
; CHECK-NEXT: call void @do_something()
186+
; CHECK-NEXT: br label [[SWITCH_BB_JT2:%.*]]
187+
; CHECK: default_dest:
188+
; CHECK-NEXT: ret void
189+
;
190+
entry:
191+
br label %switch_bb
192+
193+
switch_bb:
194+
%phi = phi i32 [ 0, %entry ], [ 1, %case1 ], [ %phi_case2, %case2end ]
195+
switch i32 %phi, label %default_dest [
196+
i32 0, label %case1
197+
i32 1, label %case2
198+
i32 2, label %case1
199+
i32 3, label %case1
200+
]
201+
202+
case1:
203+
call void @do_something()
204+
br label %switch_bb
205+
206+
case2:
207+
br i1 %c1, label %case2then, label %case2end
208+
209+
case2then:
210+
br label %case2end
211+
212+
case2end:
213+
%phi_case2 = phi i32 [ 2, %case2 ] , [ 3, %case2then ]
214+
call void @do_something()
215+
br label %switch_bb
216+
217+
default_dest:
218+
ret void
219+
}
220+
221+
define void @equivalent_both_case_and_default(i1 %c1, i1 %c2) {
222+
; CHECK-LABEL: define void @equivalent_both_case_and_default(
223+
; CHECK-SAME: i1 [[C1:%.*]], i1 [[C2:%.*]]) {
224+
; CHECK-NEXT: entry:
225+
; CHECK-NEXT: br label [[SWITCH_BB:%.*]]
226+
; CHECK: switch_bb:
227+
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ poison, [[CASE2END:%.*]] ]
228+
; CHECK-NEXT: switch i32 [[PHI]], label [[DEFAULT_DEST:%.*]] [
229+
; CHECK-NEXT: i32 0, label [[CASE1:%.*]]
230+
; CHECK-NEXT: i32 1, label [[CASE2:%.*]]
231+
; CHECK-NEXT: i32 2, label [[CASE1]]
232+
; CHECK-NEXT: i32 3, label [[CASE1]]
233+
; CHECK-NEXT: ]
234+
; CHECK: switch_bb.jt5:
235+
; CHECK-NEXT: [[PHI_JT5:%.*]] = phi i32 [ [[PHI_CASE2_JT5:%.*]], [[CASE2END_JT5:%.*]] ]
236+
; CHECK-NEXT: br label [[DEFAULT_DEST]]
237+
; CHECK: switch_bb.jt4:
238+
; CHECK-NEXT: [[PHI_JT4:%.*]] = phi i32 [ [[PHI_CASE2_JT4:%.*]], [[CASE2END_JT4:%.*]] ]
239+
; CHECK-NEXT: br label [[DEFAULT_DEST]]
240+
; CHECK: switch_bb.jt3:
241+
; CHECK-NEXT: [[PHI_JT3:%.*]] = phi i32 [ [[PHI_CASE2_JT3:%.*]], [[CASE2END_JT3:%.*]] ]
242+
; CHECK-NEXT: br label [[CASE1]]
243+
; CHECK: switch_bb.jt2:
244+
; CHECK-NEXT: [[PHI_JT2:%.*]] = phi i32 [ [[PHI_CASE2_JT2:%.*]], [[CASE2END_JT2:%.*]] ]
245+
; CHECK-NEXT: br label [[CASE1]]
246+
; CHECK: switch_bb.jt1:
247+
; CHECK-NEXT: [[PHI_JT1:%.*]] = phi i32 [ 1, [[CASE1]] ]
248+
; CHECK-NEXT: br label [[CASE2]]
249+
; CHECK: case1:
250+
; CHECK-NEXT: call void @do_something()
251+
; CHECK-NEXT: br label [[SWITCH_BB_JT1:%.*]]
252+
; CHECK: case2:
253+
; CHECK-NEXT: br i1 [[C1]], label [[CASE2THEN:%.*]], label [[CASE2END_JT2]]
254+
; CHECK: case2then:
255+
; CHECK-NEXT: br i1 [[C2]], label [[CASE2THEN2:%.*]], label [[CASE2END_JT3]]
256+
; CHECK: case2then2:
257+
; CHECK-NEXT: br i1 [[C2]], label [[CASE2THEN3:%.*]], label [[CASE2END_JT4]]
258+
; CHECK: case2then3:
259+
; CHECK-NEXT: br label [[CASE2END_JT5]]
260+
; CHECK: case2end:
261+
; CHECK-NEXT: call void @do_something()
262+
; CHECK-NEXT: br label [[SWITCH_BB]]
263+
; CHECK: case2end.jt5:
264+
; CHECK-NEXT: [[PHI_CASE2_JT5]] = phi i32 [ 5, [[CASE2THEN3]] ]
265+
; CHECK-NEXT: call void @do_something()
266+
; CHECK-NEXT: br label [[SWITCH_BB_JT5:%.*]]
267+
; CHECK: case2end.jt4:
268+
; CHECK-NEXT: [[PHI_CASE2_JT4]] = phi i32 [ 4, [[CASE2THEN2]] ]
269+
; CHECK-NEXT: call void @do_something()
270+
; CHECK-NEXT: br label [[SWITCH_BB_JT4:%.*]]
271+
; CHECK: case2end.jt3:
272+
; CHECK-NEXT: [[PHI_CASE2_JT3]] = phi i32 [ 3, [[CASE2THEN]] ]
273+
; CHECK-NEXT: call void @do_something()
274+
; CHECK-NEXT: br label [[SWITCH_BB_JT3:%.*]]
275+
; CHECK: case2end.jt2:
276+
; CHECK-NEXT: [[PHI_CASE2_JT2]] = phi i32 [ 2, [[CASE2]] ]
277+
; CHECK-NEXT: call void @do_something()
278+
; CHECK-NEXT: br label [[SWITCH_BB_JT2:%.*]]
279+
; CHECK: default_dest:
280+
; CHECK-NEXT: ret void
281+
;
282+
entry:
283+
br label %switch_bb
284+
285+
switch_bb:
286+
%phi = phi i32 [ 0, %entry ], [ 1, %case1 ], [ %phi_case2, %case2end ]
287+
switch i32 %phi, label %default_dest [
288+
i32 0, label %case1
289+
i32 1, label %case2
290+
i32 2, label %case1
291+
i32 3, label %case1
292+
]
293+
294+
case1:
295+
call void @do_something()
296+
br label %switch_bb
297+
298+
case2:
299+
br i1 %c1, label %case2then, label %case2end
300+
301+
case2then:
302+
br i1 %c2, label %case2then2, label %case2end
303+
304+
case2then2:
305+
br i1 %c2, label %case2then3, label %case2end
306+
307+
case2then3:
308+
br label %case2end
309+
310+
case2end:
311+
%phi_case2 = phi i32 [ 2, %case2 ], [ 3, %case2then ], [ 4, %case2then2 ], [ 5, %case2then3 ]
312+
call void @do_something()
313+
br label %switch_bb
314+
315+
default_dest:
316+
ret void
317+
}

0 commit comments

Comments
 (0)