Skip to content

Commit c131865

Browse files
committed
[SimplifyCFG]: Added test
1 parent fba6d47 commit c131865

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
2+
; RUN: opt -S -passes=simplifycfg < %s | FileCheck %s
3+
4+
declare void @a()
5+
declare void @b()
6+
declare void @c()
7+
8+
define void @switch_replace_default(i32 %x) {
9+
; CHECK-LABEL: define void @switch_replace_default(
10+
; CHECK-SAME: i32 [[X:%.*]]) {
11+
; CHECK-NEXT: [[MIN:%.*]] = call i32 @llvm.umin.i32(i32 [[X]], i32 3)
12+
; CHECK-NEXT: switch i32 [[MIN]], label %[[COMMON_RET:.*]] [
13+
; CHECK-NEXT: i32 0, label %[[CASE0:.*]]
14+
; CHECK-NEXT: i32 1, label %[[CASE1:.*]]
15+
; CHECK-NEXT: i32 2, label %[[CASE2:.*]]
16+
; CHECK-NEXT: ]
17+
; CHECK: [[COMMON_RET]]:
18+
; CHECK-NEXT: ret void
19+
; CHECK: [[CASE0]]:
20+
; CHECK-NEXT: call void @a()
21+
; CHECK-NEXT: br label %[[COMMON_RET]]
22+
; CHECK: [[CASE1]]:
23+
; CHECK-NEXT: call void @b()
24+
; CHECK-NEXT: br label %[[COMMON_RET]]
25+
; CHECK: [[CASE2]]:
26+
; CHECK-NEXT: call void @c()
27+
; CHECK-NEXT: br label %[[COMMON_RET]]
28+
;
29+
%min = call i32 @llvm.umin.i32(i32 %x, i32 3)
30+
switch i32 %min, label %unreachable [
31+
i32 0, label %case0
32+
i32 1, label %case1
33+
i32 2, label %case2
34+
i32 3, label %case3
35+
]
36+
37+
case0:
38+
call void @a()
39+
ret void
40+
41+
case1:
42+
call void @b()
43+
ret void
44+
45+
case2:
46+
call void @c()
47+
ret void
48+
49+
case3:
50+
ret void
51+
52+
unreachable:
53+
unreachable
54+
}
55+
56+
define void @do_not_switch_replace_default(i32 %x, i32 %y) {
57+
; CHECK-LABEL: define void @do_not_switch_replace_default(
58+
; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
59+
; CHECK-NEXT: [[MIN:%.*]] = call i32 @llvm.umin.i32(i32 [[X]], i32 [[Y]])
60+
; CHECK-NEXT: switch i32 [[MIN]], label %[[UNREACHABLE:.*]] [
61+
; CHECK-NEXT: i32 0, label %[[CASE0:.*]]
62+
; CHECK-NEXT: i32 1, label %[[CASE1:.*]]
63+
; CHECK-NEXT: i32 2, label %[[CASE2:.*]]
64+
; CHECK-NEXT: i32 3, label %[[COMMON_RET:.*]]
65+
; CHECK-NEXT: ]
66+
; CHECK: [[COMMON_RET]]:
67+
; CHECK-NEXT: ret void
68+
; CHECK: [[CASE0]]:
69+
; CHECK-NEXT: call void @a()
70+
; CHECK-NEXT: br label %[[COMMON_RET]]
71+
; CHECK: [[CASE1]]:
72+
; CHECK-NEXT: call void @b()
73+
; CHECK-NEXT: br label %[[COMMON_RET]]
74+
; CHECK: [[CASE2]]:
75+
; CHECK-NEXT: call void @c()
76+
; CHECK-NEXT: br label %[[COMMON_RET]]
77+
; CHECK: [[UNREACHABLE]]:
78+
; CHECK-NEXT: unreachable
79+
;
80+
%min = call i32 @llvm.umin.i32(i32 %x, i32 %y)
81+
switch i32 %min, label %unreachable [
82+
i32 0, label %case0
83+
i32 1, label %case1
84+
i32 2, label %case2
85+
i32 3, label %case3
86+
]
87+
88+
case0:
89+
call void @a()
90+
ret void
91+
92+
case1:
93+
call void @b()
94+
ret void
95+
96+
case2:
97+
call void @c()
98+
ret void
99+
100+
case3:
101+
ret void
102+
103+
unreachable:
104+
unreachable
105+
}

0 commit comments

Comments
 (0)