[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / Transforms / SimplifyCFG / switch_switch_fold.ll
blob0df40349c1b3a64ad9e5a09123b09c1fb528e8bf
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -simplifycfg -S | FileCheck %s
4 ; Test that a switch going to a switch on the same value can be merged.
5 ; All three switches in this example can be merged into one big one.
7 declare void @foo1()
9 declare void @foo2()
11 declare void @foo3()
13 declare void @foo4()
15 define void @test1(i32 %V) {
16 ; CHECK-LABEL: @test1(
17 ; CHECK-NEXT:    switch i32 [[V:%.*]], label [[INFLOOP:%.*]] [
18 ; CHECK-NEXT:    i32 4, label [[A:%.*]]
19 ; CHECK-NEXT:    i32 17, label [[B:%.*]]
20 ; CHECK-NEXT:    i32 18, label [[B]]
21 ; CHECK-NEXT:    i32 42, label [[D:%.*]]
22 ; CHECK-NEXT:    ]
23 ; CHECK:       A:
24 ; CHECK-NEXT:    call void @foo1()
25 ; CHECK-NEXT:    ret void
26 ; CHECK:       B:
27 ; CHECK-NEXT:    call void @foo2()
28 ; CHECK-NEXT:    ret void
29 ; CHECK:       D:
30 ; CHECK-NEXT:    call void @foo4()
31 ; CHECK-NEXT:    ret void
32 ; CHECK:       infloop:
33 ; CHECK-NEXT:    br label [[INFLOOP]]
35   switch i32 %V, label %F [
36   i32 4, label %T
37   i32 17, label %T
38   i32 5, label %T
39   i32 1234, label %F
40   ]
41 T:              ; preds = %0, %0, %0
42   switch i32 %V, label %F [
43   i32 4, label %A
44   i32 17, label %B
45   i32 42, label %C
46   ]
47 A:              ; preds = %T
48   call void @foo1( )
49   ret void
50 B:              ; preds = %F, %F, %T
51   call void @foo2( )
52   ret void
53 C:              ; preds = %T
54   call void @foo3( )
55   ret void
56 F:              ; preds = %F, %T, %0, %0
57   switch i32 %V, label %F [
58   i32 4, label %B
59   i32 18, label %B
60   i32 42, label %D
61   ]
62 D:              ; preds = %F
63   call void @foo4( )
64   ret void