mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
69fde521b5
We currently emit a serialization operation (bcr 14, 0) before every atomic load and after every atomic store. This is overly conservative. The SystemZ architecture actually does not require any serialization for atomic loads, and a serialization after an atomic store only if we need to enforce sequential consistency. This is what other compilers for the platform implement as well. llvm-svn: 310093
22 lines
479 B
LLVM
22 lines
479 B
LLVM
; Test 32-bit atomic stores.
|
|
;
|
|
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
|
|
|
|
define void @f1(i32 %val, i32 *%src) {
|
|
; CHECK-LABEL: f1:
|
|
; CHECK: st %r2, 0(%r3)
|
|
; CHECK: bcr 1{{[45]}}, %r0
|
|
; CHECK: br %r14
|
|
store atomic i32 %val, i32 *%src seq_cst, align 4
|
|
ret void
|
|
}
|
|
|
|
define void @f2(i32 %val, i32 *%src) {
|
|
; CHECK-LABEL: f2:
|
|
; CHECK: st %r2, 0(%r3)
|
|
; CHECK-NOT: bcr 1{{[45]}}, %r0
|
|
; CHECK: br %r14
|
|
store atomic i32 %val, i32 *%src monotonic, align 4
|
|
ret void
|
|
}
|