@@ -303,4 +303,73 @@ else:
303
303
ret i32 %i1
304
304
}
305
305
306
+ define i32 @one_case_1 (i32 %x ) {
307
+ ; CHECK-LABEL: @one_case_1(
308
+ ; CHECK-NEXT: entry:
309
+ ; CHECK-NEXT: [[X_OFF:%.*]] = add i32 [[X:%.*]], -5
310
+ ; CHECK-NEXT: [[SWITCH:%.*]] = icmp ult i32 [[X_OFF]], 3
311
+ ; CHECK-NEXT: br i1 [[SWITCH]], label [[A:%.*]], label [[B:%.*]]
312
+ ; CHECK: common.ret:
313
+ ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ [[TMP0:%.*]], [[A]] ], [ [[TMP1:%.*]], [[B]] ]
314
+ ; CHECK-NEXT: ret i32 [[COMMON_RET_OP]]
315
+ ; CHECK: a:
316
+ ; CHECK-NEXT: [[TMP0]] = call i32 @f(i32 0)
317
+ ; CHECK-NEXT: br label [[COMMON_RET:%.*]]
318
+ ; CHECK: b:
319
+ ; CHECK-NEXT: [[TMP1]] = call i32 @f(i32 1)
320
+ ; CHECK-NEXT: br label [[COMMON_RET]]
321
+ ;
322
+ entry:
323
+ switch i32 %x , label %unreachable [
324
+ i32 5 , label %a
325
+ i32 6 , label %a
326
+ i32 7 , label %a
327
+ i32 10 , label %b
328
+ ]
329
+
330
+ unreachable:
331
+ unreachable
332
+ a:
333
+ %0 = call i32 @f (i32 0 )
334
+ ret i32 %0
335
+ b:
336
+ %1 = call i32 @f (i32 1 )
337
+ ret i32 %1
338
+ }
339
+
340
+ define i32 @one_case_2 (i32 %x ) {
341
+ ; CHECK-LABEL: @one_case_2(
342
+ ; CHECK-NEXT: entry:
343
+ ; CHECK-NEXT: [[X_OFF:%.*]] = add i32 [[X:%.*]], -5
344
+ ; CHECK-NEXT: [[SWITCH:%.*]] = icmp ult i32 [[X_OFF]], 1
345
+ ; CHECK-NEXT: br i1 [[SWITCH]], label [[A:%.*]], label [[B:%.*]]
346
+ ; CHECK: common.ret:
347
+ ; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i32 [ [[TMP0:%.*]], [[A]] ], [ [[TMP1:%.*]], [[B]] ]
348
+ ; CHECK-NEXT: ret i32 [[COMMON_RET_OP]]
349
+ ; CHECK: a:
350
+ ; CHECK-NEXT: [[TMP0]] = call i32 @f(i32 0)
351
+ ; CHECK-NEXT: br label [[COMMON_RET:%.*]]
352
+ ; CHECK: b:
353
+ ; CHECK-NEXT: [[TMP1]] = call i32 @f(i32 1)
354
+ ; CHECK-NEXT: br label [[COMMON_RET]]
355
+ ;
356
+ entry:
357
+ switch i32 %x , label %unreachable [
358
+ i32 5 , label %a
359
+ i32 10 , label %b
360
+ i32 11 , label %b
361
+ i32 12 , label %b
362
+ i32 13 , label %b
363
+ ]
364
+
365
+ unreachable:
366
+ unreachable
367
+ a:
368
+ %0 = call i32 @f (i32 0 )
369
+ ret i32 %0
370
+ b:
371
+ %1 = call i32 @f (i32 1 )
372
+ ret i32 %1
373
+ }
374
+
306
375
declare void @bar (ptr nonnull dereferenceable (4 ))
0 commit comments