1; RUN: llc --mtriple=wasm32-unknown-unknown -asm-verbose=false %s -o - | FileCheck --check-prefixes CHECK -DPTR=i32 %s
2; RUN: llc --mtriple=wasm64-unknown-unknown -asm-verbose=false %s -o - | FileCheck --check-prefixes CHECK -DPTR=i64 %s
3
4; empty function that does not use stack, to check WebAssemblyMCLowerPrePass
5; works correctly.
6define hidden void @bar() #0 {
7  ret void
8}
9
10; Function that uses explict stack, and should generate a reference to
11; __stack_pointer, along with the corresponding relocation entry.
12define hidden void @foo() #0 {
13entry:
14  alloca i32, align 4
15  ret void
16}
17
18; CHECK:              .text
19; CHECK-NEXT:         .file   "stack-ptr-mclower.ll"
20; CHECK-NEXT:         .globaltype     __stack_pointer, [[PTR]]
21; CHECK-NEXT:         .functype bar () -> ()
22; CHECK-NEXT:         .functype foo () -> ()
23
24; CHECK-NEXT:         .section        .text.bar,"",@
25; CHECK-NEXT:         .hidden bar
26; CHECK-NEXT:         .globl  bar
27; CHECK-NEXT:         .type   bar,@function
28; CHECK-NEXT: bar:
29; CHECK-NEXT:         .functype       bar () -> ()
30; CHECK-NEXT:         end_function
31; CHECK-NEXT: .Lfunc_end0:
32; CHECK-NEXT:         .size   bar, .Lfunc_end0-bar
33
34; CHECK:              .section        .text.foo,"",@
35; CHECK-NEXT:         .hidden foo
36; CHECK-NEXT:         .globl  foo
37; CHECK-NEXT:         .type   foo,@function
38; CHECK-NEXT: foo:
39; CHECK-NEXT:         .functype       foo () -> ()
40; CHECK-NEXT:         global.get      __stack_pointer
41; CHECK-NEXT:         [[PTR]].const       16
42; CHECK-NEXT:         [[PTR]].sub
43; CHECK-NEXT:         drop
44; CHECK-NEXT:         end_function
45; CHECK-NEXT: .Lfunc_end1:
46; CHECK-NEXT:         .size   foo, .Lfunc_end1-foo
47