
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
18 lines
633 B
LLVM
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
|
|
}
|