This patch includes the following updates to the load/store refactoring effort introduced in D93370: - Update various VSX patterns that use to "force" an XForm, to instead just XForm. This allows the ability for the patterns to compute the most optimal addressing mode (and to produce a DForm instruction when possible) - Update pattern and test case for the LXVD2X/STXVD2X intrinsics - Update LIT test cases that use to use the XForm instruction to use the DForm instruction Differential Revision: https://reviews.llvm.org/D95115
2273 lines
91 KiB
LLVM
2273 lines
91 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
|
|
|
|
; 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, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 0), align 1
|
|
store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt1, i64 0, i64 0), 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, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 3), align 1
|
|
store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @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, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 4), align 1
|
|
store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @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, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 16), align 1
|
|
store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @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], [20 x i8]* @GlobLd1, i64 0, i64 %Idx
|
|
%0 = load i8, i8* %arrayidx, align 1
|
|
%arrayidx1 = getelementptr inbounds [20 x i8], [20 x i8]* @GlobSt1, i64 0, i64 %Idx
|
|
store i8 %0, i8* %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, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd2, i64 0, i64 0), align 1
|
|
store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt2, i64 0, i64 0), 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, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd2, i64 0, i64 3), align 1
|
|
store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @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, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd2, i64 0, i64 4), align 1
|
|
store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @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, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd2, i64 0, i64 16), align 1
|
|
store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @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], [20 x i8]* @GlobLd2, i64 0, i64 %Idx
|
|
%0 = load i8, i8* %arrayidx, align 1
|
|
%arrayidx1 = getelementptr inbounds [20 x i8], [20 x i8]* @GlobSt2, i64 0, i64 %Idx
|
|
store i8 %0, i8* %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, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd3, i64 0, i64 0), align 2
|
|
store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobSt3, i64 0, i64 0), 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, i16* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i16]* @GlobLd3 to i8*), i64 3) to i16*), align 2
|
|
store i16 %0, i16* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i16]* @GlobSt3 to i8*), i64 3) to i16*), 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, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd3, i64 0, i64 2), align 2
|
|
store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @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, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd3, i64 0, i64 8), align 2
|
|
store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @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], [20 x i16]* @GlobLd3, i64 0, i64 %Idx
|
|
%0 = load i16, i16* %arrayidx, align 2
|
|
%arrayidx1 = getelementptr inbounds [20 x i16], [20 x i16]* @GlobSt3, i64 0, i64 %Idx
|
|
store i16 %0, i16* %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, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd4, i64 0, i64 0), align 2
|
|
store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobSt4, i64 0, i64 0), 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, i16* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i16]* @GlobLd4 to i8*), i64 3) to i16*), align 2
|
|
store i16 %0, i16* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i16]* @GlobSt4 to i8*), i64 3) to i16*), 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, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd4, i64 0, i64 2), align 2
|
|
store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @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, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd4, i64 0, i64 8), align 2
|
|
store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @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], [20 x i16]* @GlobLd4, i64 0, i64 %Idx
|
|
%0 = load i16, i16* %arrayidx, align 2
|
|
%arrayidx1 = getelementptr inbounds [20 x i16], [20 x i16]* @GlobSt4, i64 0, i64 %Idx
|
|
store i16 %0, i16* %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, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd5, i64 0, i64 0), align 4
|
|
store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobSt5, i64 0, i64 0), 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, i32* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i32]* @GlobLd5 to i8*), i64 3) to i32*), align 4
|
|
store i32 %0, i32* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i32]* @GlobSt5 to i8*), i64 3) to i32*), 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, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd5, i64 0, i64 1), align 4
|
|
store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @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, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd5, i64 0, i64 4), align 4
|
|
store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @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], [20 x i32]* @GlobLd5, i64 0, i64 %Idx
|
|
%0 = load i32, i32* %arrayidx, align 4
|
|
%arrayidx1 = getelementptr inbounds [20 x i32], [20 x i32]* @GlobSt5, i64 0, i64 %Idx
|
|
store i32 %0, i32* %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, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd6, i64 0, i64 0), align 4
|
|
store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobSt6, i64 0, i64 0), 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, i32* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i32]* @GlobLd6 to i8*), i64 3) to i32*), align 4
|
|
store i32 %0, i32* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i32]* @GlobSt6 to i8*), i64 3) to i32*), 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, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd6, i64 0, i64 1), align 4
|
|
store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @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, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd6, i64 0, i64 4), align 4
|
|
store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @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], [20 x i32]* @GlobLd6, i64 0, i64 %Idx
|
|
%0 = load i32, i32* %arrayidx, align 4
|
|
%arrayidx1 = getelementptr inbounds [20 x i32], [20 x i32]* @GlobSt6, i64 0, i64 %Idx
|
|
store i32 %0, i32* %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, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobLd7, i64 0, i64 0), align 8
|
|
store i64 %0, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobSt7, i64 0, i64 0), 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: li r4, 3
|
|
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt7@toc@ha
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd7@toc@l
|
|
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt7@toc@l
|
|
; CHECK-P10-BE-NEXT: ldx r3, r3, r4
|
|
; CHECK-P10-BE-NEXT: stdx r3, r5, r4
|
|
; 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, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobLd7 to i8*), i64 3) to i64*), align 8
|
|
store i64 %0, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobSt7 to i8*), i64 3) to i64*), 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, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobLd7 to i8*), i64 4) to i64*), align 8
|
|
store i64 %0, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobSt7 to i8*), i64 4) to i64*), 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, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobLd7, i64 0, i64 2), align 8
|
|
store i64 %0, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @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], [20 x i64]* @GlobLd7, i64 0, i64 %Idx
|
|
%0 = load i64, i64* %arrayidx, align 8
|
|
%arrayidx1 = getelementptr inbounds [20 x i64], [20 x i64]* @GlobSt7, i64 0, i64 %Idx
|
|
store i64 %0, i64* %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, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobLd8, i64 0, i64 0), align 8
|
|
store i64 %0, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobSt8, i64 0, i64 0), 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: li r4, 3
|
|
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt8@toc@ha
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd8@toc@l
|
|
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt8@toc@l
|
|
; CHECK-P10-BE-NEXT: ldx r3, r3, r4
|
|
; CHECK-P10-BE-NEXT: stdx r3, r5, r4
|
|
; 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, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobLd8 to i8*), i64 3) to i64*), align 8
|
|
store i64 %0, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobSt8 to i8*), i64 3) to i64*), 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, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobLd8 to i8*), i64 4) to i64*), align 8
|
|
store i64 %0, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobSt8 to i8*), i64 4) to i64*), 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, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobLd8, i64 0, i64 2), align 8
|
|
store i64 %0, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @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], [20 x i64]* @GlobLd8, i64 0, i64 %Idx
|
|
%0 = load i64, i64* %arrayidx, align 8
|
|
%arrayidx1 = getelementptr inbounds [20 x i64], [20 x i64]* @GlobSt8, i64 0, i64 %Idx
|
|
store i64 %0, i64* %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, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobLd9, i64 0, i64 0), align 4
|
|
store float %0, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobSt9, i64 0, i64 0), 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, float* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x float]* @GlobLd9 to i8*), i64 3) to float*), align 4
|
|
store float %0, float* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x float]* @GlobSt9 to i8*), i64 3) to float*), 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, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobLd9, i64 0, i64 1), align 4
|
|
store float %0, float* getelementptr inbounds ([20 x float], [20 x float]* @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, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobLd9, i64 0, i64 4), align 4
|
|
store float %0, float* getelementptr inbounds ([20 x float], [20 x float]* @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], [20 x float]* @GlobLd9, i64 0, i64 %Idx
|
|
%0 = load float, float* %arrayidx, align 4
|
|
%arrayidx1 = getelementptr inbounds [20 x float], [20 x float]* @GlobSt9, i64 0, i64 %Idx
|
|
store float %0, float* %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, double* getelementptr inbounds ([20 x double], [20 x double]* @GlobLd10, i64 0, i64 0), align 8
|
|
store double %0, double* getelementptr inbounds ([20 x double], [20 x double]* @GlobSt10, i64 0, i64 0), 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: li r4, 3
|
|
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt10@toc@ha
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd10@toc@l
|
|
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt10@toc@l
|
|
; CHECK-P10-BE-NEXT: ldx r3, r3, r4
|
|
; CHECK-P10-BE-NEXT: stdx r3, r5, r4
|
|
; 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, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobLd10 to i8*), i64 3) to double*), align 8
|
|
store double %0, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobSt10 to i8*), i64 3) to double*), 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, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobLd10 to i8*), i64 4) to double*), align 8
|
|
store double %0, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobSt10 to i8*), i64 4) to double*), 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, double* getelementptr inbounds ([20 x double], [20 x double]* @GlobLd10, i64 0, i64 2), align 8
|
|
store double %0, double* getelementptr inbounds ([20 x double], [20 x double]* @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], [20 x double]* @GlobLd10, i64 0, i64 %Idx
|
|
%0 = load double, double* %arrayidx, align 8
|
|
%arrayidx1 = getelementptr inbounds [20 x double], [20 x double]* @GlobSt10, i64 0, i64 %Idx
|
|
store double %0, double* %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: lvx v2, 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: stvx v2, 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>, <16 x i8>* getelementptr inbounds ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd11, i64 0, i64 0), align 16
|
|
store <16 x i8> %0, <16 x i8>* getelementptr inbounds ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt11, i64 0, i64 0), 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: li r4, 3
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd11@toc@l
|
|
; CHECK-P10-BE-NEXT: lxvx vs0, r3, r4
|
|
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt11@toc@l
|
|
; CHECK-P10-BE-NEXT: stxvx vs0, r3, r4
|
|
; 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: lvx v2, 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: stvx v2, 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>, <16 x i8>* bitcast (i8* getelementptr ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd11, i64 0, i64 0, i64 3) to <16 x i8>*), align 16
|
|
store <16 x i8> %0, <16 x i8>* bitcast (i8* getelementptr ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt11, i64 0, i64 0, i64 3) to <16 x i8>*), 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: li r4, 4
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd11@toc@l
|
|
; CHECK-P10-BE-NEXT: lxvx vs0, r3, r4
|
|
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt11@toc@l
|
|
; CHECK-P10-BE-NEXT: stxvx vs0, r3, r4
|
|
; 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: lvx v2, 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: stvx v2, 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>, <16 x i8>* bitcast (i8* getelementptr ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd11, i64 0, i64 0, i64 4) to <16 x i8>*), align 16
|
|
store <16 x i8> %0, <16 x i8>* bitcast (i8* getelementptr ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt11, i64 0, i64 0, i64 4) to <16 x i8>*), 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: lvx v2, 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: stvx v2, 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>, <16 x i8>* bitcast (i8* getelementptr inbounds ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd11, i64 0, i64 1, i64 0) to <16 x i8>*), align 16
|
|
store <16 x i8> %0, <16 x i8>* bitcast (i8* getelementptr inbounds ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt11, i64 0, i64 1, i64 0) to <16 x i8>*), 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: lvx v2, 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: stvx v2, 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>], [20 x <16 x i8>]* @GlobLd11, i64 0, i64 %Idx
|
|
%0 = load <16 x i8>, <16 x i8>* %arrayidx, align 16
|
|
%arrayidx1 = getelementptr inbounds [20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt11, i64 0, i64 %Idx
|
|
store <16 x i8> %0, <16 x i8>* %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: lvx v2, 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: stvx v2, 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>, <16 x i8>* getelementptr inbounds ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd12, i64 0, i64 0), align 16
|
|
store <16 x i8> %0, <16 x i8>* getelementptr inbounds ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt12, i64 0, i64 0), 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: li r4, 3
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd12@toc@l
|
|
; CHECK-P10-BE-NEXT: lxvx vs0, r3, r4
|
|
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt12@toc@l
|
|
; CHECK-P10-BE-NEXT: stxvx vs0, r3, r4
|
|
; 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: lvx v2, 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: stvx v2, 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>, <16 x i8>* bitcast (i8* getelementptr ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd12, i64 0, i64 0, i64 3) to <16 x i8>*), align 16
|
|
store <16 x i8> %0, <16 x i8>* bitcast (i8* getelementptr ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt12, i64 0, i64 0, i64 3) to <16 x i8>*), 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: li r4, 4
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd12@toc@l
|
|
; CHECK-P10-BE-NEXT: lxvx vs0, r3, r4
|
|
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
|
|
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt12@toc@l
|
|
; CHECK-P10-BE-NEXT: stxvx vs0, r3, r4
|
|
; 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: lvx v2, 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: stvx v2, 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>, <16 x i8>* bitcast (i8* getelementptr ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd12, i64 0, i64 0, i64 4) to <16 x i8>*), align 16
|
|
store <16 x i8> %0, <16 x i8>* bitcast (i8* getelementptr ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt12, i64 0, i64 0, i64 4) to <16 x i8>*), 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: lvx v2, 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: stvx v2, 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>, <16 x i8>* bitcast (i8* getelementptr inbounds ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd12, i64 0, i64 1, i64 0) to <16 x i8>*), align 16
|
|
store <16 x i8> %0, <16 x i8>* bitcast (i8* getelementptr inbounds ([20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt12, i64 0, i64 1, i64 0) to <16 x i8>*), 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: lvx v2, 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: stvx v2, 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>], [20 x <16 x i8>]* @GlobLd12, i64 0, i64 %Idx
|
|
%0 = load <16 x i8>, <16 x i8>* %arrayidx, align 16
|
|
%arrayidx1 = getelementptr inbounds [20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt12, i64 0, i64 %Idx
|
|
store <16 x i8> %0, <16 x i8>* %arrayidx1, align 16
|
|
ret void
|
|
}
|