From 47fc0186e6306f498f463ec1e3fd92b827be7d20 Mon Sep 17 00:00:00 2001 From: Heejin Ahn Date: Sat, 1 Apr 2023 20:08:42 -0700 Subject: [PATCH] [WebAssembly] Move call_indirect_alloca to call.ll Not sure the distinction between `call.ll` and `call-indirect.ll`, because `call.ll` also seems to contain many `call_indirect` tests. Also before D147033 `call-indirect.ll` only contained a single test and it also tests it with `obj2yaml`, so I guess that file was created for testing functionalities for object files as well. We can probably merge these two someday. But anyway, this moves `call_indirect_alloca` I added in D147033 to `call.ll`, given that that file contains more `call_indirect` tests and I'm planning to add more `call_indirect` tests in a followup CL. Reviewed By: tlively Differential Revision: https://reviews.llvm.org/D147396 --- .../test/CodeGen/WebAssembly/call-indirect.ll | 21 ------------------- llvm/test/CodeGen/WebAssembly/call.ll | 15 +++++++++++++ 2 files changed, 15 insertions(+), 21 deletions(-) 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.