1; 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: (call $foo0) 26; CHECK: BB0_3: 27; CHECK: (call $foo1) 28; CHECK: BB0_4: 29; CHECK: (call $foo2) 30; CHECK: BB0_5: 31; CHECK: (call $foo3) 32; CHECK: BB0_6: 33; CHECK: (call $foo4) 34; CHECK: BB0_7: 35; CHECK: (call $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: (call $foo0) 106; CHECK: BB1_3: 107; CHECK: (call $foo1) 108; CHECK: BB1_4: 109; CHECK: (call $foo2) 110; CHECK: BB1_5: 111; CHECK: (call $foo3) 112; CHECK: BB1_6: 113; CHECK: (call $foo4) 114; CHECK: BB1_7: 115; CHECK: (call $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} 174