@@ -127,3 +127,87 @@ define i32 @switch_dup_default(i32 %0, i32 %1, i32 %2, i32 %3) {
127
127
%9 = phi i32 [ %3 , %5 ], [ %2 , %6 ], [ %2 , %7 ]
128
128
ret i32 %9
129
129
}
130
+
131
+ define i32 @switch_dup_exit (i32 %val ) {
132
+ ; SIMPLIFY-CFG-LABEL: define i32 @switch_dup_exit(
133
+ ; SIMPLIFY-CFG-SAME: i32 [[VAL:%.*]]) {
134
+ ; SIMPLIFY-CFG-NEXT: [[ENTRY:.*]]:
135
+ ; SIMPLIFY-CFG-NEXT: switch i32 [[VAL]], label %[[DEFAULT:.*]] [
136
+ ; SIMPLIFY-CFG-NEXT: i32 1, label %[[EXIT:.*]]
137
+ ; SIMPLIFY-CFG-NEXT: i32 11, label %[[EXIT]]
138
+ ; SIMPLIFY-CFG-NEXT: i32 22, label %[[BB1:.*]]
139
+ ; SIMPLIFY-CFG-NEXT: i32 15, label %[[BB2:.*]]
140
+ ; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB2]]
141
+ ; SIMPLIFY-CFG-NEXT: ]
142
+ ; SIMPLIFY-CFG: [[BB1]]:
143
+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
144
+ ; SIMPLIFY-CFG: [[BB2]]:
145
+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
146
+ ; SIMPLIFY-CFG: [[DEFAULT]]:
147
+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
148
+ ; SIMPLIFY-CFG: [[EXIT]]:
149
+ ; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = phi i32 [ 0, %[[DEFAULT]] ], [ 0, %[[BB2]] ], [ 3, %[[BB1]] ], [ 1, %[[ENTRY]] ], [ 1, %[[ENTRY]] ]
150
+ ; SIMPLIFY-CFG-NEXT: ret i32 [[RET]]
151
+ ;
152
+ entry:
153
+ switch i32 %val , label %default [
154
+ i32 1 , label %exit
155
+ i32 11 , label %exit
156
+ i32 22 , label %bb1
157
+ i32 15 , label %bb2
158
+ i32 0 , label %bb2
159
+ ]
160
+
161
+ bb1:
162
+ br label %exit
163
+
164
+ bb2:
165
+ br label %exit
166
+
167
+ default:
168
+ br label %exit
169
+
170
+ exit:
171
+ %ret = phi i32 [ 0 , %default ], [ 0 , %bb2 ], [ 3 , %bb1 ], [ 1 , %entry ], [ 1 , %entry ]
172
+ ret i32 %ret
173
+ }
174
+
175
+ define i64 @switch_dup_exit_2 (i32 %val ) {
176
+ ; SIMPLIFY-CFG-LABEL: define i64 @switch_dup_exit_2(
177
+ ; SIMPLIFY-CFG-SAME: i32 [[VAL:%.*]]) {
178
+ ; SIMPLIFY-CFG-NEXT: [[ENTRY:.*]]:
179
+ ; SIMPLIFY-CFG-NEXT: switch i32 [[VAL]], label %[[DEFAULT:.*]] [
180
+ ; SIMPLIFY-CFG-NEXT: i32 1, label %[[EXIT:.*]]
181
+ ; SIMPLIFY-CFG-NEXT: i32 11, label %[[EXIT]]
182
+ ; SIMPLIFY-CFG-NEXT: i32 13, label %[[BB1:.*]]
183
+ ; SIMPLIFY-CFG-NEXT: i32 0, label %[[BB1]]
184
+ ; SIMPLIFY-CFG-NEXT: ]
185
+ ; SIMPLIFY-CFG: [[BB1]]:
186
+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
187
+ ; SIMPLIFY-CFG: [[DEFAULT]]:
188
+ ; SIMPLIFY-CFG-NEXT: br label %[[EXIT]]
189
+ ; SIMPLIFY-CFG: [[EXIT]]:
190
+ ; SIMPLIFY-CFG-NEXT: [[RET:%.*]] = phi i64 [ 0, %[[DEFAULT]] ], [ 0, %[[BB1]] ], [ 1, %[[ENTRY]] ], [ 1, %[[ENTRY]] ]
191
+ ; SIMPLIFY-CFG-NEXT: ret i64 [[RET]]
192
+ ;
193
+ entry:
194
+ switch i32 %val , label %default [
195
+ i32 1 , label %bb2
196
+ i32 11 , label %exit
197
+ i32 13 , label %bb1
198
+ i32 0 , label %bb1
199
+ ]
200
+
201
+ bb1:
202
+ br label %exit
203
+
204
+ bb2:
205
+ br label %exit
206
+
207
+ default:
208
+ br label %exit
209
+
210
+ exit:
211
+ %ret = phi i64 [ 0 , %default ], [ 0 , %bb1 ], [ 1 , %entry ], [ 1 , %bb2 ]
212
+ ret i64 %ret
213
+ }
0 commit comments