Files
clang-p2996/llvm/test/CodeGen/WebAssembly/atomic-fence.mir
Thomas Lively 122b0220fd [WebAssembly] Remove datalayout strings from llc tests
The data layout strings do not have any effect on llc tests and will become
misleadingly out of date as we continue to update the canonical data layout, so
remove them from the tests.

Differential Revision: https://reviews.llvm.org/D105842
2021-07-14 11:17:08 -07:00

67 lines
2.1 KiB
YAML

# RUN: llc -mtriple=wasm32-unknown-unknown -run-pass wasm-reg-stackify -run-pass wasm-explicit-locals %s -o - | FileCheck %s
# In the two tests below, without compiler_fence or atomic.fence in between,
# memory.atomic.notify and i32.add will be reordered by register stackify pass
# to meet 'call @foo''s requirements. But because we have fences between
# memory.atomic.notify and i32.add, they cannot be reordered, and local.set and
# local.get are inserted to save and load memory.atomic.notify's return value.
--- |
target triple = "wasm32-unknown-unknown"
declare void @foo(i32, i32)
define void @compiler_fence_test(i32) {
ret void
}
define void @atomic_fence_test(i32) {
ret void
}
...
---
# CHECK-LABEL: name: compiler_fence_test
name: compiler_fence_test
liveins:
- { reg: '$arguments' }
tracksRegLiveness: true
body: |
bb.0:
; CHECK: %[[REG:[0-9]+]]:i32 = MEMORY_ATOMIC_NOTIFY_A32
; CHECK: LOCAL_SET_I32 [[LOCAL:[0-9]+]], %[[REG]]
; CHECK: COMPILER_FENCE
; CHECK: ADD_I32
; CHECK: LOCAL_GET_I32 [[LOCAL]]
; CHECK: CALL @foo
liveins: $arguments
%0:i32 = CONST_I32 0, implicit-def $arguments
%1:i32 = MEMORY_ATOMIC_NOTIFY_A32 2, 0, %0:i32, %0:i32, implicit-def $arguments
COMPILER_FENCE implicit-def $arguments
%2:i32 = ADD_I32 %0:i32, %0:i32, implicit-def $arguments
CALL @foo, %2:i32, %1:i32, implicit-def $arguments
RETURN implicit-def $arguments
...
---
# CHECK-LABEL: name: atomic_fence_test
name: atomic_fence_test
liveins:
- { reg: '$arguments' }
tracksRegLiveness: true
body: |
bb.0:
; CHECK: %[[REG:[0-9]+]]:i32 = MEMORY_ATOMIC_NOTIFY_A32
; CHECK: LOCAL_SET_I32 [[LOCAL:[0-9]+]], %[[REG]]
; CHECK: ATOMIC_FENCE
; CHECK: ADD_I32
; CHECK: LOCAL_GET_I32 [[LOCAL]]
; CHECK: CALL @foo
liveins: $arguments
%0:i32 = CONST_I32 0, implicit-def $arguments
%1:i32 = MEMORY_ATOMIC_NOTIFY_A32 2, 0, %0:i32, %0:i32, implicit-def $arguments
ATOMIC_FENCE 0, implicit-def $arguments
%2:i32 = ADD_I32 %0:i32, %0:i32, implicit-def $arguments
CALL @foo, %2:i32, %1:i32, implicit-def $arguments
RETURN implicit-def $arguments
...