1; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s
2
3; Test that basic functions assemble as expected.
4
5target triple = "wasm32-unknown-unknown"
6
7; CHECK-LABEL: f0:
8; CHECK: return{{$}}
9; CHECK: end_function{{$}}
10; CHECK: .size f0,
11define void @f0() {
12  ret void
13}
14
15; CHECK-LABEL: f1:
16; CHECK-NEXT: .functype f1 () -> (i32){{$}}
17; CHECK-NEXT: i32.const $push[[NUM:[0-9]+]]=, 0{{$}}
18; CHECK-NEXT: return $pop[[NUM]]{{$}}
19; CHECK: .size f1,
20define i32 @f1() {
21  ret i32 0
22}
23
24; CHECK-LABEL: f2:
25; CHECK-NEXT: .functype f2 (i32, f32) -> (i32){{$}}
26; CHECK-NEXT: i32.const $push[[NUM:[0-9]+]]=, 0{{$}}
27; CHECK-NEXT: return $pop[[NUM]]{{$}}
28; CHECK: .size f2,
29define i32 @f2(i32 %p1, float %p2) {
30  ret i32 0
31}
32
33; CHECK-LABEL: f3:
34; CHECK-NEXT: .functype f3 (i32, f32) -> (){{$}}
35; CHECK-NOT: local
36; CHECK-NEXT: return{{$}}
37; CHECK: .size f3,
38define void @f3(i32 %p1, float %p2) {
39  ret void
40}
41
42; CHECK-LABEL: f4:
43; CHECK-NEXT: .functype f4 (i32) -> (i32){{$}}
44; CHECK-NOT: local
45; CHECK: .size f4,
46define i32 @f4(i32 %x) {
47entry:
48   %c = trunc i32 %x to i1
49   br i1 %c, label %true, label %false
50true:
51   ret i32 0
52false:
53   ret i32 1
54}
55
56; CHECK-LABEL: f5:
57; CHECK-NEXT: .functype f5 () -> (f32){{$}}
58; CHECK-NEXT: unreachable
59define float @f5()  {
60 unreachable
61}
62