Utilize common API in PPCTargetParser (https://github.com/llvm/llvm-project/pull/97541) to set default CPU with same interfaces for LLC. This will update AIX default CPU to pwr7 and LoP powerppc64 default CPU to ppc64.
393 lines
12 KiB
LLVM
393 lines
12 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -mcpu=ppc -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s
|
|
|
|
define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {
|
|
; CHECK-LABEL: atomicrmw_uinc_wrap_i8:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: sync
|
|
; CHECK-NEXT: mr 5, 3
|
|
; CHECK-NEXT: rlwinm 6, 5, 3, 27, 28
|
|
; CHECK-NEXT: lbz 3, 0(3)
|
|
; CHECK-NEXT: xori 6, 6, 24
|
|
; CHECK-NEXT: li 7, 255
|
|
; CHECK-NEXT: clrlwi 4, 4, 24
|
|
; CHECK-NEXT: rldicr 5, 5, 0, 61
|
|
; CHECK-NEXT: slw 7, 7, 6
|
|
; CHECK-NEXT: b .LBB0_2
|
|
; CHECK-NEXT: .LBB0_1: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: srw 3, 10, 6
|
|
; CHECK-NEXT: cmplw 3, 8
|
|
; CHECK-NEXT: beq 0, .LBB0_7
|
|
; CHECK-NEXT: .LBB0_2: # %atomicrmw.start
|
|
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
|
; CHECK-NEXT: # Child Loop BB0_5 Depth 2
|
|
; CHECK-NEXT: clrlwi 8, 3, 24
|
|
; CHECK-NEXT: cmplw 8, 4
|
|
; CHECK-NEXT: li 9, 0
|
|
; CHECK-NEXT: bge 0, .LBB0_4
|
|
; CHECK-NEXT: # %bb.3: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: addi 9, 3, 1
|
|
; CHECK-NEXT: .LBB0_4: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: slw 3, 9, 6
|
|
; CHECK-NEXT: slw 9, 8, 6
|
|
; CHECK-NEXT: and 3, 3, 7
|
|
; CHECK-NEXT: and 9, 9, 7
|
|
; CHECK-NEXT: .LBB0_5: # %atomicrmw.start
|
|
; CHECK-NEXT: # Parent Loop BB0_2 Depth=1
|
|
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
|
; CHECK-NEXT: lwarx 11, 0, 5
|
|
; CHECK-NEXT: and 10, 11, 7
|
|
; CHECK-NEXT: cmpw 10, 9
|
|
; CHECK-NEXT: bne 0, .LBB0_1
|
|
; CHECK-NEXT: # %bb.6: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: andc 11, 11, 7
|
|
; CHECK-NEXT: or 11, 11, 3
|
|
; CHECK-NEXT: stwcx. 11, 0, 5
|
|
; CHECK-NEXT: bne 0, .LBB0_5
|
|
; CHECK-NEXT: b .LBB0_1
|
|
; CHECK-NEXT: .LBB0_7: # %atomicrmw.end
|
|
; CHECK-NEXT: lwsync
|
|
; CHECK-NEXT: blr
|
|
%result = atomicrmw uinc_wrap ptr %ptr, i8 %val seq_cst
|
|
ret i8 %result
|
|
}
|
|
|
|
define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {
|
|
; CHECK-LABEL: atomicrmw_uinc_wrap_i16:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: sync
|
|
; CHECK-NEXT: mr 5, 3
|
|
; CHECK-NEXT: li 7, 0
|
|
; CHECK-NEXT: lhz 3, 0(3)
|
|
; CHECK-NEXT: rlwinm 6, 5, 3, 27, 27
|
|
; CHECK-NEXT: xori 6, 6, 16
|
|
; CHECK-NEXT: ori 7, 7, 65535
|
|
; CHECK-NEXT: clrlwi 4, 4, 16
|
|
; CHECK-NEXT: rldicr 5, 5, 0, 61
|
|
; CHECK-NEXT: slw 7, 7, 6
|
|
; CHECK-NEXT: b .LBB1_2
|
|
; CHECK-NEXT: .LBB1_1: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: srw 3, 10, 6
|
|
; CHECK-NEXT: cmplw 3, 8
|
|
; CHECK-NEXT: beq 0, .LBB1_7
|
|
; CHECK-NEXT: .LBB1_2: # %atomicrmw.start
|
|
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
|
; CHECK-NEXT: # Child Loop BB1_5 Depth 2
|
|
; CHECK-NEXT: clrlwi 8, 3, 16
|
|
; CHECK-NEXT: cmplw 8, 4
|
|
; CHECK-NEXT: li 9, 0
|
|
; CHECK-NEXT: bge 0, .LBB1_4
|
|
; CHECK-NEXT: # %bb.3: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: addi 9, 3, 1
|
|
; CHECK-NEXT: .LBB1_4: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: slw 3, 9, 6
|
|
; CHECK-NEXT: slw 9, 8, 6
|
|
; CHECK-NEXT: and 3, 3, 7
|
|
; CHECK-NEXT: and 9, 9, 7
|
|
; CHECK-NEXT: .LBB1_5: # %atomicrmw.start
|
|
; CHECK-NEXT: # Parent Loop BB1_2 Depth=1
|
|
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
|
; CHECK-NEXT: lwarx 11, 0, 5
|
|
; CHECK-NEXT: and 10, 11, 7
|
|
; CHECK-NEXT: cmpw 10, 9
|
|
; CHECK-NEXT: bne 0, .LBB1_1
|
|
; CHECK-NEXT: # %bb.6: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: andc 11, 11, 7
|
|
; CHECK-NEXT: or 11, 11, 3
|
|
; CHECK-NEXT: stwcx. 11, 0, 5
|
|
; CHECK-NEXT: bne 0, .LBB1_5
|
|
; CHECK-NEXT: b .LBB1_1
|
|
; CHECK-NEXT: .LBB1_7: # %atomicrmw.end
|
|
; CHECK-NEXT: lwsync
|
|
; CHECK-NEXT: blr
|
|
%result = atomicrmw uinc_wrap ptr %ptr, i16 %val seq_cst
|
|
ret i16 %result
|
|
}
|
|
|
|
define i32 @atomicrmw_uinc_wrap_i32(ptr %ptr, i32 %val) {
|
|
; CHECK-LABEL: atomicrmw_uinc_wrap_i32:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: sync
|
|
; CHECK-NEXT: lwz 6, 0(3)
|
|
; CHECK-NEXT: b .LBB2_2
|
|
; CHECK-NEXT: .LBB2_1: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: cmplw 5, 6
|
|
; CHECK-NEXT: mr 6, 5
|
|
; CHECK-NEXT: beq 0, .LBB2_6
|
|
; CHECK-NEXT: .LBB2_2: # %atomicrmw.start
|
|
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
|
; CHECK-NEXT: # Child Loop BB2_4 Depth 2
|
|
; CHECK-NEXT: cmplw 6, 4
|
|
; CHECK-NEXT: li 7, 0
|
|
; CHECK-NEXT: bge 0, .LBB2_4
|
|
; CHECK-NEXT: # %bb.3: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: addi 7, 6, 1
|
|
; CHECK-NEXT: .LBB2_4: # %atomicrmw.start
|
|
; CHECK-NEXT: # Parent Loop BB2_2 Depth=1
|
|
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
|
; CHECK-NEXT: lwarx 5, 0, 3
|
|
; CHECK-NEXT: cmpw 5, 6
|
|
; CHECK-NEXT: bne 0, .LBB2_1
|
|
; CHECK-NEXT: # %bb.5: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: stwcx. 7, 0, 3
|
|
; CHECK-NEXT: bne 0, .LBB2_4
|
|
; CHECK-NEXT: b .LBB2_1
|
|
; CHECK-NEXT: .LBB2_6: # %atomicrmw.end
|
|
; CHECK-NEXT: mr 3, 5
|
|
; CHECK-NEXT: lwsync
|
|
; CHECK-NEXT: blr
|
|
%result = atomicrmw uinc_wrap ptr %ptr, i32 %val seq_cst
|
|
ret i32 %result
|
|
}
|
|
|
|
define i64 @atomicrmw_uinc_wrap_i64(ptr %ptr, i64 %val) {
|
|
; CHECK-LABEL: atomicrmw_uinc_wrap_i64:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: sync
|
|
; CHECK-NEXT: ld 6, 0(3)
|
|
; CHECK-NEXT: b .LBB3_2
|
|
; CHECK-NEXT: .LBB3_1: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: cmpld 5, 6
|
|
; CHECK-NEXT: mr 6, 5
|
|
; CHECK-NEXT: beq 0, .LBB3_6
|
|
; CHECK-NEXT: .LBB3_2: # %atomicrmw.start
|
|
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
|
; CHECK-NEXT: # Child Loop BB3_4 Depth 2
|
|
; CHECK-NEXT: cmpld 6, 4
|
|
; CHECK-NEXT: li 7, 0
|
|
; CHECK-NEXT: bge 0, .LBB3_4
|
|
; CHECK-NEXT: # %bb.3: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: addi 7, 6, 1
|
|
; CHECK-NEXT: .LBB3_4: # %atomicrmw.start
|
|
; CHECK-NEXT: # Parent Loop BB3_2 Depth=1
|
|
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
|
; CHECK-NEXT: ldarx 5, 0, 3
|
|
; CHECK-NEXT: cmpd 5, 6
|
|
; CHECK-NEXT: bne 0, .LBB3_1
|
|
; CHECK-NEXT: # %bb.5: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: stdcx. 7, 0, 3
|
|
; CHECK-NEXT: bne 0, .LBB3_4
|
|
; CHECK-NEXT: b .LBB3_1
|
|
; CHECK-NEXT: .LBB3_6: # %atomicrmw.end
|
|
; CHECK-NEXT: mr 3, 5
|
|
; CHECK-NEXT: lwsync
|
|
; CHECK-NEXT: blr
|
|
%result = atomicrmw uinc_wrap ptr %ptr, i64 %val seq_cst
|
|
ret i64 %result
|
|
}
|
|
|
|
define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {
|
|
; CHECK-LABEL: atomicrmw_udec_wrap_i8:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: sync
|
|
; CHECK-NEXT: mr 5, 3
|
|
; CHECK-NEXT: rlwinm 7, 5, 3, 27, 28
|
|
; CHECK-NEXT: lbz 3, 0(3)
|
|
; CHECK-NEXT: xori 7, 7, 24
|
|
; CHECK-NEXT: li 8, 255
|
|
; CHECK-NEXT: clrlwi 6, 4, 24
|
|
; CHECK-NEXT: rldicr 5, 5, 0, 61
|
|
; CHECK-NEXT: slw 8, 8, 7
|
|
; CHECK-NEXT: b .LBB4_2
|
|
; CHECK-NEXT: .LBB4_1: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: srw 3, 11, 7
|
|
; CHECK-NEXT: cmplw 3, 9
|
|
; CHECK-NEXT: beq 0, .LBB4_7
|
|
; CHECK-NEXT: .LBB4_2: # %atomicrmw.start
|
|
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
|
; CHECK-NEXT: # Child Loop BB4_5 Depth 2
|
|
; CHECK-NEXT: andi. 9, 3, 255
|
|
; CHECK-NEXT: cmplw 1, 9, 6
|
|
; CHECK-NEXT: cror 20, 2, 5
|
|
; CHECK-NEXT: mr 10, 4
|
|
; CHECK-NEXT: bc 12, 20, .LBB4_4
|
|
; CHECK-NEXT: # %bb.3: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: addi 10, 3, -1
|
|
; CHECK-NEXT: .LBB4_4: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: slw 3, 10, 7
|
|
; CHECK-NEXT: slw 10, 9, 7
|
|
; CHECK-NEXT: and 3, 3, 8
|
|
; CHECK-NEXT: and 10, 10, 8
|
|
; CHECK-NEXT: .LBB4_5: # %atomicrmw.start
|
|
; CHECK-NEXT: # Parent Loop BB4_2 Depth=1
|
|
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
|
; CHECK-NEXT: lwarx 12, 0, 5
|
|
; CHECK-NEXT: and 11, 12, 8
|
|
; CHECK-NEXT: cmpw 11, 10
|
|
; CHECK-NEXT: bne 0, .LBB4_1
|
|
; CHECK-NEXT: # %bb.6: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: andc 12, 12, 8
|
|
; CHECK-NEXT: or 12, 12, 3
|
|
; CHECK-NEXT: stwcx. 12, 0, 5
|
|
; CHECK-NEXT: bne 0, .LBB4_5
|
|
; CHECK-NEXT: b .LBB4_1
|
|
; CHECK-NEXT: .LBB4_7: # %atomicrmw.end
|
|
; CHECK-NEXT: lwsync
|
|
; CHECK-NEXT: blr
|
|
%result = atomicrmw udec_wrap ptr %ptr, i8 %val seq_cst
|
|
ret i8 %result
|
|
}
|
|
|
|
define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {
|
|
; CHECK-LABEL: atomicrmw_udec_wrap_i16:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: sync
|
|
; CHECK-NEXT: mr 5, 3
|
|
; CHECK-NEXT: li 8, 0
|
|
; CHECK-NEXT: lhz 3, 0(3)
|
|
; CHECK-NEXT: rlwinm 7, 5, 3, 27, 27
|
|
; CHECK-NEXT: xori 7, 7, 16
|
|
; CHECK-NEXT: ori 8, 8, 65535
|
|
; CHECK-NEXT: clrlwi 6, 4, 16
|
|
; CHECK-NEXT: rldicr 5, 5, 0, 61
|
|
; CHECK-NEXT: slw 8, 8, 7
|
|
; CHECK-NEXT: b .LBB5_2
|
|
; CHECK-NEXT: .LBB5_1: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: srw 3, 11, 7
|
|
; CHECK-NEXT: cmplw 3, 9
|
|
; CHECK-NEXT: beq 0, .LBB5_7
|
|
; CHECK-NEXT: .LBB5_2: # %atomicrmw.start
|
|
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
|
; CHECK-NEXT: # Child Loop BB5_5 Depth 2
|
|
; CHECK-NEXT: andi. 9, 3, 65535
|
|
; CHECK-NEXT: cmplw 1, 9, 6
|
|
; CHECK-NEXT: cror 20, 2, 5
|
|
; CHECK-NEXT: mr 10, 4
|
|
; CHECK-NEXT: bc 12, 20, .LBB5_4
|
|
; CHECK-NEXT: # %bb.3: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: addi 10, 3, -1
|
|
; CHECK-NEXT: .LBB5_4: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: slw 3, 10, 7
|
|
; CHECK-NEXT: slw 10, 9, 7
|
|
; CHECK-NEXT: and 3, 3, 8
|
|
; CHECK-NEXT: and 10, 10, 8
|
|
; CHECK-NEXT: .LBB5_5: # %atomicrmw.start
|
|
; CHECK-NEXT: # Parent Loop BB5_2 Depth=1
|
|
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
|
; CHECK-NEXT: lwarx 12, 0, 5
|
|
; CHECK-NEXT: and 11, 12, 8
|
|
; CHECK-NEXT: cmpw 11, 10
|
|
; CHECK-NEXT: bne 0, .LBB5_1
|
|
; CHECK-NEXT: # %bb.6: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: andc 12, 12, 8
|
|
; CHECK-NEXT: or 12, 12, 3
|
|
; CHECK-NEXT: stwcx. 12, 0, 5
|
|
; CHECK-NEXT: bne 0, .LBB5_5
|
|
; CHECK-NEXT: b .LBB5_1
|
|
; CHECK-NEXT: .LBB5_7: # %atomicrmw.end
|
|
; CHECK-NEXT: lwsync
|
|
; CHECK-NEXT: blr
|
|
%result = atomicrmw udec_wrap ptr %ptr, i16 %val seq_cst
|
|
ret i16 %result
|
|
}
|
|
|
|
define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {
|
|
; CHECK-LABEL: atomicrmw_udec_wrap_i32:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: sync
|
|
; CHECK-NEXT: lwz 6, 0(3)
|
|
; CHECK-NEXT: b .LBB6_2
|
|
; CHECK-NEXT: .LBB6_1: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: cmplw 5, 6
|
|
; CHECK-NEXT: mr 6, 5
|
|
; CHECK-NEXT: beq 0, .LBB6_7
|
|
; CHECK-NEXT: .LBB6_2: # %atomicrmw.start
|
|
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
|
; CHECK-NEXT: # Child Loop BB6_5 Depth 2
|
|
; CHECK-NEXT: cmpwi 6, 0
|
|
; CHECK-NEXT: mr 7, 4
|
|
; CHECK-NEXT: bc 12, 2, .LBB6_5
|
|
; CHECK-NEXT: # %bb.3: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: cmplw 6, 4
|
|
; CHECK-NEXT: mr 7, 4
|
|
; CHECK-NEXT: bc 12, 1, .LBB6_5
|
|
; CHECK-NEXT: # %bb.4: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: addi 7, 6, -1
|
|
; CHECK-NEXT: .LBB6_5: # %atomicrmw.start
|
|
; CHECK-NEXT: # Parent Loop BB6_2 Depth=1
|
|
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
|
; CHECK-NEXT: lwarx 5, 0, 3
|
|
; CHECK-NEXT: cmpw 5, 6
|
|
; CHECK-NEXT: bne 0, .LBB6_1
|
|
; CHECK-NEXT: # %bb.6: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: stwcx. 7, 0, 3
|
|
; CHECK-NEXT: bne 0, .LBB6_5
|
|
; CHECK-NEXT: b .LBB6_1
|
|
; CHECK-NEXT: .LBB6_7: # %atomicrmw.end
|
|
; CHECK-NEXT: mr 3, 5
|
|
; CHECK-NEXT: lwsync
|
|
; CHECK-NEXT: blr
|
|
%result = atomicrmw udec_wrap ptr %ptr, i32 %val seq_cst
|
|
ret i32 %result
|
|
}
|
|
|
|
define i64 @atomicrmw_udec_wrap_i64(ptr %ptr, i64 %val) {
|
|
; CHECK-LABEL: atomicrmw_udec_wrap_i64:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: sync
|
|
; CHECK-NEXT: ld 6, 0(3)
|
|
; CHECK-NEXT: b .LBB7_2
|
|
; CHECK-NEXT: .LBB7_1: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: cmpld 5, 6
|
|
; CHECK-NEXT: mr 6, 5
|
|
; CHECK-NEXT: beq 0, .LBB7_7
|
|
; CHECK-NEXT: .LBB7_2: # %atomicrmw.start
|
|
; CHECK-NEXT: # =>This Loop Header: Depth=1
|
|
; CHECK-NEXT: # Child Loop BB7_5 Depth 2
|
|
; CHECK-NEXT: cmpdi 6, 0
|
|
; CHECK-NEXT: mr 7, 4
|
|
; CHECK-NEXT: bc 12, 2, .LBB7_5
|
|
; CHECK-NEXT: # %bb.3: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: cmpld 6, 4
|
|
; CHECK-NEXT: mr 7, 4
|
|
; CHECK-NEXT: bc 12, 1, .LBB7_5
|
|
; CHECK-NEXT: # %bb.4: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: addi 7, 6, -1
|
|
; CHECK-NEXT: .LBB7_5: # %atomicrmw.start
|
|
; CHECK-NEXT: # Parent Loop BB7_2 Depth=1
|
|
; CHECK-NEXT: # => This Inner Loop Header: Depth=2
|
|
; CHECK-NEXT: ldarx 5, 0, 3
|
|
; CHECK-NEXT: cmpd 5, 6
|
|
; CHECK-NEXT: bne 0, .LBB7_1
|
|
; CHECK-NEXT: # %bb.6: # %atomicrmw.start
|
|
; CHECK-NEXT: #
|
|
; CHECK-NEXT: stdcx. 7, 0, 3
|
|
; CHECK-NEXT: bne 0, .LBB7_5
|
|
; CHECK-NEXT: b .LBB7_1
|
|
; CHECK-NEXT: .LBB7_7: # %atomicrmw.end
|
|
; CHECK-NEXT: mr 3, 5
|
|
; CHECK-NEXT: lwsync
|
|
; CHECK-NEXT: blr
|
|
%result = atomicrmw udec_wrap ptr %ptr, i64 %val seq_cst
|
|
ret i64 %result
|
|
}
|