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
15e51c058eSDan Gohman; CHECK-LABEL: bar32:
16cf4748f1SDan Gohman; CHECK: block BB0_8{{$}}
17cf4748f1SDan Gohman; CHECK: block BB0_7{{$}}
18cf4748f1SDan Gohman; CHECK: block BB0_6{{$}}
19cf4748f1SDan Gohman; CHECK: block BB0_5{{$}}
20cf4748f1SDan Gohman; CHECK: block BB0_4{{$}}
21cf4748f1SDan Gohman; CHECK: block BB0_3{{$}}
22cf4748f1SDan Gohman; CHECK: block BB0_2{{$}}
23*bb7ce8e4SDan Gohman; CHECK: tableswitch {{.*}}, 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{{$}}
24e51c058eSDan Gohman; CHECK: BB0_2:
25cf4748f1SDan Gohman; CHECK:   call foo0
26950a13cfSDan Gohman; CHECK: BB0_3:
27cf4748f1SDan Gohman; CHECK:   call foo1
28950a13cfSDan Gohman; CHECK: BB0_4:
29cf4748f1SDan Gohman; CHECK:   call foo2
30950a13cfSDan Gohman; CHECK: BB0_5:
31cf4748f1SDan Gohman; CHECK:   call foo3
32950a13cfSDan Gohman; CHECK: BB0_6:
33cf4748f1SDan Gohman; CHECK:   call foo4
34950a13cfSDan Gohman; CHECK: BB0_7:
35cf4748f1SDan Gohman; CHECK:   call foo5
36950a13cfSDan Gohman; CHECK: BB0_8:
37e51c058eSDan 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
95e51c058eSDan Gohman; CHECK-LABEL: bar64:
96cf4748f1SDan Gohman; CHECK: block BB1_8{{$}}
97cf4748f1SDan Gohman; CHECK: block BB1_7{{$}}
98cf4748f1SDan Gohman; CHECK: block BB1_6{{$}}
99cf4748f1SDan Gohman; CHECK: block BB1_5{{$}}
100cf4748f1SDan Gohman; CHECK: block BB1_4{{$}}
101cf4748f1SDan Gohman; CHECK: block BB1_3{{$}}
102cf4748f1SDan Gohman; CHECK: block BB1_2{{$}}
103*bb7ce8e4SDan Gohman; CHECK: tableswitch {{.*}}, 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{{$}}
104e51c058eSDan Gohman; CHECK: BB1_2:
105cf4748f1SDan Gohman; CHECK:   call foo0
106950a13cfSDan Gohman; CHECK: BB1_3:
107cf4748f1SDan Gohman; CHECK:   call foo1
108950a13cfSDan Gohman; CHECK: BB1_4:
109cf4748f1SDan Gohman; CHECK:   call foo2
110950a13cfSDan Gohman; CHECK: BB1_5:
111cf4748f1SDan Gohman; CHECK:   call foo3
112950a13cfSDan Gohman; CHECK: BB1_6:
113cf4748f1SDan Gohman; CHECK:   call foo4
114950a13cfSDan Gohman; CHECK: BB1_7:
115cf4748f1SDan Gohman; CHECK:   call foo5
116950a13cfSDan Gohman; CHECK: BB1_8:
117e51c058eSDan 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