Chen Zheng eb7d16ea25 [PowerPC] make expensive mflr be away from its user in the function prologue
mflr is kind of expensive on Power version smaller than 10, so we should
schedule the store for the mflr's def away from mflr.

In epilogue, the expensive mtlr has no user for its def, so it doesn't
matter that the load and the mtlr are back-to-back.

Reviewed By: RolandF

Differential Revision: https://reviews.llvm.org/D137423
2022-11-14 21:14:20 -05:00

2587 lines
98 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefix=CHECK-P10-LE
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefix=CHECK-P10-BE
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P8,CHECK-P8-LE
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P8,CHECK-P8-BE
@GlobLd1 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
@GlobSt1 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
@GlobLd2 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
@GlobSt2 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
@GlobLd3 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
@GlobSt3 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
@GlobLd4 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
@GlobSt4 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
@GlobLd5 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
@GlobSt5 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
@GlobLd6 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
@GlobSt6 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
@GlobLd7 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
@GlobSt7 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
@GlobLd8 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
@GlobSt8 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
@GlobLd9 = dso_local local_unnamed_addr global [20 x float] zeroinitializer, align 4
@GlobSt9 = dso_local local_unnamed_addr global [20 x float] zeroinitializer, align 4
@GlobLd10 = dso_local local_unnamed_addr global [20 x double] zeroinitializer, align 8
@GlobSt10 = dso_local local_unnamed_addr global [20 x double] zeroinitializer, align 8
@GlobLd11 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
@GlobSt11 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
@GlobLd12 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
@GlobSt12 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
@GlobF128 = dso_local local_unnamed_addr global [20 x fp128] zeroinitializer, align 16
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob1PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob1PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd1@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt1@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob1PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-P10-BE-NEXT: lbz r3, GlobLd1@toc@l(r3)
; CHECK-P10-BE-NEXT: stb r3, GlobSt1@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob1PtrPlus0:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-NEXT: lbz r3, GlobLd1@toc@l(r3)
; CHECK-NEXT: stb r3, GlobSt1@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load i8, ptr @GlobLd1, align 1
store i8 %0, ptr @GlobSt1, align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob1PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob1PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd1@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt1@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob1PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd1@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt1@toc@l
; CHECK-P10-BE-NEXT: lbz r3, 3(r3)
; CHECK-P10-BE-NEXT: stb r3, 3(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob1PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd1@toc@l
; CHECK-NEXT: addi r4, r4, GlobSt1@toc@l
; CHECK-NEXT: lbz r3, 3(r3)
; CHECK-NEXT: stb r3, 3(r4)
; CHECK-NEXT: blr
entry:
%0 = load i8, ptr getelementptr inbounds ([20 x i8], ptr @GlobLd1, i64 0, i64 3), align 1
store i8 %0, ptr getelementptr inbounds ([20 x i8], ptr @GlobSt1, i64 0, i64 3), align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob1PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob1PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd1@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt1@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob1PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd1@toc@ha+4
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt1@toc@ha+4
; CHECK-P10-BE-NEXT: lbz r3, GlobLd1@toc@l+4(r3)
; CHECK-P10-BE-NEXT: stb r3, GlobSt1@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob1PtrPlus4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd1@toc@ha+4
; CHECK-NEXT: addis r4, r2, GlobSt1@toc@ha+4
; CHECK-NEXT: lbz r3, GlobLd1@toc@l+4(r3)
; CHECK-NEXT: stb r3, GlobSt1@toc@l+4(r4)
; CHECK-NEXT: blr
entry:
%0 = load i8, ptr getelementptr inbounds ([20 x i8], ptr @GlobLd1, i64 0, i64 4), align 1
store i8 %0, ptr getelementptr inbounds ([20 x i8], ptr @GlobSt1, i64 0, i64 4), align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob1PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob1PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd1@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt1@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob1PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd1@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt1@toc@ha+16
; CHECK-P10-BE-NEXT: lbz r3, GlobLd1@toc@l+16(r3)
; CHECK-P10-BE-NEXT: stb r3, GlobSt1@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob1PtrPlus16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd1@toc@ha+16
; CHECK-NEXT: addis r4, r2, GlobSt1@toc@ha+16
; CHECK-NEXT: lbz r3, GlobLd1@toc@l+16(r3)
; CHECK-NEXT: stb r3, GlobSt1@toc@l+16(r4)
; CHECK-NEXT: blr
entry:
%0 = load i8, ptr getelementptr inbounds ([20 x i8], ptr @GlobLd1, i64 0, i64 16), align 1
store i8 %0, ptr getelementptr inbounds ([20 x i8], ptr @GlobSt1, i64 0, i64 16), align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob1PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob1PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd1@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt1@PCREL, 1
; CHECK-P10-LE-NEXT: lbzx r4, r4, r3
; CHECK-P10-LE-NEXT: stbx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob1PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd1@toc@ha
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt1@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd1@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt1@toc@l
; CHECK-P10-BE-NEXT: lbzx r4, r4, r3
; CHECK-P10-BE-NEXT: stbx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob1PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd1@toc@ha
; CHECK-NEXT: addis r5, r2, GlobSt1@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd1@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt1@toc@l
; CHECK-NEXT: lbzx r4, r4, r3
; CHECK-NEXT: stbx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x i8], ptr @GlobLd1, i64 0, i64 %Idx
%0 = load i8, ptr %arrayidx, align 1
%arrayidx1 = getelementptr inbounds [20 x i8], ptr @GlobSt1, i64 0, i64 %Idx
store i8 %0, ptr %arrayidx1, align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob2PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob2PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd2@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt2@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob2PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd2@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt2@toc@ha
; CHECK-P10-BE-NEXT: lbz r3, GlobLd2@toc@l(r3)
; CHECK-P10-BE-NEXT: stb r3, GlobSt2@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob2PtrPlus0:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd2@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt2@toc@ha
; CHECK-NEXT: lbz r3, GlobLd2@toc@l(r3)
; CHECK-NEXT: stb r3, GlobSt2@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load i8, ptr @GlobLd2, align 1
store i8 %0, ptr @GlobSt2, align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob2PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob2PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd2@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt2@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob2PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd2@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt2@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd2@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt2@toc@l
; CHECK-P10-BE-NEXT: lbz r3, 3(r3)
; CHECK-P10-BE-NEXT: stb r3, 3(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob2PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd2@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt2@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd2@toc@l
; CHECK-NEXT: addi r4, r4, GlobSt2@toc@l
; CHECK-NEXT: lbz r3, 3(r3)
; CHECK-NEXT: stb r3, 3(r4)
; CHECK-NEXT: blr
entry:
%0 = load i8, ptr getelementptr inbounds ([20 x i8], ptr @GlobLd2, i64 0, i64 3), align 1
store i8 %0, ptr getelementptr inbounds ([20 x i8], ptr @GlobSt2, i64 0, i64 3), align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob2PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob2PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd2@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt2@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob2PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd2@toc@ha+4
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt2@toc@ha+4
; CHECK-P10-BE-NEXT: lbz r3, GlobLd2@toc@l+4(r3)
; CHECK-P10-BE-NEXT: stb r3, GlobSt2@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob2PtrPlus4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd2@toc@ha+4
; CHECK-NEXT: addis r4, r2, GlobSt2@toc@ha+4
; CHECK-NEXT: lbz r3, GlobLd2@toc@l+4(r3)
; CHECK-NEXT: stb r3, GlobSt2@toc@l+4(r4)
; CHECK-NEXT: blr
entry:
%0 = load i8, ptr getelementptr inbounds ([20 x i8], ptr @GlobLd2, i64 0, i64 4), align 1
store i8 %0, ptr getelementptr inbounds ([20 x i8], ptr @GlobSt2, i64 0, i64 4), align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob2PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob2PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd2@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt2@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob2PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd2@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt2@toc@ha+16
; CHECK-P10-BE-NEXT: lbz r3, GlobLd2@toc@l+16(r3)
; CHECK-P10-BE-NEXT: stb r3, GlobSt2@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob2PtrPlus16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd2@toc@ha+16
; CHECK-NEXT: addis r4, r2, GlobSt2@toc@ha+16
; CHECK-NEXT: lbz r3, GlobLd2@toc@l+16(r3)
; CHECK-NEXT: stb r3, GlobSt2@toc@l+16(r4)
; CHECK-NEXT: blr
entry:
%0 = load i8, ptr getelementptr inbounds ([20 x i8], ptr @GlobLd2, i64 0, i64 16), align 1
store i8 %0, ptr getelementptr inbounds ([20 x i8], ptr @GlobSt2, i64 0, i64 16), align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob2PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob2PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd2@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt2@PCREL, 1
; CHECK-P10-LE-NEXT: lbzx r4, r4, r3
; CHECK-P10-LE-NEXT: stbx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob2PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd2@toc@ha
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt2@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd2@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt2@toc@l
; CHECK-P10-BE-NEXT: lbzx r4, r4, r3
; CHECK-P10-BE-NEXT: stbx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob2PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd2@toc@ha
; CHECK-NEXT: addis r5, r2, GlobSt2@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd2@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt2@toc@l
; CHECK-NEXT: lbzx r4, r4, r3
; CHECK-NEXT: stbx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x i8], ptr @GlobLd2, i64 0, i64 %Idx
%0 = load i8, ptr %arrayidx, align 1
%arrayidx1 = getelementptr inbounds [20 x i8], ptr @GlobSt2, i64 0, i64 %Idx
store i8 %0, ptr %arrayidx1, align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob3PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob3PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd3@PCREL(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt3@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob3PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd3@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt3@toc@ha
; CHECK-P10-BE-NEXT: lhz r3, GlobLd3@toc@l(r3)
; CHECK-P10-BE-NEXT: sth r3, GlobSt3@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob3PtrPlus0:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd3@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt3@toc@ha
; CHECK-NEXT: lhz r3, GlobLd3@toc@l(r3)
; CHECK-NEXT: sth r3, GlobSt3@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load i16, ptr @GlobLd3, align 2
store i16 %0, ptr @GlobSt3, align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob3PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob3PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd3@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt3@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob3PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd3@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt3@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd3@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt3@toc@l
; CHECK-P10-BE-NEXT: lhz r3, 3(r3)
; CHECK-P10-BE-NEXT: sth r3, 3(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob3PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd3@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt3@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd3@toc@l
; CHECK-NEXT: addi r4, r4, GlobSt3@toc@l
; CHECK-NEXT: lhz r3, 3(r3)
; CHECK-NEXT: sth r3, 3(r4)
; CHECK-NEXT: blr
entry:
%0 = load i16, ptr getelementptr inbounds (i8, ptr @GlobLd3, i64 3), align 2
store i16 %0, ptr getelementptr inbounds (i8, ptr @GlobSt3, i64 3), align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob3PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob3PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd3@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt3@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob3PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd3@toc@ha+4
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt3@toc@ha+4
; CHECK-P10-BE-NEXT: lhz r3, GlobLd3@toc@l+4(r3)
; CHECK-P10-BE-NEXT: sth r3, GlobSt3@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob3PtrPlus4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd3@toc@ha+4
; CHECK-NEXT: addis r4, r2, GlobSt3@toc@ha+4
; CHECK-NEXT: lhz r3, GlobLd3@toc@l+4(r3)
; CHECK-NEXT: sth r3, GlobSt3@toc@l+4(r4)
; CHECK-NEXT: blr
entry:
%0 = load i16, ptr getelementptr inbounds ([20 x i16], ptr @GlobLd3, i64 0, i64 2), align 2
store i16 %0, ptr getelementptr inbounds ([20 x i16], ptr @GlobSt3, i64 0, i64 2), align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob3PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob3PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd3@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt3@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob3PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd3@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt3@toc@ha+16
; CHECK-P10-BE-NEXT: lhz r3, GlobLd3@toc@l+16(r3)
; CHECK-P10-BE-NEXT: sth r3, GlobSt3@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob3PtrPlus16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd3@toc@ha+16
; CHECK-NEXT: addis r4, r2, GlobSt3@toc@ha+16
; CHECK-NEXT: lhz r3, GlobLd3@toc@l+16(r3)
; CHECK-NEXT: sth r3, GlobSt3@toc@l+16(r4)
; CHECK-NEXT: blr
entry:
%0 = load i16, ptr getelementptr inbounds ([20 x i16], ptr @GlobLd3, i64 0, i64 8), align 2
store i16 %0, ptr getelementptr inbounds ([20 x i16], ptr @GlobSt3, i64 0, i64 8), align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob3PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob3PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 1
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd3@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt3@PCREL, 1
; CHECK-P10-LE-NEXT: lhzx r4, r4, r3
; CHECK-P10-LE-NEXT: sthx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob3PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd3@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 1
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt3@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd3@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt3@toc@l
; CHECK-P10-BE-NEXT: lhzx r4, r4, r3
; CHECK-P10-BE-NEXT: sthx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob3PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd3@toc@ha
; CHECK-NEXT: sldi r3, r3, 1
; CHECK-NEXT: addis r5, r2, GlobSt3@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd3@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt3@toc@l
; CHECK-NEXT: lhzx r4, r4, r3
; CHECK-NEXT: sthx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x i16], ptr @GlobLd3, i64 0, i64 %Idx
%0 = load i16, ptr %arrayidx, align 2
%arrayidx1 = getelementptr inbounds [20 x i16], ptr @GlobSt3, i64 0, i64 %Idx
store i16 %0, ptr %arrayidx1, align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob4PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob4PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd4@PCREL(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt4@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob4PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd4@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt4@toc@ha
; CHECK-P10-BE-NEXT: lhz r3, GlobLd4@toc@l(r3)
; CHECK-P10-BE-NEXT: sth r3, GlobSt4@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob4PtrPlus0:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd4@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt4@toc@ha
; CHECK-NEXT: lhz r3, GlobLd4@toc@l(r3)
; CHECK-NEXT: sth r3, GlobSt4@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load i16, ptr @GlobLd4, align 2
store i16 %0, ptr @GlobSt4, align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob4PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob4PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd4@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt4@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob4PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd4@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt4@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd4@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt4@toc@l
; CHECK-P10-BE-NEXT: lhz r3, 3(r3)
; CHECK-P10-BE-NEXT: sth r3, 3(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob4PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd4@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt4@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd4@toc@l
; CHECK-NEXT: addi r4, r4, GlobSt4@toc@l
; CHECK-NEXT: lhz r3, 3(r3)
; CHECK-NEXT: sth r3, 3(r4)
; CHECK-NEXT: blr
entry:
%0 = load i16, ptr getelementptr inbounds (i8, ptr @GlobLd4, i64 3), align 2
store i16 %0, ptr getelementptr inbounds (i8, ptr @GlobSt4, i64 3), align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob4PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob4PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd4@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt4@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob4PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd4@toc@ha+4
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt4@toc@ha+4
; CHECK-P10-BE-NEXT: lhz r3, GlobLd4@toc@l+4(r3)
; CHECK-P10-BE-NEXT: sth r3, GlobSt4@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob4PtrPlus4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd4@toc@ha+4
; CHECK-NEXT: addis r4, r2, GlobSt4@toc@ha+4
; CHECK-NEXT: lhz r3, GlobLd4@toc@l+4(r3)
; CHECK-NEXT: sth r3, GlobSt4@toc@l+4(r4)
; CHECK-NEXT: blr
entry:
%0 = load i16, ptr getelementptr inbounds ([20 x i16], ptr @GlobLd4, i64 0, i64 2), align 2
store i16 %0, ptr getelementptr inbounds ([20 x i16], ptr @GlobSt4, i64 0, i64 2), align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob4PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob4PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd4@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt4@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob4PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd4@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt4@toc@ha+16
; CHECK-P10-BE-NEXT: lhz r3, GlobLd4@toc@l+16(r3)
; CHECK-P10-BE-NEXT: sth r3, GlobSt4@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob4PtrPlus16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd4@toc@ha+16
; CHECK-NEXT: addis r4, r2, GlobSt4@toc@ha+16
; CHECK-NEXT: lhz r3, GlobLd4@toc@l+16(r3)
; CHECK-NEXT: sth r3, GlobSt4@toc@l+16(r4)
; CHECK-NEXT: blr
entry:
%0 = load i16, ptr getelementptr inbounds ([20 x i16], ptr @GlobLd4, i64 0, i64 8), align 2
store i16 %0, ptr getelementptr inbounds ([20 x i16], ptr @GlobSt4, i64 0, i64 8), align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob4PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob4PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 1
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd4@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt4@PCREL, 1
; CHECK-P10-LE-NEXT: lhzx r4, r4, r3
; CHECK-P10-LE-NEXT: sthx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob4PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd4@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 1
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt4@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd4@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt4@toc@l
; CHECK-P10-BE-NEXT: lhzx r4, r4, r3
; CHECK-P10-BE-NEXT: sthx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob4PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd4@toc@ha
; CHECK-NEXT: sldi r3, r3, 1
; CHECK-NEXT: addis r5, r2, GlobSt4@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd4@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt4@toc@l
; CHECK-NEXT: lhzx r4, r4, r3
; CHECK-NEXT: sthx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x i16], ptr @GlobLd4, i64 0, i64 %Idx
%0 = load i16, ptr %arrayidx, align 2
%arrayidx1 = getelementptr inbounds [20 x i16], ptr @GlobSt4, i64 0, i64 %Idx
store i16 %0, ptr %arrayidx1, align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob5PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob5PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd5@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt5@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob5PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd5@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt5@toc@ha
; CHECK-P10-BE-NEXT: lwz r3, GlobLd5@toc@l(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt5@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob5PtrPlus0:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd5@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt5@toc@ha
; CHECK-NEXT: lwz r3, GlobLd5@toc@l(r3)
; CHECK-NEXT: stw r3, GlobSt5@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load i32, ptr @GlobLd5, align 4
store i32 %0, ptr @GlobSt5, align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob5PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob5PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd5@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt5@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob5PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd5@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt5@toc@ha
; CHECK-P10-BE-NEXT: lwz r3, GlobLd5@toc@l+3(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt5@toc@l+3(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob5PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd5@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt5@toc@ha
; CHECK-NEXT: lwz r3, GlobLd5@toc@l+3(r3)
; CHECK-NEXT: stw r3, GlobSt5@toc@l+3(r4)
; CHECK-NEXT: blr
entry:
%0 = load i32, ptr getelementptr inbounds (i8, ptr @GlobLd5, i64 3), align 4
store i32 %0, ptr getelementptr inbounds (i8, ptr @GlobSt5, i64 3), align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob5PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob5PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd5@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt5@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob5PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd5@toc@ha+4
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt5@toc@ha+4
; CHECK-P10-BE-NEXT: lwz r3, GlobLd5@toc@l+4(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt5@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob5PtrPlus4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd5@toc@ha+4
; CHECK-NEXT: addis r4, r2, GlobSt5@toc@ha+4
; CHECK-NEXT: lwz r3, GlobLd5@toc@l+4(r3)
; CHECK-NEXT: stw r3, GlobSt5@toc@l+4(r4)
; CHECK-NEXT: blr
entry:
%0 = load i32, ptr getelementptr inbounds ([20 x i32], ptr @GlobLd5, i64 0, i64 1), align 4
store i32 %0, ptr getelementptr inbounds ([20 x i32], ptr @GlobSt5, i64 0, i64 1), align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob5PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob5PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd5@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt5@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob5PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd5@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt5@toc@ha+16
; CHECK-P10-BE-NEXT: lwz r3, GlobLd5@toc@l+16(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt5@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob5PtrPlus16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd5@toc@ha+16
; CHECK-NEXT: addis r4, r2, GlobSt5@toc@ha+16
; CHECK-NEXT: lwz r3, GlobLd5@toc@l+16(r3)
; CHECK-NEXT: stw r3, GlobSt5@toc@l+16(r4)
; CHECK-NEXT: blr
entry:
%0 = load i32, ptr getelementptr inbounds ([20 x i32], ptr @GlobLd5, i64 0, i64 4), align 4
store i32 %0, ptr getelementptr inbounds ([20 x i32], ptr @GlobSt5, i64 0, i64 4), align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob5PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob5PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 2
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd5@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt5@PCREL, 1
; CHECK-P10-LE-NEXT: lwzx r4, r4, r3
; CHECK-P10-LE-NEXT: stwx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob5PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd5@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 2
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt5@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd5@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt5@toc@l
; CHECK-P10-BE-NEXT: lwzx r4, r4, r3
; CHECK-P10-BE-NEXT: stwx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob5PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd5@toc@ha
; CHECK-NEXT: sldi r3, r3, 2
; CHECK-NEXT: addis r5, r2, GlobSt5@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd5@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt5@toc@l
; CHECK-NEXT: lwzx r4, r4, r3
; CHECK-NEXT: stwx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x i32], ptr @GlobLd5, i64 0, i64 %Idx
%0 = load i32, ptr %arrayidx, align 4
%arrayidx1 = getelementptr inbounds [20 x i32], ptr @GlobSt5, i64 0, i64 %Idx
store i32 %0, ptr %arrayidx1, align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob6PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob6PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd6@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt6@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob6PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd6@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt6@toc@ha
; CHECK-P10-BE-NEXT: lwz r3, GlobLd6@toc@l(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt6@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob6PtrPlus0:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd6@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt6@toc@ha
; CHECK-NEXT: lwz r3, GlobLd6@toc@l(r3)
; CHECK-NEXT: stw r3, GlobSt6@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load i32, ptr @GlobLd6, align 4
store i32 %0, ptr @GlobSt6, align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob6PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob6PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd6@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt6@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob6PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd6@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt6@toc@ha
; CHECK-P10-BE-NEXT: lwz r3, GlobLd6@toc@l+3(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt6@toc@l+3(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob6PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd6@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt6@toc@ha
; CHECK-NEXT: lwz r3, GlobLd6@toc@l+3(r3)
; CHECK-NEXT: stw r3, GlobSt6@toc@l+3(r4)
; CHECK-NEXT: blr
entry:
%0 = load i32, ptr getelementptr inbounds (i8, ptr @GlobLd6, i64 3), align 4
store i32 %0, ptr getelementptr inbounds (i8, ptr @GlobSt6, i64 3), align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob6PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob6PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd6@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt6@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob6PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd6@toc@ha+4
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt6@toc@ha+4
; CHECK-P10-BE-NEXT: lwz r3, GlobLd6@toc@l+4(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt6@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob6PtrPlus4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd6@toc@ha+4
; CHECK-NEXT: addis r4, r2, GlobSt6@toc@ha+4
; CHECK-NEXT: lwz r3, GlobLd6@toc@l+4(r3)
; CHECK-NEXT: stw r3, GlobSt6@toc@l+4(r4)
; CHECK-NEXT: blr
entry:
%0 = load i32, ptr getelementptr inbounds ([20 x i32], ptr @GlobLd6, i64 0, i64 1), align 4
store i32 %0, ptr getelementptr inbounds ([20 x i32], ptr @GlobSt6, i64 0, i64 1), align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob6PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob6PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd6@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt6@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob6PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd6@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt6@toc@ha+16
; CHECK-P10-BE-NEXT: lwz r3, GlobLd6@toc@l+16(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt6@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob6PtrPlus16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd6@toc@ha+16
; CHECK-NEXT: addis r4, r2, GlobSt6@toc@ha+16
; CHECK-NEXT: lwz r3, GlobLd6@toc@l+16(r3)
; CHECK-NEXT: stw r3, GlobSt6@toc@l+16(r4)
; CHECK-NEXT: blr
entry:
%0 = load i32, ptr getelementptr inbounds ([20 x i32], ptr @GlobLd6, i64 0, i64 4), align 4
store i32 %0, ptr getelementptr inbounds ([20 x i32], ptr @GlobSt6, i64 0, i64 4), align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob6PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob6PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 2
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd6@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt6@PCREL, 1
; CHECK-P10-LE-NEXT: lwzx r4, r4, r3
; CHECK-P10-LE-NEXT: stwx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob6PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd6@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 2
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt6@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd6@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt6@toc@l
; CHECK-P10-BE-NEXT: lwzx r4, r4, r3
; CHECK-P10-BE-NEXT: stwx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob6PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd6@toc@ha
; CHECK-NEXT: sldi r3, r3, 2
; CHECK-NEXT: addis r5, r2, GlobSt6@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd6@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt6@toc@l
; CHECK-NEXT: lwzx r4, r4, r3
; CHECK-NEXT: stwx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x i32], ptr @GlobLd6, i64 0, i64 %Idx
%0 = load i32, ptr %arrayidx, align 4
%arrayidx1 = getelementptr inbounds [20 x i32], ptr @GlobSt6, i64 0, i64 %Idx
store i32 %0, ptr %arrayidx1, align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob7PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob7PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd7@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt7@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob7PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P10-BE-NEXT: ld r3, GlobLd7@toc@l(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt7@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob7PtrPlus0:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P9-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P9-NEXT: ld r3, GlobLd7@toc@l(r3)
; CHECK-P9-NEXT: std r3, GlobSt7@toc@l(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob7PtrPlus0:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P8-NEXT: ld r3, GlobLd7@toc@l(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P8-NEXT: std r3, GlobSt7@toc@l(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load i64, ptr @GlobLd7, align 8
store i64 %0, ptr @GlobSt7, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob7PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob7PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd7@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt7@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob7PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd7@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt7@toc@l
; CHECK-P10-BE-NEXT: pld r3, 3(r3), 0
; CHECK-P10-BE-NEXT: pstd r3, 3(r4), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob7PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-NEXT: li r4, 3
; CHECK-NEXT: addis r5, r2, GlobSt7@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd7@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt7@toc@l
; CHECK-NEXT: ldx r3, r3, r4
; CHECK-NEXT: stdx r3, r5, r4
; CHECK-NEXT: blr
entry:
%0 = load i64, ptr getelementptr inbounds (i8, ptr @GlobLd7, i64 3), align 8
store i64 %0, ptr getelementptr inbounds (i8, ptr @GlobSt7, i64 3), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob7PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob7PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd7@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt7@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob7PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P10-BE-NEXT: ld r3, GlobLd7@toc@l+4(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt7@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob7PtrPlus4:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P9-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P9-NEXT: ld r3, GlobLd7@toc@l+4(r3)
; CHECK-P9-NEXT: std r3, GlobSt7@toc@l+4(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob7PtrPlus4:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P8-NEXT: ld r3, GlobLd7@toc@l+4(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P8-NEXT: std r3, GlobSt7@toc@l+4(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load i64, ptr getelementptr inbounds (i8, ptr @GlobLd7, i64 4), align 8
store i64 %0, ptr getelementptr inbounds (i8, ptr @GlobSt7, i64 4), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob7PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob7PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd7@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt7@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob7PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd7@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt7@toc@ha+16
; CHECK-P10-BE-NEXT: ld r3, GlobLd7@toc@l+16(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt7@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob7PtrPlus16:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd7@toc@ha+16
; CHECK-P9-NEXT: addis r4, r2, GlobSt7@toc@ha+16
; CHECK-P9-NEXT: ld r3, GlobLd7@toc@l+16(r3)
; CHECK-P9-NEXT: std r3, GlobSt7@toc@l+16(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob7PtrPlus16:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd7@toc@ha+16
; CHECK-P8-NEXT: ld r3, GlobLd7@toc@l+16(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt7@toc@ha+16
; CHECK-P8-NEXT: std r3, GlobSt7@toc@l+16(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load i64, ptr getelementptr inbounds ([20 x i64], ptr @GlobLd7, i64 0, i64 2), align 8
store i64 %0, ptr getelementptr inbounds ([20 x i64], ptr @GlobSt7, i64 0, i64 2), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob7PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob7PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 3
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd7@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt7@PCREL, 1
; CHECK-P10-LE-NEXT: ldx r4, r4, r3
; CHECK-P10-LE-NEXT: stdx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob7PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd7@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 3
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt7@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd7@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt7@toc@l
; CHECK-P10-BE-NEXT: ldx r4, r4, r3
; CHECK-P10-BE-NEXT: stdx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob7PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd7@toc@ha
; CHECK-NEXT: sldi r3, r3, 3
; CHECK-NEXT: addis r5, r2, GlobSt7@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd7@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt7@toc@l
; CHECK-NEXT: ldx r4, r4, r3
; CHECK-NEXT: stdx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x i64], ptr @GlobLd7, i64 0, i64 %Idx
%0 = load i64, ptr %arrayidx, align 8
%arrayidx1 = getelementptr inbounds [20 x i64], ptr @GlobSt7, i64 0, i64 %Idx
store i64 %0, ptr %arrayidx1, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob8PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob8PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd8@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt8@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob8PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd8@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt8@toc@ha
; CHECK-P10-BE-NEXT: ld r3, GlobLd8@toc@l(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt8@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob8PtrPlus0:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd8@toc@ha
; CHECK-P9-NEXT: addis r4, r2, GlobSt8@toc@ha
; CHECK-P9-NEXT: ld r3, GlobLd8@toc@l(r3)
; CHECK-P9-NEXT: std r3, GlobSt8@toc@l(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob8PtrPlus0:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd8@toc@ha
; CHECK-P8-NEXT: ld r3, GlobLd8@toc@l(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt8@toc@ha
; CHECK-P8-NEXT: std r3, GlobSt8@toc@l(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load i64, ptr @GlobLd8, align 8
store i64 %0, ptr @GlobSt8, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob8PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob8PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd8@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt8@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob8PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd8@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt8@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd8@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt8@toc@l
; CHECK-P10-BE-NEXT: pld r3, 3(r3), 0
; CHECK-P10-BE-NEXT: pstd r3, 3(r4), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob8PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd8@toc@ha
; CHECK-NEXT: li r4, 3
; CHECK-NEXT: addis r5, r2, GlobSt8@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd8@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt8@toc@l
; CHECK-NEXT: ldx r3, r3, r4
; CHECK-NEXT: stdx r3, r5, r4
; CHECK-NEXT: blr
entry:
%0 = load i64, ptr getelementptr inbounds (i8, ptr @GlobLd8, i64 3), align 8
store i64 %0, ptr getelementptr inbounds (i8, ptr @GlobSt8, i64 3), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob8PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob8PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd8@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt8@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob8PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd8@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt8@toc@ha
; CHECK-P10-BE-NEXT: ld r3, GlobLd8@toc@l+4(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt8@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob8PtrPlus4:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd8@toc@ha
; CHECK-P9-NEXT: addis r4, r2, GlobSt8@toc@ha
; CHECK-P9-NEXT: ld r3, GlobLd8@toc@l+4(r3)
; CHECK-P9-NEXT: std r3, GlobSt8@toc@l+4(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob8PtrPlus4:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd8@toc@ha
; CHECK-P8-NEXT: ld r3, GlobLd8@toc@l+4(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt8@toc@ha
; CHECK-P8-NEXT: std r3, GlobSt8@toc@l+4(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load i64, ptr getelementptr inbounds (i8, ptr @GlobLd8, i64 4), align 8
store i64 %0, ptr getelementptr inbounds (i8, ptr @GlobSt8, i64 4), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob8PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob8PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd8@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt8@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob8PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd8@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt8@toc@ha+16
; CHECK-P10-BE-NEXT: ld r3, GlobLd8@toc@l+16(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt8@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob8PtrPlus16:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd8@toc@ha+16
; CHECK-P9-NEXT: addis r4, r2, GlobSt8@toc@ha+16
; CHECK-P9-NEXT: ld r3, GlobLd8@toc@l+16(r3)
; CHECK-P9-NEXT: std r3, GlobSt8@toc@l+16(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob8PtrPlus16:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd8@toc@ha+16
; CHECK-P8-NEXT: ld r3, GlobLd8@toc@l+16(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt8@toc@ha+16
; CHECK-P8-NEXT: std r3, GlobSt8@toc@l+16(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load i64, ptr getelementptr inbounds ([20 x i64], ptr @GlobLd8, i64 0, i64 2), align 8
store i64 %0, ptr getelementptr inbounds ([20 x i64], ptr @GlobSt8, i64 0, i64 2), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob8PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob8PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 3
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd8@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt8@PCREL, 1
; CHECK-P10-LE-NEXT: ldx r4, r4, r3
; CHECK-P10-LE-NEXT: stdx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob8PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd8@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 3
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt8@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd8@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt8@toc@l
; CHECK-P10-BE-NEXT: ldx r4, r4, r3
; CHECK-P10-BE-NEXT: stdx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob8PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd8@toc@ha
; CHECK-NEXT: sldi r3, r3, 3
; CHECK-NEXT: addis r5, r2, GlobSt8@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd8@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt8@toc@l
; CHECK-NEXT: ldx r4, r4, r3
; CHECK-NEXT: stdx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x i64], ptr @GlobLd8, i64 0, i64 %Idx
%0 = load i64, ptr %arrayidx, align 8
%arrayidx1 = getelementptr inbounds [20 x i64], ptr @GlobSt8, i64 0, i64 %Idx
store i64 %0, ptr %arrayidx1, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob9PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob9PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd9@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt9@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob9PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd9@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt9@toc@ha
; CHECK-P10-BE-NEXT: lwz r3, GlobLd9@toc@l(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt9@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob9PtrPlus0:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd9@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt9@toc@ha
; CHECK-NEXT: lwz r3, GlobLd9@toc@l(r3)
; CHECK-NEXT: stw r3, GlobSt9@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load float, ptr @GlobLd9, align 4
store float %0, ptr @GlobSt9, align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob9PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob9PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd9@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt9@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob9PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd9@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt9@toc@ha
; CHECK-P10-BE-NEXT: lwz r3, GlobLd9@toc@l+3(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt9@toc@l+3(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob9PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd9@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt9@toc@ha
; CHECK-NEXT: lwz r3, GlobLd9@toc@l+3(r3)
; CHECK-NEXT: stw r3, GlobSt9@toc@l+3(r4)
; CHECK-NEXT: blr
entry:
%0 = load float, ptr getelementptr inbounds (i8, ptr @GlobLd9, i64 3), align 4
store float %0, ptr getelementptr inbounds (i8, ptr @GlobSt9, i64 3), align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob9PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob9PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd9@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt9@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob9PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd9@toc@ha+4
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt9@toc@ha+4
; CHECK-P10-BE-NEXT: lwz r3, GlobLd9@toc@l+4(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt9@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob9PtrPlus4:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd9@toc@ha+4
; CHECK-NEXT: addis r4, r2, GlobSt9@toc@ha+4
; CHECK-NEXT: lwz r3, GlobLd9@toc@l+4(r3)
; CHECK-NEXT: stw r3, GlobSt9@toc@l+4(r4)
; CHECK-NEXT: blr
entry:
%0 = load float, ptr getelementptr inbounds ([20 x float], ptr @GlobLd9, i64 0, i64 1), align 4
store float %0, ptr getelementptr inbounds ([20 x float], ptr @GlobSt9, i64 0, i64 1), align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob9PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob9PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd9@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt9@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob9PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd9@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt9@toc@ha+16
; CHECK-P10-BE-NEXT: lwz r3, GlobLd9@toc@l+16(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt9@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob9PtrPlus16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd9@toc@ha+16
; CHECK-NEXT: addis r4, r2, GlobSt9@toc@ha+16
; CHECK-NEXT: lwz r3, GlobLd9@toc@l+16(r3)
; CHECK-NEXT: stw r3, GlobSt9@toc@l+16(r4)
; CHECK-NEXT: blr
entry:
%0 = load float, ptr getelementptr inbounds ([20 x float], ptr @GlobLd9, i64 0, i64 4), align 4
store float %0, ptr getelementptr inbounds ([20 x float], ptr @GlobSt9, i64 0, i64 4), align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob9PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob9PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 2
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd9@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt9@PCREL, 1
; CHECK-P10-LE-NEXT: lwzx r4, r4, r3
; CHECK-P10-LE-NEXT: stwx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob9PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd9@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 2
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt9@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd9@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt9@toc@l
; CHECK-P10-BE-NEXT: lwzx r4, r4, r3
; CHECK-P10-BE-NEXT: stwx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob9PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd9@toc@ha
; CHECK-NEXT: sldi r3, r3, 2
; CHECK-NEXT: addis r5, r2, GlobSt9@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd9@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt9@toc@l
; CHECK-NEXT: lwzx r4, r4, r3
; CHECK-NEXT: stwx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x float], ptr @GlobLd9, i64 0, i64 %Idx
%0 = load float, ptr %arrayidx, align 4
%arrayidx1 = getelementptr inbounds [20 x float], ptr @GlobSt9, i64 0, i64 %Idx
store float %0, ptr %arrayidx1, align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob10PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob10PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd10@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt10@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob10PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: ld r3, GlobLd10@toc@l(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt10@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob10PtrPlus0:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P9-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P9-NEXT: ld r3, GlobLd10@toc@l(r3)
; CHECK-P9-NEXT: std r3, GlobSt10@toc@l(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob10PtrPlus0:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P8-NEXT: ld r3, GlobLd10@toc@l(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P8-NEXT: std r3, GlobSt10@toc@l(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load double, ptr @GlobLd10, align 8
store double %0, ptr @GlobSt10, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob10PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob10PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd10@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt10@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob10PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd10@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt10@toc@l
; CHECK-P10-BE-NEXT: pld r3, 3(r3), 0
; CHECK-P10-BE-NEXT: pstd r3, 3(r4), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob10PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-NEXT: li r4, 3
; CHECK-NEXT: addis r5, r2, GlobSt10@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd10@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt10@toc@l
; CHECK-NEXT: ldx r3, r3, r4
; CHECK-NEXT: stdx r3, r5, r4
; CHECK-NEXT: blr
entry:
%0 = load double, ptr getelementptr inbounds (i8, ptr @GlobLd10, i64 3), align 8
store double %0, ptr getelementptr inbounds (i8, ptr @GlobSt10, i64 3), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob10PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob10PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd10@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt10@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob10PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: ld r3, GlobLd10@toc@l+4(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt10@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob10PtrPlus4:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P9-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P9-NEXT: ld r3, GlobLd10@toc@l+4(r3)
; CHECK-P9-NEXT: std r3, GlobSt10@toc@l+4(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob10PtrPlus4:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P8-NEXT: ld r3, GlobLd10@toc@l+4(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P8-NEXT: std r3, GlobSt10@toc@l+4(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load double, ptr getelementptr inbounds (i8, ptr @GlobLd10, i64 4), align 8
store double %0, ptr getelementptr inbounds (i8, ptr @GlobSt10, i64 4), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob10PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob10PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd10@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt10@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob10PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd10@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt10@toc@ha+16
; CHECK-P10-BE-NEXT: ld r3, GlobLd10@toc@l+16(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt10@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob10PtrPlus16:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd10@toc@ha+16
; CHECK-P9-NEXT: addis r4, r2, GlobSt10@toc@ha+16
; CHECK-P9-NEXT: ld r3, GlobLd10@toc@l+16(r3)
; CHECK-P9-NEXT: std r3, GlobSt10@toc@l+16(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob10PtrPlus16:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd10@toc@ha+16
; CHECK-P8-NEXT: ld r3, GlobLd10@toc@l+16(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt10@toc@ha+16
; CHECK-P8-NEXT: std r3, GlobSt10@toc@l+16(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load double, ptr getelementptr inbounds ([20 x double], ptr @GlobLd10, i64 0, i64 2), align 8
store double %0, ptr getelementptr inbounds ([20 x double], ptr @GlobSt10, i64 0, i64 2), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob10PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob10PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 3
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd10@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt10@PCREL, 1
; CHECK-P10-LE-NEXT: ldx r4, r4, r3
; CHECK-P10-LE-NEXT: stdx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob10PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd10@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 3
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd10@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt10@toc@l
; CHECK-P10-BE-NEXT: ldx r4, r4, r3
; CHECK-P10-BE-NEXT: stdx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob10PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd10@toc@ha
; CHECK-NEXT: sldi r3, r3, 3
; CHECK-NEXT: addis r5, r2, GlobSt10@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd10@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt10@toc@l
; CHECK-NEXT: ldx r4, r4, r3
; CHECK-NEXT: stdx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x double], ptr @GlobLd10, i64 0, i64 %Idx
%0 = load double, ptr %arrayidx, align 8
%arrayidx1 = getelementptr inbounds [20 x double], ptr @GlobSt10, i64 0, i64 %Idx
store double %0, ptr %arrayidx1, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob11PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob11PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd11@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt11@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob11PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P10-BE-NEXT: lxv vs0, 0(r3)
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P10-BE-NEXT: stxv vs0, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob11PtrPlus0:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P9-NEXT: lxv vs0, 0(r3)
; CHECK-P9-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P9-NEXT: stxv vs0, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob11PtrPlus0:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlus0:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, 0, r3
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, 0, r3
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, ptr @GlobLd11, align 16
store <16 x i8> %0, ptr @GlobSt11, align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob11PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob11PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd11@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt11@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob11PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P10-BE-NEXT: plxv vs0, 3(r3), 0
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P10-BE-NEXT: pstxv vs0, 3(r3), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob11PtrPlus3:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P9-NEXT: li r4, 3
; CHECK-P9-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P9-NEXT: lxvx vs0, r3, r4
; CHECK-P9-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P9-NEXT: stxvx vs0, r3, r4
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob11PtrPlus3:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-LE-NEXT: li r4, 3
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlus3:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: li r4, 3
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, ptr getelementptr ([20 x <16 x i8>], ptr @GlobLd11, i64 0, i64 0, i64 3), align 16
store <16 x i8> %0, ptr getelementptr ([20 x <16 x i8>], ptr @GlobSt11, i64 0, i64 0, i64 3), align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob11PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob11PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd11@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt11@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob11PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P10-BE-NEXT: plxv vs0, 4(r3), 0
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P10-BE-NEXT: pstxv vs0, 4(r3), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob11PtrPlus4:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P9-NEXT: li r4, 4
; CHECK-P9-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P9-NEXT: lxvx vs0, r3, r4
; CHECK-P9-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P9-NEXT: stxvx vs0, r3, r4
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob11PtrPlus4:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-LE-NEXT: li r4, 4
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlus4:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: li r4, 4
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, ptr getelementptr ([20 x <16 x i8>], ptr @GlobLd11, i64 0, i64 0, i64 4), align 16
store <16 x i8> %0, ptr getelementptr ([20 x <16 x i8>], ptr @GlobSt11, i64 0, i64 0, i64 4), align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob11PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob11PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd11@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt11@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob11PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P10-BE-NEXT: lxv vs0, 16(r3)
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P10-BE-NEXT: stxv vs0, 16(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob11PtrPlus16:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P9-NEXT: lxv vs0, 16(r3)
; CHECK-P9-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P9-NEXT: stxv vs0, 16(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob11PtrPlus16:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-LE-NEXT: li r4, 16
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlus16:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: li r4, 16
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, ptr getelementptr inbounds ([20 x <16 x i8>], ptr @GlobLd11, i64 0, i64 1, i64 0), align 16
store <16 x i8> %0, ptr getelementptr inbounds ([20 x <16 x i8>], ptr @GlobSt11, i64 0, i64 1, i64 0), align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob11PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob11PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 4
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd11@PCREL, 1
; CHECK-P10-LE-NEXT: lxvx vs0, r4, r3
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobSt11@PCREL, 1
; CHECK-P10-LE-NEXT: stxvx vs0, r4, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob11PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd11@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 4
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd11@toc@l
; CHECK-P10-BE-NEXT: lxvx vs0, r4, r3
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt11@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt11@toc@l
; CHECK-P10-BE-NEXT: stxvx vs0, r4, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob11PtrPlusVar:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r4, r2, GlobLd11@toc@ha
; CHECK-P9-NEXT: sldi r3, r3, 4
; CHECK-P9-NEXT: addi r4, r4, GlobLd11@toc@l
; CHECK-P9-NEXT: lxvx vs0, r4, r3
; CHECK-P9-NEXT: addis r4, r2, GlobSt11@toc@ha
; CHECK-P9-NEXT: addi r4, r4, GlobSt11@toc@l
; CHECK-P9-NEXT: stxvx vs0, r4, r3
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob11PtrPlusVar:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r4, r2, GlobLd11@toc@ha
; CHECK-P8-LE-NEXT: sldi r3, r3, 4
; CHECK-P8-LE-NEXT: addi r4, r4, GlobLd11@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r4, r3
; CHECK-P8-LE-NEXT: addis r4, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r4, r4, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r4, r3
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlusVar:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r4, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: sldi r3, r3, 4
; CHECK-P8-BE-NEXT: addi r4, r4, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r4, r3
; CHECK-P8-BE-NEXT: addis r4, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r4, r4, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r4, r3
; CHECK-P8-BE-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x <16 x i8>], ptr @GlobLd11, i64 0, i64 %Idx
%0 = load <16 x i8>, ptr %arrayidx, align 16
%arrayidx1 = getelementptr inbounds [20 x <16 x i8>], ptr @GlobSt11, i64 0, i64 %Idx
store <16 x i8> %0, ptr %arrayidx1, align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob12PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob12PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd12@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt12@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob12PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P10-BE-NEXT: lxv vs0, 0(r3)
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P10-BE-NEXT: stxv vs0, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob12PtrPlus0:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P9-NEXT: lxv vs0, 0(r3)
; CHECK-P9-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P9-NEXT: stxv vs0, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob12PtrPlus0:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlus0:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, 0, r3
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, 0, r3
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, ptr @GlobLd12, align 16
store <16 x i8> %0, ptr @GlobSt12, align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob12PtrPlus3() {
; CHECK-P10-LE-LABEL: testGlob12PtrPlus3:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd12@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt12@PCREL+3(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob12PtrPlus3:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P10-BE-NEXT: plxv vs0, 3(r3), 0
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P10-BE-NEXT: pstxv vs0, 3(r3), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob12PtrPlus3:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P9-NEXT: li r4, 3
; CHECK-P9-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P9-NEXT: lxvx vs0, r3, r4
; CHECK-P9-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P9-NEXT: stxvx vs0, r3, r4
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob12PtrPlus3:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-LE-NEXT: li r4, 3
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlus3:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: li r4, 3
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, ptr getelementptr ([20 x <16 x i8>], ptr @GlobLd12, i64 0, i64 0, i64 3), align 16
store <16 x i8> %0, ptr getelementptr ([20 x <16 x i8>], ptr @GlobSt12, i64 0, i64 0, i64 3), align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob12PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob12PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd12@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt12@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob12PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P10-BE-NEXT: plxv vs0, 4(r3), 0
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P10-BE-NEXT: pstxv vs0, 4(r3), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob12PtrPlus4:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P9-NEXT: li r4, 4
; CHECK-P9-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P9-NEXT: lxvx vs0, r3, r4
; CHECK-P9-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P9-NEXT: stxvx vs0, r3, r4
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob12PtrPlus4:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-LE-NEXT: li r4, 4
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlus4:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: li r4, 4
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, ptr getelementptr ([20 x <16 x i8>], ptr @GlobLd12, i64 0, i64 0, i64 4), align 16
store <16 x i8> %0, ptr getelementptr ([20 x <16 x i8>], ptr @GlobSt12, i64 0, i64 0, i64 4), align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob12PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob12PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd12@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt12@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob12PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P10-BE-NEXT: lxv vs0, 16(r3)
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P10-BE-NEXT: stxv vs0, 16(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob12PtrPlus16:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P9-NEXT: lxv vs0, 16(r3)
; CHECK-P9-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P9-NEXT: stxv vs0, 16(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob12PtrPlus16:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-LE-NEXT: li r4, 16
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlus16:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: li r4, 16
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, ptr getelementptr inbounds ([20 x <16 x i8>], ptr @GlobLd12, i64 0, i64 1, i64 0), align 16
store <16 x i8> %0, ptr getelementptr inbounds ([20 x <16 x i8>], ptr @GlobSt12, i64 0, i64 1, i64 0), align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob12PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob12PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 4
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd12@PCREL, 1
; CHECK-P10-LE-NEXT: lxvx vs0, r4, r3
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobSt12@PCREL, 1
; CHECK-P10-LE-NEXT: stxvx vs0, r4, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob12PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd12@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 4
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd12@toc@l
; CHECK-P10-BE-NEXT: lxvx vs0, r4, r3
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt12@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt12@toc@l
; CHECK-P10-BE-NEXT: stxvx vs0, r4, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob12PtrPlusVar:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r4, r2, GlobLd12@toc@ha
; CHECK-P9-NEXT: sldi r3, r3, 4
; CHECK-P9-NEXT: addi r4, r4, GlobLd12@toc@l
; CHECK-P9-NEXT: lxvx vs0, r4, r3
; CHECK-P9-NEXT: addis r4, r2, GlobSt12@toc@ha
; CHECK-P9-NEXT: addi r4, r4, GlobSt12@toc@l
; CHECK-P9-NEXT: stxvx vs0, r4, r3
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob12PtrPlusVar:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r4, r2, GlobLd12@toc@ha
; CHECK-P8-LE-NEXT: sldi r3, r3, 4
; CHECK-P8-LE-NEXT: addi r4, r4, GlobLd12@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r4, r3
; CHECK-P8-LE-NEXT: addis r4, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r4, r4, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r4, r3
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlusVar:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r4, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: sldi r3, r3, 4
; CHECK-P8-BE-NEXT: addi r4, r4, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r4, r3
; CHECK-P8-BE-NEXT: addis r4, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r4, r4, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r4, r3
; CHECK-P8-BE-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x <16 x i8>], ptr @GlobLd12, i64 0, i64 %Idx
%0 = load <16 x i8>, ptr %arrayidx, align 16
%arrayidx1 = getelementptr inbounds [20 x <16 x i8>], ptr @GlobSt12, i64 0, i64 %Idx
store <16 x i8> %0, ptr %arrayidx1, align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @Atomic_LdSt_i8() {
; CHECK-P10-LE-LABEL: Atomic_LdSt_i8:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd1@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt1@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: Atomic_LdSt_i8:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-P10-BE-NEXT: lbz r3, GlobLd1@toc@l(r3)
; CHECK-P10-BE-NEXT: stb r3, GlobSt1@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: Atomic_LdSt_i8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-NEXT: lbz r3, GlobLd1@toc@l(r3)
; CHECK-NEXT: stb r3, GlobSt1@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load atomic i8, ptr @GlobLd1 monotonic, align 1
store atomic i8 %0, ptr @GlobSt1 monotonic, align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @Atomic_LdSt_i16() {
; CHECK-P10-LE-LABEL: Atomic_LdSt_i16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd3@PCREL(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt3@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: Atomic_LdSt_i16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd3@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt3@toc@ha
; CHECK-P10-BE-NEXT: lhz r3, GlobLd3@toc@l(r3)
; CHECK-P10-BE-NEXT: sth r3, GlobSt3@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: Atomic_LdSt_i16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd3@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt3@toc@ha
; CHECK-NEXT: lhz r3, GlobLd3@toc@l(r3)
; CHECK-NEXT: sth r3, GlobSt3@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load atomic i16, ptr @GlobLd3 monotonic, align 2
store atomic i16 %0, ptr @GlobSt3 monotonic, align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @Atomic_LdSt_i32() {
; CHECK-P10-LE-LABEL: Atomic_LdSt_i32:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd5@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt5@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: Atomic_LdSt_i32:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd5@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt5@toc@ha
; CHECK-P10-BE-NEXT: lwz r3, GlobLd5@toc@l(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt5@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: Atomic_LdSt_i32:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd5@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt5@toc@ha
; CHECK-NEXT: lwz r3, GlobLd5@toc@l(r3)
; CHECK-NEXT: stw r3, GlobSt5@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load atomic i32, ptr @GlobLd5 monotonic, align 4
store atomic i32 %0, ptr @GlobSt5 monotonic, align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @Atomic_LdSt_i64() {
; CHECK-P10-LE-LABEL: Atomic_LdSt_i64:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd7@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt7@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: Atomic_LdSt_i64:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P10-BE-NEXT: ld r3, GlobLd7@toc@l(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt7@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: Atomic_LdSt_i64:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P9-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P9-NEXT: ld r3, GlobLd7@toc@l(r3)
; CHECK-P9-NEXT: std r3, GlobSt7@toc@l(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: Atomic_LdSt_i64:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P8-NEXT: ld r3, GlobLd7@toc@l(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P8-NEXT: std r3, GlobSt7@toc@l(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load atomic i64, ptr @GlobLd7 monotonic, align 8
store atomic i64 %0, ptr @GlobSt7 monotonic, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
define dso_local void @store_double_f64_to_uint(double %str) local_unnamed_addr #0 {
; CHECK-P10-LE-LABEL: store_double_f64_to_uint:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: xscvdpuxds v2, f1
; CHECK-P10-LE-NEXT: pstxsd v2, GlobSt10@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: store_double_f64_to_uint:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: xscvdpuxds v2, f1
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P10-BE-NEXT: stxsd v2, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: store_double_f64_to_uint:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvdpuxds v2, f1
; CHECK-P9-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P9-NEXT: stxsd v2, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: store_double_f64_to_uint:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: xscvdpuxds f0, f1
; CHECK-P8-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P8-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P8-NEXT: stxsdx f0, 0, r3
; CHECK-P8-NEXT: blr
entry:
%conv = fptoui double %str to i64
store i64 %conv, ptr @GlobSt10, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
define dso_local void @store_double_f64_to_sint(double %str) local_unnamed_addr #0 {
; CHECK-P10-LE-LABEL: store_double_f64_to_sint:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: xscvdpsxds v2, f1
; CHECK-P10-LE-NEXT: pstxsd v2, GlobSt10@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: store_double_f64_to_sint:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: xscvdpsxds v2, f1
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P10-BE-NEXT: stxsd v2, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: store_double_f64_to_sint:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvdpsxds v2, f1
; CHECK-P9-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P9-NEXT: stxsd v2, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: store_double_f64_to_sint:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: xscvdpsxds f0, f1
; CHECK-P8-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P8-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P8-NEXT: stxsdx f0, 0, r3
; CHECK-P8-NEXT: blr
entry:
%conv = fptosi double %str to i64
store i64 %conv, ptr @GlobSt10, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
define dso_local void @store_f128_to_uint(fp128 %str) local_unnamed_addr #0 {
; CHECK-P10-LE-LABEL: store_f128_to_uint:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: xscvqpudz v2, v2
; CHECK-P10-LE-NEXT: pstxsd v2, GlobF128@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: store_f128_to_uint:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: xscvqpudz v2, v2
; CHECK-P10-BE-NEXT: addis r3, r2, GlobF128@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobF128@toc@l
; CHECK-P10-BE-NEXT: stxsd v2, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: store_f128_to_uint:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvqpudz v2, v2
; CHECK-P9-NEXT: addis r3, r2, GlobF128@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobF128@toc@l
; CHECK-P9-NEXT: stxsd v2, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: store_f128_to_uint:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: mflr r0
; CHECK-P8-LE-NEXT: stdu r1, -32(r1)
; CHECK-P8-LE-NEXT: std r0, 48(r1)
; CHECK-P8-LE-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-LE-NEXT: .cfi_offset lr, 16
; CHECK-P8-LE-NEXT: bl __fixunskfdi
; CHECK-P8-LE-NEXT: nop
; CHECK-P8-LE-NEXT: addis r4, r2, GlobF128@toc@ha
; CHECK-P8-LE-NEXT: std r3, GlobF128@toc@l(r4)
; CHECK-P8-LE-NEXT: addi r1, r1, 32
; CHECK-P8-LE-NEXT: ld r0, 16(r1)
; CHECK-P8-LE-NEXT: mtlr r0
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: store_f128_to_uint:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: mflr r0
; CHECK-P8-BE-NEXT: stdu r1, -112(r1)
; CHECK-P8-BE-NEXT: std r0, 128(r1)
; CHECK-P8-BE-NEXT: .cfi_def_cfa_offset 112
; CHECK-P8-BE-NEXT: .cfi_offset lr, 16
; CHECK-P8-BE-NEXT: bl __fixunskfdi
; CHECK-P8-BE-NEXT: nop
; CHECK-P8-BE-NEXT: addis r4, r2, GlobF128@toc@ha
; CHECK-P8-BE-NEXT: std r3, GlobF128@toc@l(r4)
; CHECK-P8-BE-NEXT: addi r1, r1, 112
; CHECK-P8-BE-NEXT: ld r0, 16(r1)
; CHECK-P8-BE-NEXT: mtlr r0
; CHECK-P8-BE-NEXT: blr
entry:
%conv = fptoui fp128 %str to i64
store i64 %conv, ptr @GlobF128, align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
define dso_local void @store_f128_to_sint(fp128 %str) local_unnamed_addr #0 {
; CHECK-P10-LE-LABEL: store_f128_to_sint:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: xscvqpsdz v2, v2
; CHECK-P10-LE-NEXT: pstxsd v2, GlobF128@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: store_f128_to_sint:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: xscvqpsdz v2, v2
; CHECK-P10-BE-NEXT: addis r3, r2, GlobF128@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobF128@toc@l
; CHECK-P10-BE-NEXT: stxsd v2, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: store_f128_to_sint:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvqpsdz v2, v2
; CHECK-P9-NEXT: addis r3, r2, GlobF128@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobF128@toc@l
; CHECK-P9-NEXT: stxsd v2, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: store_f128_to_sint:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: mflr r0
; CHECK-P8-LE-NEXT: stdu r1, -32(r1)
; CHECK-P8-LE-NEXT: std r0, 48(r1)
; CHECK-P8-LE-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-LE-NEXT: .cfi_offset lr, 16
; CHECK-P8-LE-NEXT: bl __fixkfdi
; CHECK-P8-LE-NEXT: nop
; CHECK-P8-LE-NEXT: addis r4, r2, GlobF128@toc@ha
; CHECK-P8-LE-NEXT: std r3, GlobF128@toc@l(r4)
; CHECK-P8-LE-NEXT: addi r1, r1, 32
; CHECK-P8-LE-NEXT: ld r0, 16(r1)
; CHECK-P8-LE-NEXT: mtlr r0
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: store_f128_to_sint:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: mflr r0
; CHECK-P8-BE-NEXT: stdu r1, -112(r1)
; CHECK-P8-BE-NEXT: std r0, 128(r1)
; CHECK-P8-BE-NEXT: .cfi_def_cfa_offset 112
; CHECK-P8-BE-NEXT: .cfi_offset lr, 16
; CHECK-P8-BE-NEXT: bl __fixkfdi
; CHECK-P8-BE-NEXT: nop
; CHECK-P8-BE-NEXT: addis r4, r2, GlobF128@toc@ha
; CHECK-P8-BE-NEXT: std r3, GlobF128@toc@l(r4)
; CHECK-P8-BE-NEXT: addi r1, r1, 112
; CHECK-P8-BE-NEXT: ld r0, 16(r1)
; CHECK-P8-BE-NEXT: mtlr r0
; CHECK-P8-BE-NEXT: blr
entry:
%conv = fptosi fp128 %str to i64
store i64 %conv, ptr @GlobF128, align 16
ret void
}