mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
d53e3aade2
This patch adds additional load/store test cases involving scalars, vectors, and PC-Rel in preparation for the refactored load and store implementation introduced in D93370. Differential Revision: https://reviews.llvm.org/D97391
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: lxvx 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: stxvx 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: lxvx vs0, 0, r3
|
|
; CHECK-P9-NEXT: addis r3, r2, GlobSt11@toc@ha
|
|
; CHECK-P9-NEXT: addi r3, r3, GlobSt11@toc@l
|
|
; CHECK-P9-NEXT: stxvx 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: lxvx 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: stxvx 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: lxvx vs0, 0, r3
|
|
; CHECK-P9-NEXT: addis r3, r2, GlobSt12@toc@ha
|
|
; CHECK-P9-NEXT: addi r3, r3, GlobSt12@toc@l
|
|
; CHECK-P9-NEXT: stxvx 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
|
|
}
|