1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=lower-switch -S | FileCheck %s 3 4define i64 @f(i1 %bool, i128 %i128) { 5; CHECK-LABEL: @f( 6; CHECK-NEXT: BB: 7; CHECK-NEXT: br label [[NODEBLOCK1:%.*]] 8; CHECK: NodeBlock1: 9; CHECK-NEXT: [[PIVOT2:%.*]] = icmp slt i128 [[I128:%.*]], 16201310291018008446 10; CHECK-NEXT: br i1 [[PIVOT2]], label [[LEAFBLOCK:%.*]], label [[NODEBLOCK:%.*]] 11; CHECK: NodeBlock: 12; CHECK-NEXT: [[PIVOT:%.*]] = icmp slt i128 [[I128]], 16201310291018008447 13; CHECK-NEXT: br i1 [[PIVOT]], label [[SW_C3:%.*]], label [[SW_C2:%.*]] 14; CHECK: LeafBlock: 15; CHECK-NEXT: [[SWITCHLEAF:%.*]] = icmp eq i128 [[I128]], 16201310291018008445 16; CHECK-NEXT: br i1 [[SWITCHLEAF]], label [[SW_C4:%.*]], label [[SW_C1:%.*]] 17; CHECK: BB1: 18; CHECK-NEXT: unreachable 19; CHECK: SW_C1: 20; CHECK-NEXT: br i1 [[BOOL:%.*]], label [[BB1:%.*]], label [[SW_C1]] 21; CHECK: SW_C2: 22; CHECK-NEXT: ret i64 0 23; CHECK: SW_C3: 24; CHECK-NEXT: ret i64 1 25; CHECK: SW_C4: 26; CHECK-NEXT: ret i64 2 27; 28BB: 29 switch i128 %i128, label %BB1 [ 30 i128 627, label %SW_C1 31 i128 16201310291018008447, label %SW_C2 32 i128 16201310291018008446, label %SW_C3 33 i128 16201310291018008445, label %SW_C4 34 ] 35 36BB1: ; preds = %SW_C1, %BB 37 unreachable 38 39SW_C1: ; preds = %SW_C1, %BB 40 br i1 %bool, label %BB1, label %SW_C1 41 42SW_C2: ; preds = %BB 43 ret i64 0 44 45SW_C3: ; preds = %BB 46 ret i64 1 47 48SW_C4: ; preds = %BB 49 ret i64 2 50} 51 52define i64 @f_empty(i1 %bool, i128 %i128) { 53; CHECK-LABEL: @f_empty( 54; CHECK-NEXT: BB: 55; CHECK-NEXT: br label [[BB1:%.*]] 56; CHECK: BB1: 57; CHECK-NEXT: unreachable 58; 59BB: 60 switch i128 %i128, label %BB1 [] 61 62BB1: ; preds = %BB 63 unreachable 64} 65 66define void @f_i1() { 67entry: 68 switch i1 false, label %sw.bb [ 69 i1 false, label %sw.bb12 70 ] 71 72sw.bb: ; preds = %entry 73 unreachable 74 75sw.bb12: ; preds = %entry 76 unreachable 77} 78 79define void @f_i2(i2 %cond) { 80entry: 81 switch i2 %cond, label %sw.bb [ 82 i2 0, label %sw.bb12 83 i2 1, label %sw.bb12 84 i2 2, label %sw.bb12 85 i2 3, label %sw.bb12 86 ] 87 88sw.bb: ; preds = %entry 89 unreachable 90 91sw.bb12: ; preds = %entry 92 unreachable 93}