Per the guidance in https://llvm.org/docs/Atomics.html#atomics-and-ir-optimization, an atomic load from a constant global can be dropped, as there can be no stores to synchronize with. Any write to the constant global would be UB. IPSCCP will already drop such loads, but the main helper in Local doesn't recognize this currently. This is motivated by D118387. Differential Revision: https://reviews.llvm.org/D124241
21 lines
529 B
LLVM
21 lines
529 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc < %s | FileCheck %s
|
|
|
|
target triple = "powerpc64le-unknown-linux-gnu"
|
|
|
|
@a = dso_local global i64 zeroinitializer
|
|
|
|
define i64 @foo() {
|
|
; CHECK-LABEL: foo:
|
|
; CHECK: # %bb.0: # %entry
|
|
; CHECK-NEXT: addis 3, 2, a@toc@ha
|
|
; CHECK-NEXT: ld 3, a@toc@l(3)
|
|
; CHECK-NEXT: cmpd 7, 3, 3
|
|
; CHECK-NEXT: bne- 7, .+4
|
|
; CHECK-NEXT: isync
|
|
; CHECK-NEXT: blr
|
|
entry:
|
|
%value = load atomic i64, i64* @a acquire, align 8
|
|
ret i64 %value
|
|
}
|