forked from OSchip/llvm-project
[PowerPC] Generate tests for 16-byte atomic load/store. NFC.
This commit is contained in:
parent
e03c350eee
commit
7c5d5edec8
|
@ -2,6 +2,21 @@
|
|||
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-unknown \
|
||||
; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-track-subreg-liveness \
|
||||
; RUN: -ppc-quadword-atomics < %s | FileCheck --check-prefix=P8 %s
|
||||
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-unknown -mcpu=pwr7 \
|
||||
; RUN: -ppc-asm-full-reg-names -ppc-quadword-atomics \
|
||||
; RUN: -ppc-track-subreg-liveness < %s | FileCheck --check-prefix=PWR7 %s
|
||||
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 \
|
||||
; RUN: -ppc-asm-full-reg-names -ppc-track-subreg-liveness < %s | FileCheck \
|
||||
; RUN: --check-prefix=LE-PWR8 %s
|
||||
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-freebsd -mcpu=pwr8 \
|
||||
; RUN: -ppc-asm-full-reg-names -ppc-track-subreg-liveness < %s | FileCheck \
|
||||
; RUN: --check-prefix=LE-PWR8 %s
|
||||
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-aix -mcpu=pwr8 \
|
||||
; RUN: -ppc-asm-full-reg-names -ppc-track-subreg-liveness < %s | FileCheck \
|
||||
; RUN: --check-prefix=AIX64-PWR8 %s
|
||||
; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-unknown -mcpu=pwr8 \
|
||||
; RUN: -ppc-quadword-atomics -ppc-asm-full-reg-names -ppc-track-subreg-liveness < %s \
|
||||
; RUN: | FileCheck --check-prefix=PPC-PWR8 %s
|
||||
|
||||
define dso_local i128 @lq_unordered(i128* %src) {
|
||||
; P8-LABEL: lq_unordered:
|
||||
|
@ -10,6 +25,61 @@ define dso_local i128 @lq_unordered(i128* %src) {
|
|||
; P8-NEXT: mr r3, r4
|
||||
; P8-NEXT: mr r4, r5
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: lq_unordered:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: li r4, 0
|
||||
; PWR7-NEXT: bl __atomic_load_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: lq_unordered:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: lq r4, 0(r3)
|
||||
; LE-PWR8-NEXT: mr r3, r5
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: lq_unordered:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: li r4, 0
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: lq_unordered:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: mr r4, r3
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: li r6, 0
|
||||
; PPC-PWR8-NEXT: bl __atomic_load
|
||||
; PPC-PWR8-NEXT: lwz r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: lwz r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: lwz r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: lwz r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
%0 = load atomic i128, i128* %src unordered, align 16
|
||||
ret i128 %0
|
||||
|
@ -24,6 +94,70 @@ define dso_local i128 @lqx_unordered(i128* %src, i64 %idx) {
|
|||
; P8-NEXT: mr r3, r4
|
||||
; P8-NEXT: mr r4, r5
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: lqx_unordered:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: sldi r4, r4, 4
|
||||
; PWR7-NEXT: add r3, r3, r4
|
||||
; PWR7-NEXT: li r4, 0
|
||||
; PWR7-NEXT: bl __atomic_load_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: lqx_unordered:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: sldi r4, r4, 4
|
||||
; LE-PWR8-NEXT: std r2, -8(r1) # 8-byte Folded Spill
|
||||
; LE-PWR8-NEXT: add r4, r3, r4
|
||||
; LE-PWR8-NEXT: lq r2, 0(r4)
|
||||
; LE-PWR8-NEXT: mr r4, r2
|
||||
; LE-PWR8-NEXT: ld r2, -8(r1) # 8-byte Folded Reload
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: lqx_unordered:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: sldi r4, r4, 4
|
||||
; AIX64-PWR8-NEXT: add r3, r3, r4
|
||||
; AIX64-PWR8-NEXT: li r4, 0
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: lqx_unordered:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: slwi r4, r6, 4
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r6, 0
|
||||
; PPC-PWR8-NEXT: add r4, r3, r4
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: bl __atomic_load
|
||||
; PPC-PWR8-NEXT: lwz r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: lwz r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: lwz r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: lwz r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
%0 = getelementptr i128, i128* %src, i64 %idx
|
||||
%1 = load atomic i128, i128* %0 unordered, align 16
|
||||
|
@ -39,6 +173,67 @@ define dso_local i128 @lq_big_offset_unordered(i128* %src) {
|
|||
; P8-NEXT: mr r3, r4
|
||||
; P8-NEXT: mr r4, r5
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: lq_big_offset_unordered:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: addis r3, r3, 32
|
||||
; PWR7-NEXT: li r4, 0
|
||||
; PWR7-NEXT: bl __atomic_load_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: lq_big_offset_unordered:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: lis r4, 32
|
||||
; LE-PWR8-NEXT: std r2, -8(r1) # 8-byte Folded Spill
|
||||
; LE-PWR8-NEXT: add r4, r3, r4
|
||||
; LE-PWR8-NEXT: lq r2, 0(r4)
|
||||
; LE-PWR8-NEXT: mr r4, r2
|
||||
; LE-PWR8-NEXT: ld r2, -8(r1) # 8-byte Folded Reload
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: lq_big_offset_unordered:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: addis r3, r3, 32
|
||||
; AIX64-PWR8-NEXT: li r4, 0
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: lq_big_offset_unordered:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: addis r4, r3, 32
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: li r6, 0
|
||||
; PPC-PWR8-NEXT: bl __atomic_load
|
||||
; PPC-PWR8-NEXT: lwz r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: lwz r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: lwz r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: lwz r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
%0 = getelementptr i128, i128* %src, i64 131072
|
||||
%1 = load atomic i128, i128* %0 unordered, align 16
|
||||
|
@ -52,6 +247,61 @@ define dso_local i128 @lq_monotonic(i128* %src) {
|
|||
; P8-NEXT: mr r3, r4
|
||||
; P8-NEXT: mr r4, r5
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: lq_monotonic:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: li r4, 0
|
||||
; PWR7-NEXT: bl __atomic_load_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: lq_monotonic:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: lq r4, 0(r3)
|
||||
; LE-PWR8-NEXT: mr r3, r5
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: lq_monotonic:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: li r4, 0
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: lq_monotonic:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: mr r4, r3
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: li r6, 0
|
||||
; PPC-PWR8-NEXT: bl __atomic_load
|
||||
; PPC-PWR8-NEXT: lwz r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: lwz r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: lwz r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: lwz r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
%0 = load atomic i128, i128* %src monotonic, align 16
|
||||
ret i128 %0
|
||||
|
@ -67,6 +317,64 @@ define dso_local i128 @lq_acquire(i128* %src) {
|
|||
; P8-NEXT: bne- cr7, .+4
|
||||
; P8-NEXT: isync
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: lq_acquire:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: li r4, 2
|
||||
; PWR7-NEXT: bl __atomic_load_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: lq_acquire:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: lq r4, 0(r3)
|
||||
; LE-PWR8-NEXT: cmpd cr7, r5, r5
|
||||
; LE-PWR8-NEXT: mr r3, r5
|
||||
; LE-PWR8-NEXT: bne- cr7, .+4
|
||||
; LE-PWR8-NEXT: isync
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: lq_acquire:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: li r4, 2
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: lq_acquire:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: mr r4, r3
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: li r6, 2
|
||||
; PPC-PWR8-NEXT: bl __atomic_load
|
||||
; PPC-PWR8-NEXT: lwz r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: lwz r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: lwz r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: lwz r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
%0 = load atomic i128, i128* %src acquire, align 16
|
||||
ret i128 %0
|
||||
|
@ -83,6 +391,65 @@ define dso_local i128 @lq_seqcst(i128* %src) {
|
|||
; P8-NEXT: bne- cr7, .+4
|
||||
; P8-NEXT: isync
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: lq_seqcst:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: li r4, 5
|
||||
; PWR7-NEXT: bl __atomic_load_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: lq_seqcst:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: sync
|
||||
; LE-PWR8-NEXT: lq r4, 0(r3)
|
||||
; LE-PWR8-NEXT: cmpd cr7, r5, r5
|
||||
; LE-PWR8-NEXT: mr r3, r5
|
||||
; LE-PWR8-NEXT: bne- cr7, .+4
|
||||
; LE-PWR8-NEXT: isync
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: lq_seqcst:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: li r4, 5
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: lq_seqcst:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: mr r4, r3
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: li r6, 5
|
||||
; PPC-PWR8-NEXT: bl __atomic_load
|
||||
; PPC-PWR8-NEXT: lwz r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: lwz r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: lwz r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: lwz r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
%0 = load atomic i128, i128* %src seq_cst, align 16
|
||||
ret i128 %0
|
||||
|
@ -95,6 +462,70 @@ define dso_local void @stq_unordered(i128 %val, i128* %dst) {
|
|||
; P8-NEXT: mr r6, r3
|
||||
; P8-NEXT: stq r6, 0(r5)
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: stq_unordered:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: mr r6, r4
|
||||
; PWR7-NEXT: mr r4, r3
|
||||
; PWR7-NEXT: mr r3, r5
|
||||
; PWR7-NEXT: mr r5, r6
|
||||
; PWR7-NEXT: li r6, 0
|
||||
; PWR7-NEXT: bl __atomic_store_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: stq_unordered:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: mr r7, r3
|
||||
; LE-PWR8-NEXT: mr r6, r4
|
||||
; LE-PWR8-NEXT: stq r6, 0(r5)
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: stq_unordered:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: mr r6, r4
|
||||
; AIX64-PWR8-NEXT: mr r4, r3
|
||||
; AIX64-PWR8-NEXT: mr r3, r5
|
||||
; AIX64-PWR8-NEXT: mr r5, r6
|
||||
; AIX64-PWR8-NEXT: li r6, 0
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: stq_unordered:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: stw r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: stw r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r6, 0
|
||||
; PPC-PWR8-NEXT: stw r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: stw r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: mr r4, r7
|
||||
; PPC-PWR8-NEXT: bl __atomic_store
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
store atomic i128 %val, i128* %dst unordered, align 16
|
||||
ret void
|
||||
|
@ -109,6 +540,76 @@ define dso_local void @stqx_unordered(i128 %val, i128* %dst, i64 %idx) {
|
|||
; P8-NEXT: add r3, r5, r6
|
||||
; P8-NEXT: stq r8, 0(r3)
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: stqx_unordered:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: mr r7, r4
|
||||
; PWR7-NEXT: mr r4, r3
|
||||
; PWR7-NEXT: sldi r3, r6, 4
|
||||
; PWR7-NEXT: li r6, 0
|
||||
; PWR7-NEXT: add r3, r5, r3
|
||||
; PWR7-NEXT: mr r5, r7
|
||||
; PWR7-NEXT: bl __atomic_store_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: stqx_unordered:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: sldi r6, r6, 4
|
||||
; LE-PWR8-NEXT: mr r9, r3
|
||||
; LE-PWR8-NEXT: mr r8, r4
|
||||
; LE-PWR8-NEXT: add r3, r5, r6
|
||||
; LE-PWR8-NEXT: stq r8, 0(r3)
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: stqx_unordered:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: mr r7, r4
|
||||
; AIX64-PWR8-NEXT: mr r4, r3
|
||||
; AIX64-PWR8-NEXT: sldi r3, r6, 4
|
||||
; AIX64-PWR8-NEXT: li r6, 0
|
||||
; AIX64-PWR8-NEXT: add r3, r5, r3
|
||||
; AIX64-PWR8-NEXT: mr r5, r7
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: stqx_unordered:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: slwi r8, r10, 4
|
||||
; PPC-PWR8-NEXT: stw r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: stw r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: add r6, r7, r8
|
||||
; PPC-PWR8-NEXT: stw r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: stw r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: mr r4, r6
|
||||
; PPC-PWR8-NEXT: li r6, 0
|
||||
; PPC-PWR8-NEXT: bl __atomic_store
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
%0 = getelementptr i128, i128* %dst, i64 %idx
|
||||
store atomic i128 %val, i128* %0 unordered, align 16
|
||||
|
@ -124,6 +625,73 @@ define dso_local void @stq_big_offset_unordered(i128 %val, i128* %dst) {
|
|||
; P8-NEXT: add r3, r5, r6
|
||||
; P8-NEXT: stq r8, 0(r3)
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: stq_big_offset_unordered:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: mr r6, r4
|
||||
; PWR7-NEXT: mr r4, r3
|
||||
; PWR7-NEXT: addis r3, r5, 32
|
||||
; PWR7-NEXT: mr r5, r6
|
||||
; PWR7-NEXT: li r6, 0
|
||||
; PWR7-NEXT: bl __atomic_store_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: stq_big_offset_unordered:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: lis r6, 32
|
||||
; LE-PWR8-NEXT: mr r9, r3
|
||||
; LE-PWR8-NEXT: mr r8, r4
|
||||
; LE-PWR8-NEXT: add r3, r5, r6
|
||||
; LE-PWR8-NEXT: stq r8, 0(r3)
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: stq_big_offset_unordered:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: mr r6, r4
|
||||
; AIX64-PWR8-NEXT: mr r4, r3
|
||||
; AIX64-PWR8-NEXT: addis r3, r5, 32
|
||||
; AIX64-PWR8-NEXT: mr r5, r6
|
||||
; AIX64-PWR8-NEXT: li r6, 0
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: stq_big_offset_unordered:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: stw r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: addis r6, r7, 32
|
||||
; PPC-PWR8-NEXT: stw r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: stw r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: stw r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: mr r4, r6
|
||||
; PPC-PWR8-NEXT: li r6, 0
|
||||
; PPC-PWR8-NEXT: bl __atomic_store
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
%0 = getelementptr i128, i128* %dst, i64 131072
|
||||
store atomic i128 %val, i128* %0 unordered, align 16
|
||||
|
@ -137,6 +705,70 @@ define dso_local void @stq_monotonic(i128 %val, i128* %dst) {
|
|||
; P8-NEXT: mr r6, r3
|
||||
; P8-NEXT: stq r6, 0(r5)
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: stq_monotonic:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: mr r6, r4
|
||||
; PWR7-NEXT: mr r4, r3
|
||||
; PWR7-NEXT: mr r3, r5
|
||||
; PWR7-NEXT: mr r5, r6
|
||||
; PWR7-NEXT: li r6, 0
|
||||
; PWR7-NEXT: bl __atomic_store_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: stq_monotonic:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: mr r7, r3
|
||||
; LE-PWR8-NEXT: mr r6, r4
|
||||
; LE-PWR8-NEXT: stq r6, 0(r5)
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: stq_monotonic:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: mr r6, r4
|
||||
; AIX64-PWR8-NEXT: mr r4, r3
|
||||
; AIX64-PWR8-NEXT: mr r3, r5
|
||||
; AIX64-PWR8-NEXT: mr r5, r6
|
||||
; AIX64-PWR8-NEXT: li r6, 0
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: stq_monotonic:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: stw r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: stw r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r6, 0
|
||||
; PPC-PWR8-NEXT: stw r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: stw r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: mr r4, r7
|
||||
; PPC-PWR8-NEXT: bl __atomic_store
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
store atomic i128 %val, i128* %dst monotonic, align 16
|
||||
ret void
|
||||
|
@ -150,6 +782,71 @@ define dso_local void @stq_release(i128 %val, i128* %dst) {
|
|||
; P8-NEXT: mr r6, r3
|
||||
; P8-NEXT: stq r6, 0(r5)
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: stq_release:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: mr r6, r4
|
||||
; PWR7-NEXT: mr r4, r3
|
||||
; PWR7-NEXT: mr r3, r5
|
||||
; PWR7-NEXT: mr r5, r6
|
||||
; PWR7-NEXT: li r6, 3
|
||||
; PWR7-NEXT: bl __atomic_store_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: stq_release:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: lwsync
|
||||
; LE-PWR8-NEXT: mr r7, r3
|
||||
; LE-PWR8-NEXT: mr r6, r4
|
||||
; LE-PWR8-NEXT: stq r6, 0(r5)
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: stq_release:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: mr r6, r4
|
||||
; AIX64-PWR8-NEXT: mr r4, r3
|
||||
; AIX64-PWR8-NEXT: mr r3, r5
|
||||
; AIX64-PWR8-NEXT: mr r5, r6
|
||||
; AIX64-PWR8-NEXT: li r6, 3
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: stq_release:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: stw r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: stw r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r6, 3
|
||||
; PPC-PWR8-NEXT: stw r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: stw r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: mr r4, r7
|
||||
; PPC-PWR8-NEXT: bl __atomic_store
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
store atomic i128 %val, i128* %dst release, align 16
|
||||
ret void
|
||||
|
@ -163,6 +860,71 @@ define dso_local void @stq_seqcst(i128 %val, i128* %dst) {
|
|||
; P8-NEXT: mr r6, r3
|
||||
; P8-NEXT: stq r6, 0(r5)
|
||||
; P8-NEXT: blr
|
||||
;
|
||||
; PWR7-LABEL: stq_seqcst:
|
||||
; PWR7: # %bb.0: # %entry
|
||||
; PWR7-NEXT: mflr r0
|
||||
; PWR7-NEXT: std r0, 16(r1)
|
||||
; PWR7-NEXT: stdu r1, -112(r1)
|
||||
; PWR7-NEXT: .cfi_def_cfa_offset 112
|
||||
; PWR7-NEXT: .cfi_offset lr, 16
|
||||
; PWR7-NEXT: mr r6, r4
|
||||
; PWR7-NEXT: mr r4, r3
|
||||
; PWR7-NEXT: mr r3, r5
|
||||
; PWR7-NEXT: mr r5, r6
|
||||
; PWR7-NEXT: li r6, 5
|
||||
; PWR7-NEXT: bl __atomic_store_16
|
||||
; PWR7-NEXT: nop
|
||||
; PWR7-NEXT: addi r1, r1, 112
|
||||
; PWR7-NEXT: ld r0, 16(r1)
|
||||
; PWR7-NEXT: mtlr r0
|
||||
; PWR7-NEXT: blr
|
||||
;
|
||||
; LE-PWR8-LABEL: stq_seqcst:
|
||||
; LE-PWR8: # %bb.0: # %entry
|
||||
; LE-PWR8-NEXT: sync
|
||||
; LE-PWR8-NEXT: mr r7, r3
|
||||
; LE-PWR8-NEXT: mr r6, r4
|
||||
; LE-PWR8-NEXT: stq r6, 0(r5)
|
||||
; LE-PWR8-NEXT: blr
|
||||
;
|
||||
; AIX64-PWR8-LABEL: stq_seqcst:
|
||||
; AIX64-PWR8: # %bb.0: # %entry
|
||||
; AIX64-PWR8-NEXT: mflr r0
|
||||
; AIX64-PWR8-NEXT: std r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: stdu r1, -112(r1)
|
||||
; AIX64-PWR8-NEXT: mr r6, r4
|
||||
; AIX64-PWR8-NEXT: mr r4, r3
|
||||
; AIX64-PWR8-NEXT: mr r3, r5
|
||||
; AIX64-PWR8-NEXT: mr r5, r6
|
||||
; AIX64-PWR8-NEXT: li r6, 5
|
||||
; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR]
|
||||
; AIX64-PWR8-NEXT: nop
|
||||
; AIX64-PWR8-NEXT: addi r1, r1, 112
|
||||
; AIX64-PWR8-NEXT: ld r0, 16(r1)
|
||||
; AIX64-PWR8-NEXT: mtlr r0
|
||||
; AIX64-PWR8-NEXT: blr
|
||||
;
|
||||
; PPC-PWR8-LABEL: stq_seqcst:
|
||||
; PPC-PWR8: # %bb.0: # %entry
|
||||
; PPC-PWR8-NEXT: mflr r0
|
||||
; PPC-PWR8-NEXT: stw r0, 4(r1)
|
||||
; PPC-PWR8-NEXT: stwu r1, -32(r1)
|
||||
; PPC-PWR8-NEXT: .cfi_def_cfa_offset 32
|
||||
; PPC-PWR8-NEXT: .cfi_offset lr, 4
|
||||
; PPC-PWR8-NEXT: stw r6, 28(r1)
|
||||
; PPC-PWR8-NEXT: stw r5, 24(r1)
|
||||
; PPC-PWR8-NEXT: addi r5, r1, 16
|
||||
; PPC-PWR8-NEXT: li r6, 5
|
||||
; PPC-PWR8-NEXT: stw r4, 20(r1)
|
||||
; PPC-PWR8-NEXT: stw r3, 16(r1)
|
||||
; PPC-PWR8-NEXT: li r3, 16
|
||||
; PPC-PWR8-NEXT: mr r4, r7
|
||||
; PPC-PWR8-NEXT: bl __atomic_store
|
||||
; PPC-PWR8-NEXT: lwz r0, 36(r1)
|
||||
; PPC-PWR8-NEXT: addi r1, r1, 32
|
||||
; PPC-PWR8-NEXT: mtlr r0
|
||||
; PPC-PWR8-NEXT: blr
|
||||
entry:
|
||||
store atomic i128 %val, i128* %dst seq_cst, align 16
|
||||
ret void
|
||||
|
|
Loading…
Reference in New Issue