1 ; RUN: llc < %s -asm-verbose=false | FileCheck %s
3 ; Test switch instructions.
5 target datalayout = "e-p:32:32-i64:64-n32:64-S128"
6 target triple = "wasm32-unknown-unknown"
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)
38 define void @bar32(i32 %n) {
40 switch i32 %n, label %sw.epilog [
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
67 sw.bb: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry
68 tail call void @foo0()
71 sw.bb.1: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
72 tail call void @foo1()
75 sw.bb.2: ; preds = %entry, %entry, %entry, %entry, %entry, %entry
76 tail call void @foo2()
79 sw.bb.3: ; preds = %entry
80 tail call void @foo3()
83 sw.bb.4: ; preds = %entry
84 tail call void @foo4()
87 sw.bb.5: ; preds = %entry
88 tail call void @foo5()
91 sw.epilog: ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb
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)
105 ; CHECK: (call $foo0)
107 ; CHECK: (call $foo1)
109 ; CHECK: (call $foo2)
111 ; CHECK: (call $foo3)
113 ; CHECK: (call $foo4)
115 ; CHECK: (call $foo5)
118 define void @bar64(i64 %n) {
120 switch i64 %n, label %sw.epilog [
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
147 sw.bb: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry
148 tail call void @foo0()
151 sw.bb.1: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry
152 tail call void @foo1()
155 sw.bb.2: ; preds = %entry, %entry, %entry, %entry, %entry, %entry
156 tail call void @foo2()
159 sw.bb.3: ; preds = %entry
160 tail call void @foo3()
163 sw.bb.4: ; preds = %entry
164 tail call void @foo4()
167 sw.bb.5: ; preds = %entry
168 tail call void @foo5()
171 sw.epilog: ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb