IIUC, the conversion part is not part of atomic operations and fences should be put around converted atomic operations. This also fixes atomic load of floating point values which requires fence on PowerPC. Reviewed By: efriedma Differential Revision: https://reviews.llvm.org/D127609
32 lines
972 B
LLVM
32 lines
972 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -opaque-pointers -mtriple=powerpc64le-unknown-unknown \
|
|
; RUN: < %s 2>&1 | FileCheck --check-prefix=CHECK-LE %s
|
|
; RUN: llc -opaque-pointers -mtriple=powerpc64-unknown-unknown \
|
|
; RUN: < %s 2>&1 | FileCheck %s
|
|
|
|
define float @bar(float* %fp) {
|
|
; CHECK-LE-LABEL: bar:
|
|
; CHECK-LE: # %bb.0: # %entry
|
|
; CHECK-LE-NEXT: lwz 3, 0(3)
|
|
; CHECK-LE-NEXT: mtfprd 0, 3
|
|
; CHECK-LE-NEXT: cmpd 7, 3, 3
|
|
; CHECK-LE-NEXT: xxsldwi 0, 0, 0, 1
|
|
; CHECK-LE-NEXT: bne- 7, .+4
|
|
; CHECK-LE-NEXT: isync
|
|
; CHECK-LE-NEXT: xscvspdpn 1, 0
|
|
; CHECK-LE-NEXT: blr
|
|
;
|
|
; CHECK-LABEL: bar:
|
|
; CHECK: # %bb.0: # %entry
|
|
; CHECK-NEXT: lwz 3, 0(3)
|
|
; CHECK-NEXT: cmpd 7, 3, 3
|
|
; CHECK-NEXT: bne- 7, .+4
|
|
; CHECK-NEXT: isync
|
|
; CHECK-NEXT: stw 3, -4(1)
|
|
; CHECK-NEXT: lfs 1, -4(1)
|
|
; CHECK-NEXT: blr
|
|
entry:
|
|
%0 = load atomic float, float* %fp acquire, align 4
|
|
ret float %0
|
|
}
|