1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00
llvm-mirror/test/CodeGen/WebAssembly/ir-locals-stackid.ll
Andy Wingo a2b88794ad [WebAssembly][CodeGen] IR support for WebAssembly local variables
This patch adds TargetStackID::WasmLocal.  This stack holds locations of
values that are only addressable by name -- not via a pointer to memory.
For the WebAssembly target, these objects are lowered to WebAssembly
local variables, which are managed by the WebAssembly run-time and are
not addressable by linear memory.

For the WebAssembly target IR indicates that an AllocaInst should be put
on TargetStackID::WasmLocal by putting it in the non-integral address
space WASM_ADDRESS_SPACE_WASM_VAR, with value 1.  SROA will mostly lift
these allocations to SSA locals, but any alloca that reaches instruction
selection (usually in non-optimized builds) will be assigned the new
TargetStackID there.  Loads and stores to those values are transformed
to new WebAssemblyISD::LOCAL_GET / WebAssemblyISD::LOCAL_SET nodes,
which then lower to the type-specific LOCAL_GET_I32 etc instructions via
tablegen patterns.

Differential Revision: https://reviews.llvm.org/D101140
2021-06-01 11:31:39 +02:00

23 lines
803 B
LLVM

; RUN: llc -mtriple=wasm32-unknown-unknown -asm-verbose=false < %s | FileCheck %s --check-prefix=CHECKCG
; RUN: llc -mtriple=wasm32-unknown-unknown -stop-after=finalize-isel < %s | FileCheck %s --check-prefix=CHECKISEL
%f32_cell = type float addrspace(1)*
; CHECKISEL-LABEL: name: ir_local_f32
; CHECKISEL: stack:
; CHECKISEL: id: 0, name: retval, type: default, offset: 1, size: 1, alignment: 4,
; CHECKISEL-NEXT: stack-id: wasm-local
; CHECKCG-LABEL: ir_local_f32:
; CHECKCG-NEXT: .functype ir_local_f32 (f32) -> (f32)
; CHECKCG-NEXT: .local f32
; CHECKCG-NEXT: local.get 0
; CHECKCG-NEXT: local.set 1
define float @ir_local_f32(float %arg) {
%retval = alloca float, addrspace(1)
store float %arg, %f32_cell %retval
%reloaded = load float, %f32_cell %retval
ret float %reloaded
}