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