Skip to content

Commit 32d6b21

Browse files
committed
[SimplifyCFG] Add pre-commit tests. NFC.
1 parent 7631c73 commit 32d6b21

File tree

1 file changed

+141
-0
lines changed

1 file changed

+141
-0
lines changed

llvm/test/Transforms/SimplifyCFG/switch-on-const-select.ll renamed to llvm/test/Transforms/SimplifyCFG/switch-on-const.ll

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,147 @@ bees:
154154
unreachable
155155
}
156156

157+
define void @pr165179(i1 %cond) {
158+
; CHECK-LABEL: @pr165179(
159+
; CHECK-NEXT: entry:
160+
; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
161+
; CHECK: if.then:
162+
; CHECK-NEXT: tail call void @bees.a() #[[ATTR0]]
163+
; CHECK-NEXT: br label [[SWITCHBB:%.*]]
164+
; CHECK: if.else:
165+
; CHECK-NEXT: tail call void @bees.b() #[[ATTR0]]
166+
; CHECK-NEXT: br label [[SWITCHBB]]
167+
; CHECK: switchbb:
168+
; CHECK-NEXT: [[COND1:%.*]] = phi i32 [ 1, [[IF_ELSE]] ], [ -1, [[IF_THEN]] ]
169+
; CHECK-NEXT: switch i32 [[COND1]], label [[DEFAULT:%.*]] [
170+
; CHECK-NEXT: i32 1, label [[EXIT:%.*]]
171+
; CHECK-NEXT: i32 -1, label [[EXIT]]
172+
; CHECK-NEXT: ]
173+
; CHECK: common.ret:
174+
; CHECK-NEXT: ret void
175+
; CHECK: exit:
176+
; CHECK-NEXT: tail call void @bees.a() #[[ATTR0]]
177+
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
178+
; CHECK: default:
179+
; CHECK-NEXT: tail call void @bees.b() #[[ATTR0]]
180+
; CHECK-NEXT: br label [[COMMON_RET]]
181+
;
182+
entry:
183+
br i1 %cond, label %if.then, label %if.else
184+
185+
if.then:
186+
tail call void @bees.a() nounwind
187+
br label %switchbb
188+
189+
if.else:
190+
tail call void @bees.b() nounwind
191+
br label %switchbb
192+
193+
switchbb:
194+
%cond1 = phi i32 [ 1, %if.else ], [ -1, %if.then ]
195+
switch i32 %cond1, label %default [
196+
i32 1, label %exit
197+
i32 -1, label %exit
198+
]
199+
200+
exit:
201+
tail call void @bees.a() nounwind
202+
ret void
203+
204+
default:
205+
tail call void @bees.b() nounwind
206+
ret void
207+
}
208+
209+
define void @switch_remove_dead_case_phi(i1 %cond1, i1 %cond2) {
210+
; CHECK-LABEL: @switch_remove_dead_case_phi(
211+
; CHECK-NEXT: entry:
212+
; CHECK-NEXT: br i1 [[COND1:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
213+
; CHECK: if.then:
214+
; CHECK-NEXT: tail call void @bees.a() #[[ATTR0]]
215+
; CHECK-NEXT: br i1 [[COND2:%.*]], label [[SWITCHBB:%.*]], label [[IF_ELSE]]
216+
; CHECK: if.else:
217+
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 3, [[ENTRY:%.*]] ], [ -1, [[IF_THEN]] ]
218+
; CHECK-NEXT: tail call void @bees.b() #[[ATTR0]]
219+
; CHECK-NEXT: br label [[SWITCHBB]]
220+
; CHECK: switchbb:
221+
; CHECK-NEXT: [[COND:%.*]] = phi i32 [ [[PHI]], [[IF_ELSE]] ], [ 5, [[IF_THEN]] ]
222+
; CHECK-NEXT: switch i32 [[COND]], label [[DEFAULT:%.*]] [
223+
; CHECK-NEXT: i32 1, label [[EXIT:%.*]]
224+
; CHECK-NEXT: i32 -1, label [[EXIT]]
225+
; CHECK-NEXT: ]
226+
; CHECK: common.ret:
227+
; CHECK-NEXT: ret void
228+
; CHECK: exit:
229+
; CHECK-NEXT: tail call void @bees.a() #[[ATTR0]]
230+
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
231+
; CHECK: default:
232+
; CHECK-NEXT: tail call void @bees.b() #[[ATTR0]]
233+
; CHECK-NEXT: br label [[COMMON_RET]]
234+
;
235+
entry:
236+
br i1 %cond1, label %if.then, label %if.else
237+
238+
if.then:
239+
tail call void @bees.a() nounwind
240+
br i1 %cond2, label %switchbb, label %if.else
241+
242+
if.else:
243+
%phi = phi i32 [ 3, %entry ], [ -1, %if.then ]
244+
tail call void @bees.b() nounwind
245+
br label %switchbb
246+
247+
switchbb:
248+
%cond = phi i32 [ %phi, %if.else ], [ 5, %if.then ]
249+
switch i32 %cond, label %default [
250+
i32 1, label %exit
251+
i32 -1, label %exit
252+
]
253+
254+
exit:
255+
tail call void @bees.a() nounwind
256+
ret void
257+
258+
default:
259+
tail call void @bees.b() nounwind
260+
ret void
261+
}
262+
263+
define void @switch_remove_dead_case_select(i1 %cond1, i1 %cond2) {
264+
; CHECK-LABEL: @switch_remove_dead_case_select(
265+
; CHECK-NEXT: entry:
266+
; CHECK-NEXT: [[X:%.*]] = select i1 [[COND1:%.*]], i32 -1, i32 3
267+
; CHECK-NEXT: [[Y:%.*]] = select i1 [[COND2:%.*]], i32 [[X]], i32 5
268+
; CHECK-NEXT: switch i32 [[Y]], label [[DEFAULT:%.*]] [
269+
; CHECK-NEXT: i32 1, label [[EXIT:%.*]]
270+
; CHECK-NEXT: i32 -1, label [[EXIT]]
271+
; CHECK-NEXT: ]
272+
; CHECK: common.ret:
273+
; CHECK-NEXT: ret void
274+
; CHECK: exit:
275+
; CHECK-NEXT: tail call void @bees.a() #[[ATTR0]]
276+
; CHECK-NEXT: br label [[COMMON_RET:%.*]]
277+
; CHECK: default:
278+
; CHECK-NEXT: tail call void @bees.b() #[[ATTR0]]
279+
; CHECK-NEXT: br label [[COMMON_RET]]
280+
;
281+
entry:
282+
%x = select i1 %cond1, i32 -1, i32 3
283+
%y = select i1 %cond2, i32 %x, i32 5
284+
switch i32 %y, label %default [
285+
i32 1, label %exit
286+
i32 -1, label %exit
287+
]
288+
289+
exit:
290+
tail call void @bees.a() nounwind
291+
ret void
292+
293+
default:
294+
tail call void @bees.b() nounwind
295+
ret void
296+
}
297+
157298
declare void @llvm.trap() nounwind noreturn
158299
declare void @bees.a() nounwind
159300
declare void @bees.b() nounwind

0 commit comments

Comments
 (0)