diff --git a/llvm/test/CodeGen/WebAssembly/call-indirect.ll b/llvm/test/CodeGen/WebAssembly/call-indirect.ll index 8d79d9320b76a..b88d0965a0d53 100644 --- a/llvm/test/CodeGen/WebAssembly/call-indirect.ll +++ b/llvm/test/CodeGen/WebAssembly/call-indirect.ll @@ -18,22 +18,6 @@ define void @call_indirect_void(ptr %callee) { ret void } -; CHECK-LABEL: call_indirect_alloca: -; CHECK-NEXT: .functype call_indirect_alloca () -> () -; CHECK: local.tee 0 -; CHECK-NEXT: global.set __stack_pointer -; CHECK-NEXT: local.get 0 -; CHECK-NEXT: i32.const 12 -; CHECK-NEXT: i32.add -; REF: call_indirect __indirect_function_table, () -> () -; NOREF: call_indirect () -> () -define void @call_indirect_alloca() { -entry: - %ptr = alloca i32, align 4 - call void %ptr() - ret void -} - ; OBJ: Imports: ; OBJ-NEXT: - Module: env ; OBJ-NEXT: Field: __linear_memory @@ -41,10 +25,5 @@ entry: ; OBJ-NEXT: Memory: ; OBJ-NEXT: Minimum: 0x0 ; OBJ-NEXT: - Module: env -; OBJ-NEXT: Field: __stack_pointer -; OBJ-NEXT: Kind: GLOBAL -; OBJ-NEXT: GlobalType: I32 -; OBJ-NEXT: GlobalMutable: true -; OBJ-NEXT: - Module: env ; OBJ-NEXT: Field: __indirect_function_table ; OBJ-NEXT: Kind: TABLE diff --git a/llvm/test/CodeGen/WebAssembly/call.ll b/llvm/test/CodeGen/WebAssembly/call.ll index 6e7a97118bc96..0ae1adc70b143 100644 --- a/llvm/test/CodeGen/WebAssembly/call.ll +++ b/llvm/test/CodeGen/WebAssembly/call.ll @@ -236,6 +236,21 @@ bb2: ret void } +; Allocas should be lowered to call_indirects. +; CHECK-LABEL: call_indirect_alloca: +; CHECK: local.tee $push{{.*}}=, [[L0:[0-9]+]] +; CHECK-NEXT: global.set __stack_pointer +; CHECK-NEXT: local.get $push{{.*}}=, [[L0]] +; CHECK-NEXT: i32.const $push{{.*}}=, 12 +; CHECK-NEXT: i32.add +; CHECK-NEXT: call_indirect $pop{{.*}} +define void @call_indirect_alloca() { +entry: + %ptr = alloca i32, align 4 + call void %ptr() + ret void +} + ; TODO: test the following: ; - More argument combinations. ; - Tail call.