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