
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
2587 lines
98 KiB
LLVM
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
|
|
}
|