Files
clang-p2996/llvm/test/CodeGen/WebAssembly/call-indirect.ll
Heejin Ahn 47fc0186e6 [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
2023-04-05 01:41:59 -07:00

30 lines
1.1 KiB
LLVM

; RUN: llc < %s -asm-verbose=false -O2 | FileCheck --check-prefixes=CHECK,NOREF %s
; RUN: llc < %s -asm-verbose=false -mattr=+reference-types -O2 | FileCheck --check-prefixes=CHECK,REF %s
; RUN: llc < %s -asm-verbose=false -O2 --filetype=obj | obj2yaml | FileCheck --check-prefix=OBJ %s
; Test that compilation units with call_indirect but without any
; function pointer declarations still get a table.
target triple = "wasm32-unknown-unknown"
; CHECK-LABEL: call_indirect_void:
; CHECK-NEXT: .functype call_indirect_void (i32) -> ()
; CHECK-NEXT: local.get 0
; REF: call_indirect __indirect_function_table, () -> ()
; NOREF: call_indirect () -> ()
; CHECK-NEXT: end_function
define void @call_indirect_void(ptr %callee) {
call void %callee()
ret void
}
; OBJ: Imports:
; OBJ-NEXT: - Module: env
; OBJ-NEXT: Field: __linear_memory
; OBJ-NEXT: Kind: MEMORY
; OBJ-NEXT: Memory:
; OBJ-NEXT: Minimum: 0x0
; OBJ-NEXT: - Module: env
; OBJ-NEXT: Field: __indirect_function_table
; OBJ-NEXT: Kind: TABLE