llvm-project/llvm/test/CodeGen/WebAssembly/global-set-unlowerable.ll
Alex Bradbury 104a24ec8b [WebAssembly] Produce error when encountering unlowerable Wasm global accesses
WebAssembly globals are represented as IR globals with the wasm_var
address space (AS1). Prior to this patch, a wasm global load that isn't
lowerable will produce a failure to select, while a wasm global store
will produced incorrect code. This patch ensures we consistently produce
a clear error.

As noted in the test cases, it's conceivable that a frontend or an
optimisation pass could produce similar IR even in the presence of the
semantic restrictions on pointers to Wasm globals in the frontend, which
is a separate problem to address.

Differential Revision: https://reviews.llvm.org/D131387
2022-08-10 10:34:10 +01:00

18 lines
633 B
LLVM

; RUN: not llc < %s --mtriple=wasm32 2>&1 | FileCheck %s
; Demonstrates a code pattern that could be encountered even with frontend
; restrictions on creating new pointers to globals. In the absence of a better
; fix, the backend should produce a comprehensible message for why it can't
; continue.
; CHECK: LVM ERROR: Encountered an unlowerable store to the wasm_var address space
@g1 = external addrspace(1) global i32
@g2 = external addrspace(1) global i32
define void @global_set_phi(i1 zeroext %bool) {
%sel = select i1 %bool, ptr addrspace(1) @g1, ptr addrspace(1) @g2
store i32 100, ptr addrspace(1) %sel
ret void
}