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
19 lines
709 B
LLVM
19 lines
709 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -S -atomic-expand -mtriple=powerpc64le-unknown-unknown \
|
|
; RUN: -opaque-pointers < %s 2>&1 | FileCheck %s
|
|
; RUN: opt -S -atomic-expand -mtriple=powerpc64-unknown-unknown \
|
|
; RUN: -opaque-pointers < %s 2>&1 | FileCheck %s
|
|
|
|
define float @bar(float* %fp) {
|
|
; CHECK-LABEL: @bar(
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[TMP0:%.*]] = load atomic i32, ptr [[FP:%.*]] monotonic, align 4
|
|
; CHECK-NEXT: call void @llvm.ppc.cfence.i32(i32 [[TMP0]])
|
|
; CHECK-NEXT: [[TMP1:%.*]] = bitcast i32 [[TMP0]] to float
|
|
; CHECK-NEXT: ret float [[TMP1]]
|
|
;
|
|
entry:
|
|
%0 = load atomic float, float* %fp acquire, align 4
|
|
ret float %0
|
|
}
|