[VectorCombine] foldInsExtVectorToShuffle - canonicalize new shuffle(undef,x) ->...
[llvm-project.git] / llvm / test / Transforms / LowerSwitch / pr59316.ll
blob002325441031ccd8ad512f81d965295b0c7b0597
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=lower-switch -S | FileCheck %s
4 define 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
28 BB:
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   ]
36 BB1:                                              ; preds = %SW_C1, %BB
37   unreachable
39 SW_C1:                                            ; preds = %SW_C1, %BB
40   br i1 %bool, label %BB1, label %SW_C1
42 SW_C2:                                            ; preds = %BB
43   ret i64 0
45 SW_C3:                                            ; preds = %BB
46   ret i64 1
48 SW_C4:                                            ; preds = %BB
49   ret i64 2
52 define 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
59 BB:
60   switch i128 %i128, label %BB1 []
62 BB1:                                              ; preds = %BB
63   unreachable
66 define void @f_i1() {
67 entry:
68   switch i1 false, label %sw.bb [
69     i1 false, label %sw.bb12
70   ]
72 sw.bb:                                            ; preds = %entry
73   unreachable
75 sw.bb12:                                          ; preds = %entry
76   unreachable
79 define void @f_i2(i2 %cond) {
80 entry:
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   ]
88 sw.bb:                                            ; preds = %entry
89   unreachable
91 sw.bb12:                                          ; preds = %entry
92   unreachable