1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -disable-block-placement -verify-machineinstrs | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test switch instructions. Block placement is disabled because it reorders 4*9880d681SAndroid Build Coastguard Worker; the blocks in a way that isn't interesting here. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 7*9880d681SAndroid Build Coastguard Workertarget triple = "wasm32-unknown-unknown" 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdeclare void @foo0() 10*9880d681SAndroid Build Coastguard Workerdeclare void @foo1() 11*9880d681SAndroid Build Coastguard Workerdeclare void @foo2() 12*9880d681SAndroid Build Coastguard Workerdeclare void @foo3() 13*9880d681SAndroid Build Coastguard Workerdeclare void @foo4() 14*9880d681SAndroid Build Coastguard Workerdeclare void @foo5() 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bar32: 17*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 18*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 19*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 20*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 21*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 22*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 23*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 24*9880d681SAndroid Build Coastguard Worker; CHECK: br_table {{[^,]+}}, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 0{{$}} 25*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB0_2: 26*9880d681SAndroid Build Coastguard Worker; CHECK: call foo0@FUNCTION{{$}} 27*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB0_3: 28*9880d681SAndroid Build Coastguard Worker; CHECK: call foo1@FUNCTION{{$}} 29*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB0_4: 30*9880d681SAndroid Build Coastguard Worker; CHECK: call foo2@FUNCTION{{$}} 31*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB0_5: 32*9880d681SAndroid Build Coastguard Worker; CHECK: call foo3@FUNCTION{{$}} 33*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB0_6: 34*9880d681SAndroid Build Coastguard Worker; CHECK: call foo4@FUNCTION{{$}} 35*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB0_7: 36*9880d681SAndroid Build Coastguard Worker; CHECK: call foo5@FUNCTION{{$}} 37*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB0_8: 38*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 39*9880d681SAndroid Build Coastguard Workerdefine void @bar32(i32 %n) { 40*9880d681SAndroid Build Coastguard Workerentry: 41*9880d681SAndroid Build Coastguard Worker switch i32 %n, label %sw.epilog [ 42*9880d681SAndroid Build Coastguard Worker i32 0, label %sw.bb 43*9880d681SAndroid Build Coastguard Worker i32 1, label %sw.bb 44*9880d681SAndroid Build Coastguard Worker i32 2, label %sw.bb 45*9880d681SAndroid Build Coastguard Worker i32 3, label %sw.bb 46*9880d681SAndroid Build Coastguard Worker i32 4, label %sw.bb 47*9880d681SAndroid Build Coastguard Worker i32 5, label %sw.bb 48*9880d681SAndroid Build Coastguard Worker i32 6, label %sw.bb 49*9880d681SAndroid Build Coastguard Worker i32 7, label %sw.bb.1 50*9880d681SAndroid Build Coastguard Worker i32 8, label %sw.bb.1 51*9880d681SAndroid Build Coastguard Worker i32 9, label %sw.bb.1 52*9880d681SAndroid Build Coastguard Worker i32 10, label %sw.bb.1 53*9880d681SAndroid Build Coastguard Worker i32 11, label %sw.bb.1 54*9880d681SAndroid Build Coastguard Worker i32 12, label %sw.bb.1 55*9880d681SAndroid Build Coastguard Worker i32 13, label %sw.bb.1 56*9880d681SAndroid Build Coastguard Worker i32 14, label %sw.bb.1 57*9880d681SAndroid Build Coastguard Worker i32 15, label %sw.bb.2 58*9880d681SAndroid Build Coastguard Worker i32 16, label %sw.bb.2 59*9880d681SAndroid Build Coastguard Worker i32 17, label %sw.bb.2 60*9880d681SAndroid Build Coastguard Worker i32 18, label %sw.bb.2 61*9880d681SAndroid Build Coastguard Worker i32 19, label %sw.bb.2 62*9880d681SAndroid Build Coastguard Worker i32 20, label %sw.bb.2 63*9880d681SAndroid Build Coastguard Worker i32 21, label %sw.bb.3 64*9880d681SAndroid Build Coastguard Worker i32 22, label %sw.bb.4 65*9880d681SAndroid Build Coastguard Worker i32 23, label %sw.bb.5 66*9880d681SAndroid Build Coastguard Worker ] 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workersw.bb: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry 69*9880d681SAndroid Build Coastguard Worker tail call void @foo0() 70*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workersw.bb.1: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry 73*9880d681SAndroid Build Coastguard Worker tail call void @foo1() 74*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workersw.bb.2: ; preds = %entry, %entry, %entry, %entry, %entry, %entry 77*9880d681SAndroid Build Coastguard Worker tail call void @foo2() 78*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workersw.bb.3: ; preds = %entry 81*9880d681SAndroid Build Coastguard Worker tail call void @foo3() 82*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Workersw.bb.4: ; preds = %entry 85*9880d681SAndroid Build Coastguard Worker tail call void @foo4() 86*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workersw.bb.5: ; preds = %entry 89*9880d681SAndroid Build Coastguard Worker tail call void @foo5() 90*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workersw.epilog: ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb 93*9880d681SAndroid Build Coastguard Worker ret void 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bar64: 97*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 98*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 99*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 100*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 101*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 102*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 103*9880d681SAndroid Build Coastguard Worker; CHECK: block{{$}} 104*9880d681SAndroid Build Coastguard Worker; CHECK: br_table {{[^,]+}}, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4, 5, 0{{$}} 105*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB1_2: 106*9880d681SAndroid Build Coastguard Worker; CHECK: call foo0@FUNCTION{{$}} 107*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB1_3: 108*9880d681SAndroid Build Coastguard Worker; CHECK: call foo1@FUNCTION{{$}} 109*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB1_4: 110*9880d681SAndroid Build Coastguard Worker; CHECK: call foo2@FUNCTION{{$}} 111*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB1_5: 112*9880d681SAndroid Build Coastguard Worker; CHECK: call foo3@FUNCTION{{$}} 113*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB1_6: 114*9880d681SAndroid Build Coastguard Worker; CHECK: call foo4@FUNCTION{{$}} 115*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB1_7: 116*9880d681SAndroid Build Coastguard Worker; CHECK: call foo5@FUNCTION{{$}} 117*9880d681SAndroid Build Coastguard Worker; CHECK: .LBB1_8: 118*9880d681SAndroid Build Coastguard Worker; CHECK: return{{$}} 119*9880d681SAndroid Build Coastguard Workerdefine void @bar64(i64 %n) { 120*9880d681SAndroid Build Coastguard Workerentry: 121*9880d681SAndroid Build Coastguard Worker switch i64 %n, label %sw.epilog [ 122*9880d681SAndroid Build Coastguard Worker i64 0, label %sw.bb 123*9880d681SAndroid Build Coastguard Worker i64 1, label %sw.bb 124*9880d681SAndroid Build Coastguard Worker i64 2, label %sw.bb 125*9880d681SAndroid Build Coastguard Worker i64 3, label %sw.bb 126*9880d681SAndroid Build Coastguard Worker i64 4, label %sw.bb 127*9880d681SAndroid Build Coastguard Worker i64 5, label %sw.bb 128*9880d681SAndroid Build Coastguard Worker i64 6, label %sw.bb 129*9880d681SAndroid Build Coastguard Worker i64 7, label %sw.bb.1 130*9880d681SAndroid Build Coastguard Worker i64 8, label %sw.bb.1 131*9880d681SAndroid Build Coastguard Worker i64 9, label %sw.bb.1 132*9880d681SAndroid Build Coastguard Worker i64 10, label %sw.bb.1 133*9880d681SAndroid Build Coastguard Worker i64 11, label %sw.bb.1 134*9880d681SAndroid Build Coastguard Worker i64 12, label %sw.bb.1 135*9880d681SAndroid Build Coastguard Worker i64 13, label %sw.bb.1 136*9880d681SAndroid Build Coastguard Worker i64 14, label %sw.bb.1 137*9880d681SAndroid Build Coastguard Worker i64 15, label %sw.bb.2 138*9880d681SAndroid Build Coastguard Worker i64 16, label %sw.bb.2 139*9880d681SAndroid Build Coastguard Worker i64 17, label %sw.bb.2 140*9880d681SAndroid Build Coastguard Worker i64 18, label %sw.bb.2 141*9880d681SAndroid Build Coastguard Worker i64 19, label %sw.bb.2 142*9880d681SAndroid Build Coastguard Worker i64 20, label %sw.bb.2 143*9880d681SAndroid Build Coastguard Worker i64 21, label %sw.bb.3 144*9880d681SAndroid Build Coastguard Worker i64 22, label %sw.bb.4 145*9880d681SAndroid Build Coastguard Worker i64 23, label %sw.bb.5 146*9880d681SAndroid Build Coastguard Worker ] 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workersw.bb: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry 149*9880d681SAndroid Build Coastguard Worker tail call void @foo0() 150*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 151*9880d681SAndroid Build Coastguard Worker 152*9880d681SAndroid Build Coastguard Workersw.bb.1: ; preds = %entry, %entry, %entry, %entry, %entry, %entry, %entry, %entry 153*9880d681SAndroid Build Coastguard Worker tail call void @foo1() 154*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 155*9880d681SAndroid Build Coastguard Worker 156*9880d681SAndroid Build Coastguard Workersw.bb.2: ; preds = %entry, %entry, %entry, %entry, %entry, %entry 157*9880d681SAndroid Build Coastguard Worker tail call void @foo2() 158*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workersw.bb.3: ; preds = %entry 161*9880d681SAndroid Build Coastguard Worker tail call void @foo3() 162*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Workersw.bb.4: ; preds = %entry 165*9880d681SAndroid Build Coastguard Worker tail call void @foo4() 166*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Workersw.bb.5: ; preds = %entry 169*9880d681SAndroid Build Coastguard Worker tail call void @foo5() 170*9880d681SAndroid Build Coastguard Worker br label %sw.epilog 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Workersw.epilog: ; preds = %entry, %sw.bb.5, %sw.bb.4, %sw.bb.3, %sw.bb.2, %sw.bb.1, %sw.bb 173*9880d681SAndroid Build Coastguard Worker ret void 174*9880d681SAndroid Build Coastguard Worker} 175