87 lines · plain
1; RUN: llc < %s -asm-verbose=false -verify-machineinstrs | FileCheck %s2 3target triple = "wasm32-unknown-unknown"4 5; Test that switches are lowered correctly in the presence of an6; unreachable default branch target.7 8; CHECK-LABEL: foo:9; CHECK-NEXT: .functype foo (i32) -> (i32)10; CHECK-NEXT: block11; CHECK-NEXT: block12; CHECK-NEXT: local.get 013; CHECK-NEXT: br_table {0, 1, 0}14; CHECK-NEXT: .LBB0_1:15; CHECK-NEXT: end_block16; CHECK-NEXT: i32.const 017; CHECK-NEXT: return18; CHECK-NEXT: .LBB0_2:19; CHECK-NEXT: end_block20; CHECK-NEXT: i32.const 121; CHECK-NEXT: end_function22define i32 @foo(i32 %x) {23entry:24 switch i32 %x, label %unreachable [25 i32 0, label %bb026 i32 1, label %bb127 ]28 29bb0:30 ret i32 031 32bb1:33 ret i32 134 35unreachable:36 unreachable37}38 39; CHECK-LABEL: split:40; CHECK: .functype split (i32) -> ()41; CHECK: block42; CHECK: br_if 043; CHECK: block44; CHECK: block45; CHECK: br_table {1, 1, 0}46; CHECK: .LBB1_247; CHECK: end_block48; CHECK: br_table {0, 0, 0, 0, 0, 0, 0, 0}49; CHECK: .LBB1_350; CHECK: end_block51; CHECK: unreachable52; CHECK: .LBB1_453; CHECK: end_block54; CHECK: end_function55define void @split(i8 %c) {56entry:57 switch i8 %c, label %sw.default [58 i8 114, label %return59 i8 103, label %sw.bb160 i8 98, label %sw.bb261 i8 97, label %sw.bb362 i8 48, label %sw.bb463 i8 49, label %sw.bb564 ]65 66sw.bb1:67 unreachable68 69sw.bb2:70 unreachable71 72sw.bb3:73 unreachable74 75sw.bb4:76 unreachable77 78sw.bb5:79 unreachable80 81sw.default:82 unreachable83 84return:85 ret void86}87