1; RUN: llc < %s -asm-verbose=false -verify-machineinstrs | FileCheck %s 2 3target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 4target triple = "wasm32-unknown-unknown" 5 6; Test that switches are lowered correctly in the presence of an 7; unreachable default branch target. 8 9; CHECK-LABEL: foo: 10; CHECK-NEXT: .functype foo (i32) -> (i32) 11; CHECK-NEXT: block 12; CHECK-NEXT: block 13; CHECK-NEXT: local.get 0 14; CHECK-NEXT: br_table {0, 1, 0} 15; CHECK-NEXT: .LBB0_1: 16; CHECK-NEXT: end_block 17; CHECK-NEXT: i32.const 0 18; CHECK-NEXT: return 19; CHECK-NEXT: .LBB0_2: 20; CHECK-NEXT: end_block 21; CHECK-NEXT: i32.const 1 22; CHECK-NEXT: end_function 23define i32 @foo(i32 %x) { 24entry: 25 switch i32 %x, label %unreachable [ 26 i32 0, label %bb0 27 i32 1, label %bb1 28 ] 29 30bb0: 31 ret i32 0 32 33bb1: 34 ret i32 1 35 36unreachable: 37 unreachable 38} 39 40; CHECK-LABEL: split: 41; CHECK: .functype split (i32) -> () 42; CHECK: block 43; CHECK: br_if 0 44; CHECK: block 45; CHECK: block 46; CHECK: br_table {1, 1, 1, 1, 1, 1, 1, 0} 47; CHECK: .LBB1_2 48; CHECK: end_block 49; CHECK: br_table {0, 0, 0} 50; CHECK: .LBB1_3 51; CHECK: end_block 52; CHECK: unreachable 53; CHECK: .LBB1_4 54; CHECK: end_block 55; CHECK: end_function 56define void @split(i8 %c) { 57entry: 58 switch i8 %c, label %sw.default [ 59 i8 114, label %return 60 i8 103, label %sw.bb1 61 i8 98, label %sw.bb2 62 i8 97, label %sw.bb3 63 i8 48, label %sw.bb4 64 i8 49, label %sw.bb5 65 ] 66 67sw.bb1: 68 unreachable 69 70sw.bb2: 71 unreachable 72 73sw.bb3: 74 unreachable 75 76sw.bb4: 77 unreachable 78 79sw.bb5: 80 unreachable 81 82sw.default: 83 unreachable 84 85return: 86 ret void 87} 88