Skip to content

Commit fbfa46a

Browse files
[SimplifyCFG] precommit tests for simplify switch with duplicate arms
1 parent 6f973fd commit fbfa46a

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt < %s -passes=simplifycfg -S | FileCheck %s -check-prefix=SIMPLIFY-CFG
3+
; RUN: opt < %s -O3 -S | FileCheck %s -check-prefix=O3
4+
5+
define i32 @switch_all_duplicate_arms(i32 %0, i32 %1, i32 %2, i32 %3) {
6+
; SIMPLIFY-CFG-LABEL: define i32 @switch_all_duplicate_arms(
7+
; SIMPLIFY-CFG-SAME: i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]]) {
8+
; SIMPLIFY-CFG-NEXT: switch i32 [[TMP1]], label %[[BB7:.*]] [
9+
; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB5:.*]]
10+
; SIMPLIFY-CFG-NEXT: i32 1, label %[[BB6:.*]]
11+
; SIMPLIFY-CFG-NEXT: ]
12+
; SIMPLIFY-CFG: [[BB5]]:
13+
; SIMPLIFY-CFG-NEXT: br label %[[BB7]]
14+
; SIMPLIFY-CFG: [[BB6]]:
15+
; SIMPLIFY-CFG-NEXT: br label %[[BB7]]
16+
; SIMPLIFY-CFG: [[BB7]]:
17+
; SIMPLIFY-CFG-NEXT: [[TMP8:%.*]] = phi i32 [ [[TMP3]], [[TMP4:%.*]] ], [ [[TMP2]], %[[BB6]] ], [ [[TMP2]], %[[BB5]] ]
18+
; SIMPLIFY-CFG-NEXT: ret i32 [[TMP8]]
19+
;
20+
; O3-LABEL: define i32 @switch_all_duplicate_arms(
21+
; O3-SAME: i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
22+
; O3-NEXT: switch i32 [[TMP1]], label %[[BB7:.*]] [
23+
; O3-NEXT: i32 0, label %[[BB5:.*]]
24+
; O3-NEXT: i32 1, label %[[BB6:.*]]
25+
; O3-NEXT: ]
26+
; O3: [[BB5]]:
27+
; O3-NEXT: br label %[[BB7]]
28+
; O3: [[BB6]]:
29+
; O3-NEXT: br label %[[BB7]]
30+
; O3: [[BB7]]:
31+
; O3-NEXT: [[TMP8:%.*]] = phi i32 [ [[TMP3]], [[TMP4:%.*]] ], [ [[TMP2]], %[[BB6]] ], [ [[TMP2]], %[[BB5]] ]
32+
; O3-NEXT: ret i32 [[TMP8]]
33+
;
34+
switch i32 %1, label %7 [
35+
i32 0, label %5
36+
i32 1, label %6
37+
]
38+
39+
5:
40+
br label %7
41+
42+
6:
43+
br label %7
44+
45+
7:
46+
%8 = phi i32 [ %3, %4 ], [ %2, %6 ], [ %2, %5 ]
47+
ret i32 %8
48+
}
49+
50+
define i32 @switch_some_duplicate_arms(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4) {
51+
; SIMPLIFY-CFG-LABEL: define i32 @switch_some_duplicate_arms(
52+
; SIMPLIFY-CFG-SAME: i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]], i32 [[TMP4:%.*]]) {
53+
; SIMPLIFY-CFG-NEXT: switch i32 [[TMP1]], label %[[BB9:.*]] [
54+
; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB6:.*]]
55+
; SIMPLIFY-CFG-NEXT: i32 1, label %[[BB7:.*]]
56+
; SIMPLIFY-CFG-NEXT: i32 2, label %[[BB8:.*]]
57+
; SIMPLIFY-CFG-NEXT: ]
58+
; SIMPLIFY-CFG: [[BB6]]:
59+
; SIMPLIFY-CFG-NEXT: br label %[[BB9]]
60+
; SIMPLIFY-CFG: [[BB7]]:
61+
; SIMPLIFY-CFG-NEXT: br label %[[BB9]]
62+
; SIMPLIFY-CFG: [[BB8]]:
63+
; SIMPLIFY-CFG-NEXT: br label %[[BB9]]
64+
; SIMPLIFY-CFG: [[BB9]]:
65+
; SIMPLIFY-CFG-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP3]], [[TMP5:%.*]] ], [ [[TMP4]], %[[BB8]] ], [ [[TMP2]], %[[BB7]] ], [ [[TMP2]], %[[BB6]] ]
66+
; SIMPLIFY-CFG-NEXT: ret i32 [[TMP10]]
67+
;
68+
; O3-LABEL: define i32 @switch_some_duplicate_arms(
69+
; O3-SAME: i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]], i32 [[TMP4:%.*]]) local_unnamed_addr #[[ATTR0]] {
70+
; O3-NEXT: switch i32 [[TMP1]], label %[[BB9:.*]] [
71+
; O3-NEXT: i32 0, label %[[BB6:.*]]
72+
; O3-NEXT: i32 1, label %[[BB7:.*]]
73+
; O3-NEXT: i32 2, label %[[BB8:.*]]
74+
; O3-NEXT: ]
75+
; O3: [[BB6]]:
76+
; O3-NEXT: br label %[[BB9]]
77+
; O3: [[BB7]]:
78+
; O3-NEXT: br label %[[BB9]]
79+
; O3: [[BB8]]:
80+
; O3-NEXT: br label %[[BB9]]
81+
; O3: [[BB9]]:
82+
; O3-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP3]], [[TMP5:%.*]] ], [ [[TMP4]], %[[BB8]] ], [ [[TMP2]], %[[BB7]] ], [ [[TMP2]], %[[BB6]] ]
83+
; O3-NEXT: ret i32 [[TMP10]]
84+
;
85+
switch i32 %1, label %9 [
86+
i32 0, label %6
87+
i32 1, label %7
88+
i32 2, label %8
89+
]
90+
91+
6:
92+
br label %9
93+
94+
7:
95+
br label %9
96+
97+
8:
98+
br label %9
99+
100+
9:
101+
%10 = phi i32 [ %3, %5 ], [ %4, %8 ], [ %2, %7 ], [ %2, %6 ]
102+
ret i32 %10
103+
}
104+
105+
define i32 @switch_duplicate_arms_multipred(i1 %0, i32 %1, i32 %2, i32 %3, i32 %4) {
106+
; SIMPLIFY-CFG-LABEL: define i32 @switch_duplicate_arms_multipred(
107+
; SIMPLIFY-CFG-SAME: i1 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]], i32 [[TMP4:%.*]]) {
108+
; SIMPLIFY-CFG-NEXT: br i1 [[TMP0]], label %[[BB6:.*]], label %[[BB7:.*]]
109+
; SIMPLIFY-CFG: [[BB6]]:
110+
; SIMPLIFY-CFG-NEXT: switch i32 [[TMP2]], label %[[BB9:.*]] [
111+
; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB7]]
112+
; SIMPLIFY-CFG-NEXT: i32 1, label %[[BB8:.*]]
113+
; SIMPLIFY-CFG-NEXT: ]
114+
; SIMPLIFY-CFG: [[BB7]]:
115+
; SIMPLIFY-CFG-NEXT: br label %[[BB9]]
116+
; SIMPLIFY-CFG: [[BB8]]:
117+
; SIMPLIFY-CFG-NEXT: br label %[[BB9]]
118+
; SIMPLIFY-CFG: [[BB9]]:
119+
; SIMPLIFY-CFG-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP4]], %[[BB6]] ], [ [[TMP3]], %[[BB8]] ], [ [[TMP3]], %[[BB7]] ]
120+
; SIMPLIFY-CFG-NEXT: ret i32 [[TMP10]]
121+
;
122+
; O3-LABEL: define i32 @switch_duplicate_arms_multipred(
123+
; O3-SAME: i1 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32 [[TMP2:%.*]], i32 [[TMP3:%.*]], i32 [[TMP4:%.*]]) local_unnamed_addr #[[ATTR0]] {
124+
; O3-NEXT: br i1 [[TMP0]], label %[[BB6:.*]], label %[[BB7:.*]]
125+
; O3: [[BB6]]:
126+
; O3-NEXT: switch i32 [[TMP2]], label %[[BB9:.*]] [
127+
; O3-NEXT: i32 0, label %[[BB7]]
128+
; O3-NEXT: i32 1, label %[[BB8:.*]]
129+
; O3-NEXT: ]
130+
; O3: [[BB7]]:
131+
; O3-NEXT: br label %[[BB9]]
132+
; O3: [[BB8]]:
133+
; O3-NEXT: br label %[[BB9]]
134+
; O3: [[BB9]]:
135+
; O3-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP4]], %[[BB6]] ], [ [[TMP3]], %[[BB8]] ], [ [[TMP3]], %[[BB7]] ]
136+
; O3-NEXT: ret i32 [[TMP10]]
137+
;
138+
br i1 %0, label %6, label %7
139+
6:
140+
switch i32 %2, label %9 [
141+
i32 0, label %7
142+
i32 1, label %8
143+
]
144+
145+
7:
146+
br label %9
147+
148+
8:
149+
br label %9
150+
151+
9:
152+
%10 = phi i32 [ %4, %6 ], [ %3, %8 ], [ %3, %7 ]
153+
ret i32 %10
154+
}

0 commit comments

Comments
 (0)