1*950a13cfSDan Gohman; RUN: llc < %s -asm-verbose=false | FileCheck %s
2*950a13cfSDan Gohman
3*950a13cfSDan Gohman; Test switch instructions.
4*950a13cfSDan Gohman
5*950a13cfSDan Gohmantarget datalayout = "e-p:32:32-i64:64-n32:64-S128"
6*950a13cfSDan Gohmantarget triple = "wasm32-unknown-unknown"
7*950a13cfSDan Gohman
8*950a13cfSDan Gohmandeclare void @foo0()
9*950a13cfSDan Gohmandeclare void @foo1()
10*950a13cfSDan Gohmandeclare void @foo2()
11*950a13cfSDan Gohmandeclare void @foo3()
12*950a13cfSDan Gohmandeclare void @foo4()
13*950a13cfSDan Gohmandeclare void @foo5()
14*950a13cfSDan Gohman
15*950a13cfSDan Gohman; CHECK-LABEL: bar32
16*950a13cfSDan Gohman; CHECK: (block $BB0_8)
17*950a13cfSDan Gohman; CHECK: (block $BB0_7)
18*950a13cfSDan Gohman; CHECK: (block $BB0_6)
19*950a13cfSDan Gohman; CHECK: (block $BB0_5)
20*950a13cfSDan Gohman; CHECK: (block $BB0_4)
21*950a13cfSDan Gohman; CHECK: (block $BB0_3)
22*950a13cfSDan Gohman; CHECK: (block $BB0_2)
23*950a13cfSDan 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*950a13cfSDan Gohman; CHECk: BB0_2:
25*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo0))
26*950a13cfSDan Gohman; CHECK: BB0_3:
27*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo1))
28*950a13cfSDan Gohman; CHECK: BB0_4:
29*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo2))
30*950a13cfSDan Gohman; CHECK: BB0_5:
31*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo3))
32*950a13cfSDan Gohman; CHECK: BB0_6:
33*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo4))
34*950a13cfSDan Gohman; CHECK: BB0_7:
35*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo5))
36*950a13cfSDan Gohman; CHECK: BB0_8:
37*950a13cfSDan Gohman; CHECK:   (return)
38*950a13cfSDan Gohmandefine void @bar32(i32 %n) {
39*950a13cfSDan Gohmanentry:
40*950a13cfSDan Gohman  switch i32 %n, label %sw.epilog [
41*950a13cfSDan Gohman    i32 0, label %sw.bb
42*950a13cfSDan Gohman    i32 1, label %sw.bb
43*950a13cfSDan Gohman    i32 2, label %sw.bb
44*950a13cfSDan Gohman    i32 3, label %sw.bb
45*950a13cfSDan Gohman    i32 4, label %sw.bb
46*950a13cfSDan Gohman    i32 5, label %sw.bb
47*950a13cfSDan Gohman    i32 6, label %sw.bb
48*950a13cfSDan Gohman    i32 7, label %sw.bb.1
49*950a13cfSDan Gohman    i32 8, label %sw.bb.1
50*950a13cfSDan Gohman    i32 9, label %sw.bb.1
51*950a13cfSDan Gohman    i32 10, label %sw.bb.1
52*950a13cfSDan Gohman    i32 11, label %sw.bb.1
53*950a13cfSDan Gohman    i32 12, label %sw.bb.1
54*950a13cfSDan Gohman    i32 13, label %sw.bb.1
55*950a13cfSDan Gohman    i32 14, label %sw.bb.1
56*950a13cfSDan Gohman    i32 15, label %sw.bb.2
57*950a13cfSDan Gohman    i32 16, label %sw.bb.2
58*950a13cfSDan Gohman    i32 17, label %sw.bb.2
59*950a13cfSDan Gohman    i32 18, label %sw.bb.2
60*950a13cfSDan Gohman    i32 19, label %sw.bb.2
61*950a13cfSDan Gohman    i32 20, label %sw.bb.2
62*950a13cfSDan Gohman    i32 21, label %sw.bb.3
63*950a13cfSDan Gohman    i32 22, label %sw.bb.4
64*950a13cfSDan Gohman    i32 23, label %sw.bb.5
65*950a13cfSDan Gohman  ]
66*950a13cfSDan Gohman
67*950a13cfSDan Gohmansw.bb:                                            ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry
68*950a13cfSDan Gohman  tail call void @foo0()
69*950a13cfSDan Gohman  br label %sw.epilog
70*950a13cfSDan Gohman
71*950a13cfSDan Gohmansw.bb.1:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
72*950a13cfSDan Gohman  tail call void @foo1()
73*950a13cfSDan Gohman  br label %sw.epilog
74*950a13cfSDan Gohman
75*950a13cfSDan Gohmansw.bb.2:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry
76*950a13cfSDan Gohman  tail call void @foo2()
77*950a13cfSDan Gohman  br label %sw.epilog
78*950a13cfSDan Gohman
79*950a13cfSDan Gohmansw.bb.3:                                          ; preds = %entry
80*950a13cfSDan Gohman  tail call void @foo3()
81*950a13cfSDan Gohman  br label %sw.epilog
82*950a13cfSDan Gohman
83*950a13cfSDan Gohmansw.bb.4:                                          ; preds = %entry
84*950a13cfSDan Gohman  tail call void @foo4()
85*950a13cfSDan Gohman  br label %sw.epilog
86*950a13cfSDan Gohman
87*950a13cfSDan Gohmansw.bb.5:                                          ; preds = %entry
88*950a13cfSDan Gohman  tail call void @foo5()
89*950a13cfSDan Gohman  br label %sw.epilog
90*950a13cfSDan Gohman
91*950a13cfSDan Gohmansw.epilog:                                        ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb
92*950a13cfSDan Gohman  ret void
93*950a13cfSDan Gohman}
94*950a13cfSDan Gohman
95*950a13cfSDan Gohman; CHECK-LABEL: bar64
96*950a13cfSDan Gohman; CHECK: (block $BB1_8)
97*950a13cfSDan Gohman; CHECK: (block $BB1_7)
98*950a13cfSDan Gohman; CHECK: (block $BB1_6)
99*950a13cfSDan Gohman; CHECK: (block $BB1_5)
100*950a13cfSDan Gohman; CHECK: (block $BB1_4)
101*950a13cfSDan Gohman; CHECK: (block $BB1_3)
102*950a13cfSDan Gohman; CHECK: (block $BB1_2)
103*950a13cfSDan 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*950a13cfSDan Gohman; CHECk: BB1_2:
105*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo0))
106*950a13cfSDan Gohman; CHECK: BB1_3:
107*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo1))
108*950a13cfSDan Gohman; CHECK: BB1_4:
109*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo2))
110*950a13cfSDan Gohman; CHECK: BB1_5:
111*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo3))
112*950a13cfSDan Gohman; CHECK: BB1_6:
113*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo4))
114*950a13cfSDan Gohman; CHECK: BB1_7:
115*950a13cfSDan Gohman; CHECK:   (setlocal {{.*}} (global $foo5))
116*950a13cfSDan Gohman; CHECK: BB1_8:
117*950a13cfSDan Gohman; CHECK:   (return)
118*950a13cfSDan Gohmandefine void @bar64(i64 %n) {
119*950a13cfSDan Gohmanentry:
120*950a13cfSDan Gohman  switch i64 %n, label %sw.epilog [
121*950a13cfSDan Gohman    i64 0, label %sw.bb
122*950a13cfSDan Gohman    i64 1, label %sw.bb
123*950a13cfSDan Gohman    i64 2, label %sw.bb
124*950a13cfSDan Gohman    i64 3, label %sw.bb
125*950a13cfSDan Gohman    i64 4, label %sw.bb
126*950a13cfSDan Gohman    i64 5, label %sw.bb
127*950a13cfSDan Gohman    i64 6, label %sw.bb
128*950a13cfSDan Gohman    i64 7, label %sw.bb.1
129*950a13cfSDan Gohman    i64 8, label %sw.bb.1
130*950a13cfSDan Gohman    i64 9, label %sw.bb.1
131*950a13cfSDan Gohman    i64 10, label %sw.bb.1
132*950a13cfSDan Gohman    i64 11, label %sw.bb.1
133*950a13cfSDan Gohman    i64 12, label %sw.bb.1
134*950a13cfSDan Gohman    i64 13, label %sw.bb.1
135*950a13cfSDan Gohman    i64 14, label %sw.bb.1
136*950a13cfSDan Gohman    i64 15, label %sw.bb.2
137*950a13cfSDan Gohman    i64 16, label %sw.bb.2
138*950a13cfSDan Gohman    i64 17, label %sw.bb.2
139*950a13cfSDan Gohman    i64 18, label %sw.bb.2
140*950a13cfSDan Gohman    i64 19, label %sw.bb.2
141*950a13cfSDan Gohman    i64 20, label %sw.bb.2
142*950a13cfSDan Gohman    i64 21, label %sw.bb.3
143*950a13cfSDan Gohman    i64 22, label %sw.bb.4
144*950a13cfSDan Gohman    i64 23, label %sw.bb.5
145*950a13cfSDan Gohman  ]
146*950a13cfSDan Gohman
147*950a13cfSDan Gohmansw.bb:                                            ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry
148*950a13cfSDan Gohman  tail call void @foo0()
149*950a13cfSDan Gohman  br label %sw.epilog
150*950a13cfSDan Gohman
151*950a13cfSDan Gohmansw.bb.1:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
152*950a13cfSDan Gohman  tail call void @foo1()
153*950a13cfSDan Gohman  br label %sw.epilog
154*950a13cfSDan Gohman
155*950a13cfSDan Gohmansw.bb.2:                                          ; preds = %entry, %entry, %entry, %entry, %entry, %entry
156*950a13cfSDan Gohman  tail call void @foo2()
157*950a13cfSDan Gohman  br label %sw.epilog
158*950a13cfSDan Gohman
159*950a13cfSDan Gohmansw.bb.3:                                          ; preds = %entry
160*950a13cfSDan Gohman  tail call void @foo3()
161*950a13cfSDan Gohman  br label %sw.epilog
162*950a13cfSDan Gohman
163*950a13cfSDan Gohmansw.bb.4:                                          ; preds = %entry
164*950a13cfSDan Gohman  tail call void @foo4()
165*950a13cfSDan Gohman  br label %sw.epilog
166*950a13cfSDan Gohman
167*950a13cfSDan Gohmansw.bb.5:                                          ; preds = %entry
168*950a13cfSDan Gohman  tail call void @foo5()
169*950a13cfSDan Gohman  br label %sw.epilog
170*950a13cfSDan Gohman
171*950a13cfSDan Gohmansw.epilog:                                        ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb
172*950a13cfSDan Gohman  ret void
173*950a13cfSDan Gohman}
174