1; RUN: opt %s -simplifycfg -S | FileCheck %s 2 3declare i32 @f(i32) 4 5define i32 @basic(i32 %x) { 6; CHECK-LABEL: @basic 7; CHECK: x.off = add i32 %x, -5 8; CHECK: %switch = icmp ult i32 %x.off, 3 9; CHECK: br i1 %switch, label %a, label %default 10 11entry: 12 switch i32 %x, label %default [ 13 i32 5, label %a 14 i32 6, label %a 15 i32 7, label %a 16 ] 17default: 18 %0 = call i32 @f(i32 0) 19 ret i32 %0 20a: 21 %1 = call i32 @f(i32 1) 22 ret i32 %1 23} 24 25 26define i32 @unreachable(i32 %x) { 27; CHECK-LABEL: @unreachable 28; CHECK: x.off = add i32 %x, -5 29; CHECK: %switch = icmp ult i32 %x.off, 3 30; CHECK: br i1 %switch, label %a, label %b 31 32entry: 33 switch i32 %x, label %unreachable [ 34 i32 5, label %a 35 i32 6, label %a 36 i32 7, label %a 37 i32 10, label %b 38 i32 20, label %b 39 i32 30, label %b 40 i32 40, label %b 41 ] 42unreachable: 43 unreachable 44a: 45 %0 = call i32 @f(i32 0) 46 ret i32 %0 47b: 48 %1 = call i32 @f(i32 1) 49 ret i32 %1 50} 51 52 53define i32 @unreachable2(i32 %x) { 54; CHECK-LABEL: @unreachable2 55; CHECK: x.off = add i32 %x, -5 56; CHECK: %switch = icmp ult i32 %x.off, 3 57; CHECK: br i1 %switch, label %a, label %b 58 59entry: 60 ; Note: folding the most popular case destination into the default 61 ; would prevent switch-to-icmp here. 62 switch i32 %x, label %unreachable [ 63 i32 5, label %a 64 i32 6, label %a 65 i32 7, label %a 66 i32 10, label %b 67 i32 20, label %b 68 ] 69unreachable: 70 unreachable 71a: 72 %0 = call i32 @f(i32 0) 73 ret i32 %0 74b: 75 %1 = call i32 @f(i32 1) 76 ret i32 %1 77} 78