xref: /llvm-project/llvm/test/Transforms/LowerSwitch/pr59316.ll (revision e390c229a438ed1eb3396df8fbeeda89c49474e6)
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}