[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / CodeGen / WebAssembly / switch-unreachable-default.ll
blobf20b4c9017cc862dd5b3041997f45c218fa9f9fa
1 ; RUN: llc < %s -asm-verbose=false -verify-machineinstrs | FileCheck %s
3 target triple = "wasm32-unknown-unknown"
5 ; Test that switches are lowered correctly in the presence of an
6 ; unreachable default branch target.
8 ; CHECK-LABEL: foo:
9 ; CHECK-NEXT:    .functype foo (i32) -> (i32)
10 ; CHECK-NEXT:    block
11 ; CHECK-NEXT:    block
12 ; CHECK-NEXT:    local.get 0
13 ; CHECK-NEXT:    br_table {0, 1, 0}
14 ; CHECK-NEXT:  .LBB0_1:
15 ; CHECK-NEXT:    end_block
16 ; CHECK-NEXT:    i32.const 0
17 ; CHECK-NEXT:    return
18 ; CHECK-NEXT:  .LBB0_2:
19 ; CHECK-NEXT:    end_block
20 ; CHECK-NEXT:    i32.const 1
21 ; CHECK-NEXT:    end_function
22 define i32 @foo(i32 %x) {
23 entry:
24   switch i32 %x, label %unreachable [
25     i32 0, label %bb0
26     i32 1, label %bb1
27   ]
29 bb0:
30   ret i32 0
32 bb1:
33   ret i32 1
35 unreachable:
36   unreachable
39 ; CHECK-LABEL: split:
40 ; CHECK:    .functype split (i32) -> ()
41 ; CHECK:    block
42 ; CHECK:    br_if 0
43 ; CHECK:    block
44 ; CHECK:    block
45 ; CHECK:    br_table {1, 1, 0}
46 ; CHECK: .LBB1_2
47 ; CHECK:    end_block
48 ; CHECK:    br_table {0, 0, 0, 0, 0, 0, 0, 0}
49 ; CHECK: .LBB1_3
50 ; CHECK:    end_block
51 ; CHECK:    unreachable
52 ; CHECK: .LBB1_4
53 ; CHECK:    end_block
54 ; CHECK:    end_function
55 define void @split(i8 %c) {
56 entry:
57   switch i8 %c, label %sw.default [
58     i8 114, label %return
59     i8 103, label %sw.bb1
60     i8 98, label %sw.bb2
61     i8 97, label %sw.bb3
62     i8 48, label %sw.bb4
63     i8 49, label %sw.bb5
64   ]
66 sw.bb1:
67   unreachable
69 sw.bb2:
70   unreachable
72 sw.bb3:
73   unreachable
75 sw.bb4:
76   unreachable
78 sw.bb5:
79   unreachable
81 sw.default:
82   unreachable
84 return:
85   ret void