1950a13cfSDan Gohman; RUN: llc < %s -asm-verbose=false | FileCheck %s
2950a13cfSDan Gohman
3950a13cfSDan Gohman; Test switch instructions.
4950a13cfSDan Gohman
5950a13cfSDan Gohmantarget datalayout = "e-p:32:32-i64:64-n32:64-S128"
6950a13cfSDan Gohmantarget triple = "wasm32-unknown-unknown"
7950a13cfSDan Gohman
8950a13cfSDan Gohmandeclare void @foo0()
9950a13cfSDan Gohmandeclare void @foo1()
10950a13cfSDan Gohmandeclare void @foo2()
11950a13cfSDan Gohmandeclare void @foo3()
12950a13cfSDan Gohmandeclare void @foo4()
13950a13cfSDan Gohmandeclare void @foo5()
14950a13cfSDan Gohman
15*e51c058eSDan Gohman; CHECK-LABEL: bar32:
16*e51c058eSDan Gohman; CHECK: block $BB0_8{{$}}
17*e51c058eSDan Gohman; CHECK: block $BB0_7{{$}}
18*e51c058eSDan Gohman; CHECK: block $BB0_6{{$}}
19*e51c058eSDan Gohman; CHECK: block $BB0_5{{$}}
20*e51c058eSDan Gohman; CHECK: block $BB0_4{{$}}
21*e51c058eSDan Gohman; CHECK: block $BB0_3{{$}}
22*e51c058eSDan Gohman; CHECK: block $BB0_2{{$}}
23*e51c058eSDan Gohman; CHECK: switch {{.*}}, $BB0_2, $BB0_2, $BB0_2, $BB0_2, $BB0_2, $BB0_2, $BB0_2, $BB0_2, $BB0_3, $BB0_3, $BB0_3, $BB0_3, $BB0_3, $BB0_3, $BB0_3, $BB0_3, $BB0_4, $BB0_4, $BB0_4, $BB0_4, $BB0_4, $BB0_4, $BB0_5, $BB0_6, $BB0_7{{$}}
24*e51c058eSDan Gohman; CHECK: BB0_2:
25*e51c058eSDan Gohman; CHECK:   call $foo0
26950a13cfSDan Gohman; CHECK: BB0_3:
27*e51c058eSDan Gohman; CHECK:   call $foo1
28950a13cfSDan Gohman; CHECK: BB0_4:
29*e51c058eSDan Gohman; CHECK:   call $foo2
30950a13cfSDan Gohman; CHECK: BB0_5:
31*e51c058eSDan Gohman; CHECK:   call $foo3
32950a13cfSDan Gohman; CHECK: BB0_6:
33*e51c058eSDan Gohman; CHECK:   call $foo4
34950a13cfSDan Gohman; CHECK: BB0_7:
35*e51c058eSDan Gohman; CHECK:   call $foo5
36950a13cfSDan Gohman; CHECK: BB0_8:
37*e51c058eSDan Gohman; CHECK:   return{{$}}
38950a13cfSDan Gohmandefine void @bar32(i32 %n) {
39950a13cfSDan Gohmanentry:
40950a13cfSDan Gohman  switch i32 %n, label %sw.epilog [
41950a13cfSDan Gohman    i32 0, label %sw.bb
42950a13cfSDan Gohman    i32 1, label %sw.bb
43950a13cfSDan Gohman    i32 2, label %sw.bb
44950a13cfSDan Gohman    i32 3, label %sw.bb
45950a13cfSDan Gohman    i32 4, label %sw.bb
46950a13cfSDan Gohman    i32 5, label %sw.bb
47950a13cfSDan Gohman    i32 6, label %sw.bb
48950a13cfSDan Gohman    i32 7, label %sw.bb.1
49950a13cfSDan Gohman    i32 8, label %sw.bb.1
50950a13cfSDan Gohman    i32 9, label %sw.bb.1
51950a13cfSDan Gohman    i32 10, label %sw.bb.1
52950a13cfSDan Gohman    i32 11, label %sw.bb.1
53950a13cfSDan Gohman    i32 12, label %sw.bb.1
54950a13cfSDan Gohman    i32 13, label %sw.bb.1
55950a13cfSDan Gohman    i32 14, label %sw.bb.1
56950a13cfSDan Gohman    i32 15, label %sw.bb.2
57950a13cfSDan Gohman    i32 16, label %sw.bb.2
58950a13cfSDan Gohman    i32 17, label %sw.bb.2
59950a13cfSDan Gohman    i32 18, label %sw.bb.2
60950a13cfSDan Gohman    i32 19, label %sw.bb.2
61950a13cfSDan Gohman    i32 20, label %sw.bb.2
62950a13cfSDan Gohman    i32 21, label %sw.bb.3
63950a13cfSDan Gohman    i32 22, label %sw.bb.4
64950a13cfSDan Gohman    i32 23, label %sw.bb.5
65950a13cfSDan Gohman  ]
66950a13cfSDan Gohman
67950a13cfSDan Gohmansw.bb:                                            ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry
68950a13cfSDan Gohman  tail call void @foo0()
69950a13cfSDan Gohman  br label %sw.epilog
70950a13cfSDan Gohman
71950a13cfSDan Gohmansw.bb.1:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
72950a13cfSDan Gohman  tail call void @foo1()
73950a13cfSDan Gohman  br label %sw.epilog
74950a13cfSDan Gohman
75950a13cfSDan Gohmansw.bb.2:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry
76950a13cfSDan Gohman  tail call void @foo2()
77950a13cfSDan Gohman  br label %sw.epilog
78950a13cfSDan Gohman
79950a13cfSDan Gohmansw.bb.3:                                          ; preds = %entry
80950a13cfSDan Gohman  tail call void @foo3()
81950a13cfSDan Gohman  br label %sw.epilog
82950a13cfSDan Gohman
83950a13cfSDan Gohmansw.bb.4:                                          ; preds = %entry
84950a13cfSDan Gohman  tail call void @foo4()
85950a13cfSDan Gohman  br label %sw.epilog
86950a13cfSDan Gohman
87950a13cfSDan Gohmansw.bb.5:                                          ; preds = %entry
88950a13cfSDan Gohman  tail call void @foo5()
89950a13cfSDan Gohman  br label %sw.epilog
90950a13cfSDan Gohman
91950a13cfSDan Gohmansw.epilog:                                        ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb
92950a13cfSDan Gohman  ret void
93950a13cfSDan Gohman}
94950a13cfSDan Gohman
95*e51c058eSDan Gohman; CHECK-LABEL: bar64:
96*e51c058eSDan Gohman; CHECK: block $BB1_8{{$}}
97*e51c058eSDan Gohman; CHECK: block $BB1_7{{$}}
98*e51c058eSDan Gohman; CHECK: block $BB1_6{{$}}
99*e51c058eSDan Gohman; CHECK: block $BB1_5{{$}}
100*e51c058eSDan Gohman; CHECK: block $BB1_4{{$}}
101*e51c058eSDan Gohman; CHECK: block $BB1_3{{$}}
102*e51c058eSDan Gohman; CHECK: block $BB1_2{{$}}
103*e51c058eSDan Gohman; CHECK: switch {{.*}}, $BB1_2, $BB1_2, $BB1_2, $BB1_2, $BB1_2, $BB1_2, $BB1_2, $BB1_2, $BB1_3, $BB1_3, $BB1_3, $BB1_3, $BB1_3, $BB1_3, $BB1_3, $BB1_3, $BB1_4, $BB1_4, $BB1_4, $BB1_4, $BB1_4, $BB1_4, $BB1_5, $BB1_6, $BB1_7{{$}}
104*e51c058eSDan Gohman; CHECK: BB1_2:
105*e51c058eSDan Gohman; CHECK:   call $foo0
106950a13cfSDan Gohman; CHECK: BB1_3:
107*e51c058eSDan Gohman; CHECK:   call $foo1
108950a13cfSDan Gohman; CHECK: BB1_4:
109*e51c058eSDan Gohman; CHECK:   call $foo2
110950a13cfSDan Gohman; CHECK: BB1_5:
111*e51c058eSDan Gohman; CHECK:   call $foo3
112950a13cfSDan Gohman; CHECK: BB1_6:
113*e51c058eSDan Gohman; CHECK:   call $foo4
114950a13cfSDan Gohman; CHECK: BB1_7:
115*e51c058eSDan Gohman; CHECK:   call $foo5
116950a13cfSDan Gohman; CHECK: BB1_8:
117*e51c058eSDan Gohman; CHECK:   return{{$}}
118950a13cfSDan Gohmandefine void @bar64(i64 %n) {
119950a13cfSDan Gohmanentry:
120950a13cfSDan Gohman  switch i64 %n, label %sw.epilog [
121950a13cfSDan Gohman    i64 0, label %sw.bb
122950a13cfSDan Gohman    i64 1, label %sw.bb
123950a13cfSDan Gohman    i64 2, label %sw.bb
124950a13cfSDan Gohman    i64 3, label %sw.bb
125950a13cfSDan Gohman    i64 4, label %sw.bb
126950a13cfSDan Gohman    i64 5, label %sw.bb
127950a13cfSDan Gohman    i64 6, label %sw.bb
128950a13cfSDan Gohman    i64 7, label %sw.bb.1
129950a13cfSDan Gohman    i64 8, label %sw.bb.1
130950a13cfSDan Gohman    i64 9, label %sw.bb.1
131950a13cfSDan Gohman    i64 10, label %sw.bb.1
132950a13cfSDan Gohman    i64 11, label %sw.bb.1
133950a13cfSDan Gohman    i64 12, label %sw.bb.1
134950a13cfSDan Gohman    i64 13, label %sw.bb.1
135950a13cfSDan Gohman    i64 14, label %sw.bb.1
136950a13cfSDan Gohman    i64 15, label %sw.bb.2
137950a13cfSDan Gohman    i64 16, label %sw.bb.2
138950a13cfSDan Gohman    i64 17, label %sw.bb.2
139950a13cfSDan Gohman    i64 18, label %sw.bb.2
140950a13cfSDan Gohman    i64 19, label %sw.bb.2
141950a13cfSDan Gohman    i64 20, label %sw.bb.2
142950a13cfSDan Gohman    i64 21, label %sw.bb.3
143950a13cfSDan Gohman    i64 22, label %sw.bb.4
144950a13cfSDan Gohman    i64 23, label %sw.bb.5
145950a13cfSDan Gohman  ]
146950a13cfSDan Gohman
147950a13cfSDan Gohmansw.bb:                                            ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry
148950a13cfSDan Gohman  tail call void @foo0()
149950a13cfSDan Gohman  br label %sw.epilog
150950a13cfSDan Gohman
151950a13cfSDan Gohmansw.bb.1:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
152950a13cfSDan Gohman  tail call void @foo1()
153950a13cfSDan Gohman  br label %sw.epilog
154950a13cfSDan Gohman
155950a13cfSDan Gohmansw.bb.2:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry
156950a13cfSDan Gohman  tail call void @foo2()
157950a13cfSDan Gohman  br label %sw.epilog
158950a13cfSDan Gohman
159950a13cfSDan Gohmansw.bb.3:                                          ; preds = %entry
160950a13cfSDan Gohman  tail call void @foo3()
161950a13cfSDan Gohman  br label %sw.epilog
162950a13cfSDan Gohman
163950a13cfSDan Gohmansw.bb.4:                                          ; preds = %entry
164950a13cfSDan Gohman  tail call void @foo4()
165950a13cfSDan Gohman  br label %sw.epilog
166950a13cfSDan Gohman
167950a13cfSDan Gohmansw.bb.5:                                          ; preds = %entry
168950a13cfSDan Gohman  tail call void @foo5()
169950a13cfSDan Gohman  br label %sw.epilog
170950a13cfSDan Gohman
171950a13cfSDan Gohmansw.epilog:                                        ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb
172950a13cfSDan Gohman  ret void
173950a13cfSDan Gohman}
174