In some rare cases, the register allocator can spill registers but end up not utilizi...
[llvm/msp430.git] / test / Transforms / SimplifyCFG / switch_switch_fold.ll
blob1590f343a5fdf4afe8819e1b74b580afef1ce620
1 ; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | \
2 ; RUN:   grep switch | count 1
4 ; Test that a switch going to a switch on the same value can be merged.   All 
5 ; 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         switch i32 %V, label %F [
17                  i32 4, label %T
18                  i32 17, label %T
19                  i32 5, label %T
20                  i32 1234, label %F
21         ]
22 T:              ; preds = %0, %0, %0
23         switch i32 %V, label %F [
24                  i32 4, label %A
25                  i32 17, label %B
26                  i32 42, label %C
27         ]
28 A:              ; preds = %T
29         call void @foo1( )
30         ret void
31 B:              ; preds = %F, %F, %T
32         call void @foo2( )
33         ret void
34 C:              ; preds = %T
35         call void @foo3( )
36         ret void
37 F:              ; preds = %F, %T, %0, %0
38         switch i32 %V, label %F [
39                  i32 4, label %B
40                  i32 18, label %B
41                  i32 42, label %D
42         ]
43 D:              ; preds = %F
44         call void @foo4( )
45         ret void