; RUN: llc < %s -asm-verbose=false -verify-machineinstrs | FileCheck %s target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" target triple = "wasm32-unknown-unknown" ; Test that switches are lowered correctly in the presence of an ; unreachable default branch target. ; CHECK-LABEL: foo: ; CHECK-NEXT: .functype foo (i32) -> (i32) ; CHECK-NEXT: block ; CHECK-NEXT: block ; CHECK-NEXT: local.get 0 ; CHECK-NEXT: br_table {0, 1, 0} ; CHECK-NEXT: .LBB0_1: ; CHECK-NEXT: end_block ; CHECK-NEXT: i32.const 0 ; CHECK-NEXT: return ; CHECK-NEXT: .LBB0_2: ; CHECK-NEXT: end_block ; CHECK-NEXT: i32.const 1 ; CHECK-NEXT: end_function define i32 @foo(i32 %x) { entry: switch i32 %x, label %unreachable [ i32 0, label %bb0 i32 1, label %bb1 ] bb0: ret i32 0 bb1: ret i32 1 unreachable: unreachable } ; CHECK-LABEL: split: ; CHECK: .functype split (i32) -> () ; CHECK: block ; CHECK: br_if 0 ; CHECK: block ; CHECK: block ; CHECK: br_table {1, 1, 0} ; CHECK: .LBB1_2 ; CHECK: end_block ; CHECK: br_table {0, 0, 0, 0, 0, 0, 0, 0} ; CHECK: .LBB1_3 ; CHECK: end_block ; CHECK: unreachable ; CHECK: .LBB1_4 ; CHECK: end_block ; CHECK: end_function define void @split(i8 %c) { entry: switch i8 %c, label %sw.default [ i8 114, label %return i8 103, label %sw.bb1 i8 98, label %sw.bb2 i8 97, label %sw.bb3 i8 48, label %sw.bb4 i8 49, label %sw.bb5 ] sw.bb1: unreachable sw.bb2: unreachable sw.bb3: unreachable sw.bb4: unreachable sw.bb5: unreachable sw.default: unreachable return: ret void }