
LBARX loads a byte from memory into a register, automatically setting the remaining bits of the register to zero. If a subsequent RLWINM instruction is used to clear those same bits (which LBARX has already set to zero), the RLWINM is redundant and can be eliminated. these redundant clear instructions are introduced by 85a9f2e14859b.
24 lines
793 B
LLVM
24 lines
793 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -mtriple=powerpc64le-linux-gnu < %s | FileCheck %s -check-prefix=PPC64LE
|
|
|
|
define void @test(ptr %ptr, i8 %cmp, i8 %val) {
|
|
; PPC64LE-LABEL: test:
|
|
; PPC64LE: # %bb.0:
|
|
; PPC64LE-NEXT: clrlwi 5, 5, 24
|
|
; PPC64LE-NEXT: clrlwi 4, 4, 24
|
|
; PPC64LE-NEXT: .p2align 5
|
|
; PPC64LE-NEXT: .LBB0_1: # %cmpxchg.start
|
|
; PPC64LE-NEXT: #
|
|
; PPC64LE-NEXT: lbarx 6, 0, 3
|
|
; PPC64LE-NEXT: cmplw 6, 4
|
|
; PPC64LE-NEXT: bnelr 0
|
|
; PPC64LE-NEXT: # %bb.2: # %cmpxchg.fencedstore
|
|
; PPC64LE-NEXT: #
|
|
; PPC64LE-NEXT: stbcx. 5, 0, 3
|
|
; PPC64LE-NEXT: bne 0, .LBB0_1
|
|
; PPC64LE-NEXT: # %bb.3: # %cmpxchg.end
|
|
; PPC64LE-NEXT: blr
|
|
%res = cmpxchg ptr %ptr, i8 %cmp, i8 %val monotonic monotonic
|
|
ret void
|
|
}
|