Files
clang-p2996/llvm/test/CodeGen/PowerPC/pcrel_ldst.ll
Quinn Pham 335e8bf100 [PowerPC] emit VSX instructions instead of VMX instructions for vector loads and stores
This patch changes the PowerPC backend to generate VSX load/store instructions
for all vector loads/stores on Power8 and earlier  (LE) instead of VMX
load/store instructions. The reason for this change is because VMX instructions
require the vector to be 16-byte aligned. So, a vector load/store will fail with
VMX instructions if the vector is misaligned. Also, `gcc` generates VSX
instructions in this situation which allow for unaligned access but require a
swap instruction after loading/before storing. This is not an issue for BE
because we already emit VSX instructions since no swap is required. And this is
not an issue on Power9 and up since we have access to `lxv[x]`/`stxv[x]` which
allow for unaligned access and do not require swaps.

This patch also delays the VSX load/store for LE combines until after
LegalizeOps to prioritize other load/store combines.

Reviewed By: #powerpc, stefanp

Differential Revision: https://reviews.llvm.org/D127309
2022-06-15 12:06:04 -05:00

2587 lines
102 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefix=CHECK-P10-LE
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefix=CHECK-P10-BE
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P8,CHECK-P8-LE
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P8,CHECK-P8-BE
@GlobLd1 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
@GlobSt1 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
@GlobLd2 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
@GlobSt2 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
@GlobLd3 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
@GlobSt3 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
@GlobLd4 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
@GlobSt4 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
@GlobLd5 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
@GlobSt5 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
@GlobLd6 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
@GlobSt6 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
@GlobLd7 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
@GlobSt7 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
@GlobLd8 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
@GlobSt8 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
@GlobLd9 = dso_local local_unnamed_addr global [20 x float] zeroinitializer, align 4
@GlobSt9 = dso_local local_unnamed_addr global [20 x float] zeroinitializer, align 4
@GlobLd10 = dso_local local_unnamed_addr global [20 x double] zeroinitializer, align 8
@GlobSt10 = dso_local local_unnamed_addr global [20 x double] zeroinitializer, align 8
@GlobLd11 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
@GlobSt11 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
@GlobLd12 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
@GlobSt12 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
@GlobF128 = dso_local local_unnamed_addr global [20 x fp128] zeroinitializer, align 16
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob1PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob1PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd1@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt1@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob1PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-P10-BE-NEXT: lbz r3, GlobLd1@toc@l(r3)
; CHECK-P10-BE-NEXT: stb r3, GlobSt1@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob1PtrPlus0:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-NEXT: lbz r3, GlobLd1@toc@l(r3)
; CHECK-NEXT: stb r3, GlobSt1@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load i8, 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: addis r4, r2, GlobSt7@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd7@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt7@toc@l
; CHECK-P10-BE-NEXT: pld r3, 3(r3), 0
; CHECK-P10-BE-NEXT: pstd r3, 3(r4), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob7PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-NEXT: li r4, 3
; CHECK-NEXT: addis r5, r2, GlobSt7@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd7@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt7@toc@l
; CHECK-NEXT: ldx r3, r3, r4
; CHECK-NEXT: stdx r3, r5, r4
; CHECK-NEXT: blr
entry:
%0 = load i64, 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: addis r4, r2, GlobSt8@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd8@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt8@toc@l
; CHECK-P10-BE-NEXT: pld r3, 3(r3), 0
; CHECK-P10-BE-NEXT: pstd r3, 3(r4), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob8PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd8@toc@ha
; CHECK-NEXT: li r4, 3
; CHECK-NEXT: addis r5, r2, GlobSt8@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd8@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt8@toc@l
; CHECK-NEXT: ldx r3, r3, r4
; CHECK-NEXT: stdx r3, r5, r4
; CHECK-NEXT: blr
entry:
%0 = load i64, 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: addis r4, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd10@toc@l
; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt10@toc@l
; CHECK-P10-BE-NEXT: pld r3, 3(r3), 0
; CHECK-P10-BE-NEXT: pstd r3, 3(r4), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob10PtrPlus3:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-NEXT: li r4, 3
; CHECK-NEXT: addis r5, r2, GlobSt10@toc@ha
; CHECK-NEXT: addi r3, r3, GlobLd10@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt10@toc@l
; CHECK-NEXT: ldx r3, r3, r4
; CHECK-NEXT: stdx r3, r5, r4
; CHECK-NEXT: blr
entry:
%0 = load double, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobLd10 to i8*), i64 3) to double*), align 8
store double %0, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobSt10 to i8*), i64 3) to double*), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob10PtrPlus4() {
; CHECK-P10-LE-LABEL: testGlob10PtrPlus4:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd10@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt10@PCREL+4(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob10PtrPlus4:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: ld r3, GlobLd10@toc@l+4(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt10@toc@l+4(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob10PtrPlus4:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P9-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P9-NEXT: ld r3, GlobLd10@toc@l+4(r3)
; CHECK-P9-NEXT: std r3, GlobSt10@toc@l+4(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob10PtrPlus4:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd10@toc@ha
; CHECK-P8-NEXT: ld r3, GlobLd10@toc@l+4(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt10@toc@ha
; CHECK-P8-NEXT: std r3, GlobSt10@toc@l+4(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load double, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobLd10 to i8*), i64 4) to double*), align 8
store double %0, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobSt10 to i8*), i64 4) to double*), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob10PtrPlus16() {
; CHECK-P10-LE-LABEL: testGlob10PtrPlus16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd10@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt10@PCREL+16(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob10PtrPlus16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd10@toc@ha+16
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt10@toc@ha+16
; CHECK-P10-BE-NEXT: ld r3, GlobLd10@toc@l+16(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt10@toc@l+16(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob10PtrPlus16:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd10@toc@ha+16
; CHECK-P9-NEXT: addis r4, r2, GlobSt10@toc@ha+16
; CHECK-P9-NEXT: ld r3, GlobLd10@toc@l+16(r3)
; CHECK-P9-NEXT: std r3, GlobSt10@toc@l+16(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: testGlob10PtrPlus16:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd10@toc@ha+16
; CHECK-P8-NEXT: ld r3, GlobLd10@toc@l+16(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt10@toc@ha+16
; CHECK-P8-NEXT: std r3, GlobSt10@toc@l+16(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load double, double* getelementptr inbounds ([20 x double], [20 x double]* @GlobLd10, i64 0, i64 2), align 8
store double %0, double* getelementptr inbounds ([20 x double], [20 x double]* @GlobSt10, i64 0, i64 2), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob10PtrPlusVar(i64 %Idx) {
; CHECK-P10-LE-LABEL: testGlob10PtrPlusVar:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: sldi r3, r3, 3
; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd10@PCREL, 1
; CHECK-P10-LE-NEXT: paddi r5, 0, GlobSt10@PCREL, 1
; CHECK-P10-LE-NEXT: ldx r4, r4, r3
; CHECK-P10-LE-NEXT: stdx r4, r5, r3
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob10PtrPlusVar:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd10@toc@ha
; CHECK-P10-BE-NEXT: sldi r3, r3, 3
; CHECK-P10-BE-NEXT: addis r5, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd10@toc@l
; CHECK-P10-BE-NEXT: addi r5, r5, GlobSt10@toc@l
; CHECK-P10-BE-NEXT: ldx r4, r4, r3
; CHECK-P10-BE-NEXT: stdx r4, r5, r3
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: testGlob10PtrPlusVar:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r4, r2, GlobLd10@toc@ha
; CHECK-NEXT: sldi r3, r3, 3
; CHECK-NEXT: addis r5, r2, GlobSt10@toc@ha
; CHECK-NEXT: addi r4, r4, GlobLd10@toc@l
; CHECK-NEXT: addi r5, r5, GlobSt10@toc@l
; CHECK-NEXT: ldx r4, r4, r3
; CHECK-NEXT: stdx r4, r5, r3
; CHECK-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x double], [20 x double]* @GlobLd10, i64 0, i64 %Idx
%0 = load double, double* %arrayidx, align 8
%arrayidx1 = getelementptr inbounds [20 x double], [20 x double]* @GlobSt10, i64 0, i64 %Idx
store double %0, double* %arrayidx1, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob11PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob11PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd11@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt11@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob11PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P10-BE-NEXT: lxv vs0, 0(r3)
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P10-BE-NEXT: stxv vs0, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob11PtrPlus0:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P9-NEXT: lxv vs0, 0(r3)
; CHECK-P9-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P9-NEXT: stxv vs0, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob11PtrPlus0:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlus0:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, 0, r3
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, 0, r3
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, <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: addi r3, r3, GlobLd11@toc@l
; CHECK-P10-BE-NEXT: plxv vs0, 3(r3), 0
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P10-BE-NEXT: pstxv vs0, 3(r3), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob11PtrPlus3:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P9-NEXT: li r4, 3
; CHECK-P9-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P9-NEXT: lxvx vs0, r3, r4
; CHECK-P9-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P9-NEXT: stxvx vs0, r3, r4
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob11PtrPlus3:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-LE-NEXT: li r4, 3
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlus3:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: li r4, 3
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, <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: addi r3, r3, GlobLd11@toc@l
; CHECK-P10-BE-NEXT: plxv vs0, 4(r3), 0
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P10-BE-NEXT: pstxv vs0, 4(r3), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob11PtrPlus4:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P9-NEXT: li r4, 4
; CHECK-P9-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P9-NEXT: lxvx vs0, r3, r4
; CHECK-P9-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P9-NEXT: stxvx vs0, r3, r4
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob11PtrPlus4:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-LE-NEXT: li r4, 4
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlus4:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: li r4, 4
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, <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: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlus16:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: li r4, 16
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, <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: lxvd2x vs0, r4, r3
; CHECK-P8-LE-NEXT: addis r4, r2, GlobSt11@toc@ha
; CHECK-P8-LE-NEXT: addi r4, r4, GlobSt11@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r4, r3
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob11PtrPlusVar:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r4, r2, GlobLd11@toc@ha
; CHECK-P8-BE-NEXT: sldi r3, r3, 4
; CHECK-P8-BE-NEXT: addi r4, r4, GlobLd11@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r4, r3
; CHECK-P8-BE-NEXT: addis r4, r2, GlobSt11@toc@ha
; CHECK-P8-BE-NEXT: addi r4, r4, GlobSt11@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r4, r3
; CHECK-P8-BE-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd11, i64 0, i64 %Idx
%0 = load <16 x i8>, <16 x i8>* %arrayidx, align 16
%arrayidx1 = getelementptr inbounds [20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt11, i64 0, i64 %Idx
store <16 x i8> %0, <16 x i8>* %arrayidx1, align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @testGlob12PtrPlus0() {
; CHECK-P10-LE-LABEL: testGlob12PtrPlus0:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plxv vs0, GlobLd12@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt12@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: testGlob12PtrPlus0:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P10-BE-NEXT: lxv vs0, 0(r3)
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P10-BE-NEXT: stxv vs0, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob12PtrPlus0:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P9-NEXT: lxv vs0, 0(r3)
; CHECK-P9-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P9-NEXT: stxv vs0, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob12PtrPlus0:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, 0, r3
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, 0, r3
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlus0:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, 0, r3
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, 0, r3
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, <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: addi r3, r3, GlobLd12@toc@l
; CHECK-P10-BE-NEXT: plxv vs0, 3(r3), 0
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P10-BE-NEXT: pstxv vs0, 3(r3), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob12PtrPlus3:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P9-NEXT: li r4, 3
; CHECK-P9-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P9-NEXT: lxvx vs0, r3, r4
; CHECK-P9-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P9-NEXT: stxvx vs0, r3, r4
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob12PtrPlus3:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-LE-NEXT: li r4, 3
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlus3:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: li r4, 3
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, <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: addi r3, r3, GlobLd12@toc@l
; CHECK-P10-BE-NEXT: plxv vs0, 4(r3), 0
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P10-BE-NEXT: pstxv vs0, 4(r3), 0
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: testGlob12PtrPlus4:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P9-NEXT: li r4, 4
; CHECK-P9-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P9-NEXT: lxvx vs0, r3, r4
; CHECK-P9-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P9-NEXT: stxvx vs0, r3, r4
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: testGlob12PtrPlus4:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-LE-NEXT: li r4, 4
; CHECK-P8-LE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-LE-NEXT: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlus4:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: li r4, 4
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, <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: lxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r3, r4
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlus16:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r3, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: li r4, 16
; CHECK-P8-BE-NEXT: addi r3, r3, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: addis r3, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r3, r3, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r3, r4
; CHECK-P8-BE-NEXT: blr
entry:
%0 = load <16 x i8>, <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: lxvd2x vs0, r4, r3
; CHECK-P8-LE-NEXT: addis r4, r2, GlobSt12@toc@ha
; CHECK-P8-LE-NEXT: addi r4, r4, GlobSt12@toc@l
; CHECK-P8-LE-NEXT: stxvd2x vs0, r4, r3
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: testGlob12PtrPlusVar:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: addis r4, r2, GlobLd12@toc@ha
; CHECK-P8-BE-NEXT: sldi r3, r3, 4
; CHECK-P8-BE-NEXT: addi r4, r4, GlobLd12@toc@l
; CHECK-P8-BE-NEXT: lxvw4x vs0, r4, r3
; CHECK-P8-BE-NEXT: addis r4, r2, GlobSt12@toc@ha
; CHECK-P8-BE-NEXT: addi r4, r4, GlobSt12@toc@l
; CHECK-P8-BE-NEXT: stxvw4x vs0, r4, r3
; CHECK-P8-BE-NEXT: blr
entry:
%arrayidx = getelementptr inbounds [20 x <16 x i8>], [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
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @Atomic_LdSt_i8() {
; CHECK-P10-LE-LABEL: Atomic_LdSt_i8:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plbz r3, GlobLd1@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstb r3, GlobSt1@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: Atomic_LdSt_i8:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-P10-BE-NEXT: lbz r3, GlobLd1@toc@l(r3)
; CHECK-P10-BE-NEXT: stb r3, GlobSt1@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: Atomic_LdSt_i8:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd1@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt1@toc@ha
; CHECK-NEXT: lbz r3, GlobLd1@toc@l(r3)
; CHECK-NEXT: stb r3, GlobSt1@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load atomic i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 0) monotonic, align 1
store atomic i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt1, i64 0, i64 0) monotonic, align 1
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @Atomic_LdSt_i16() {
; CHECK-P10-LE-LABEL: Atomic_LdSt_i16:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plhz r3, GlobLd3@PCREL(0), 1
; CHECK-P10-LE-NEXT: psth r3, GlobSt3@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: Atomic_LdSt_i16:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd3@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt3@toc@ha
; CHECK-P10-BE-NEXT: lhz r3, GlobLd3@toc@l(r3)
; CHECK-P10-BE-NEXT: sth r3, GlobSt3@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: Atomic_LdSt_i16:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd3@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt3@toc@ha
; CHECK-NEXT: lhz r3, GlobLd3@toc@l(r3)
; CHECK-NEXT: sth r3, GlobSt3@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load atomic i16, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd3, i64 0, i64 0) monotonic, align 2
store atomic i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobSt3, i64 0, i64 0) monotonic, align 2
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @Atomic_LdSt_i32() {
; CHECK-P10-LE-LABEL: Atomic_LdSt_i32:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: plwz r3, GlobLd5@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstw r3, GlobSt5@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: Atomic_LdSt_i32:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd5@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt5@toc@ha
; CHECK-P10-BE-NEXT: lwz r3, GlobLd5@toc@l(r3)
; CHECK-P10-BE-NEXT: stw r3, GlobSt5@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-LABEL: Atomic_LdSt_i32:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: addis r3, r2, GlobLd5@toc@ha
; CHECK-NEXT: addis r4, r2, GlobSt5@toc@ha
; CHECK-NEXT: lwz r3, GlobLd5@toc@l(r3)
; CHECK-NEXT: stw r3, GlobSt5@toc@l(r4)
; CHECK-NEXT: blr
entry:
%0 = load atomic i32, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd5, i64 0, i64 0) monotonic, align 4
store atomic i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobSt5, i64 0, i64 0) monotonic, align 4
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn
define dso_local void @Atomic_LdSt_i64() {
; CHECK-P10-LE-LABEL: Atomic_LdSt_i64:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: pld r3, GlobLd7@PCREL(0), 1
; CHECK-P10-LE-NEXT: pstd r3, GlobSt7@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: Atomic_LdSt_i64:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P10-BE-NEXT: ld r3, GlobLd7@toc@l(r3)
; CHECK-P10-BE-NEXT: std r3, GlobSt7@toc@l(r4)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: Atomic_LdSt_i64:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P9-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P9-NEXT: ld r3, GlobLd7@toc@l(r3)
; CHECK-P9-NEXT: std r3, GlobSt7@toc@l(r4)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: Atomic_LdSt_i64:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: addis r3, r2, GlobLd7@toc@ha
; CHECK-P8-NEXT: ld r3, GlobLd7@toc@l(r3)
; CHECK-P8-NEXT: addis r4, r2, GlobSt7@toc@ha
; CHECK-P8-NEXT: std r3, GlobSt7@toc@l(r4)
; CHECK-P8-NEXT: blr
entry:
%0 = load atomic i64, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobLd7, i64 0, i64 0) monotonic, align 8
store atomic i64 %0, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobSt7, i64 0, i64 0) monotonic, align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
define dso_local void @store_double_f64_to_uint(double %str) local_unnamed_addr #0 {
; CHECK-P10-LE-LABEL: store_double_f64_to_uint:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: xscvdpuxds v2, f1
; CHECK-P10-LE-NEXT: pstxsd v2, GlobSt10@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: store_double_f64_to_uint:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: xscvdpuxds v2, f1
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P10-BE-NEXT: stxsd v2, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: store_double_f64_to_uint:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvdpuxds v2, f1
; CHECK-P9-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P9-NEXT: stxsd v2, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: store_double_f64_to_uint:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: xscvdpuxds f0, f1
; CHECK-P8-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P8-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P8-NEXT: stxsdx f0, 0, r3
; CHECK-P8-NEXT: blr
entry:
%conv = fptoui double %str to i64
store i64 %conv, i64* bitcast ([20 x double]* @GlobSt10 to i64*), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
define dso_local void @store_double_f64_to_sint(double %str) local_unnamed_addr #0 {
; CHECK-P10-LE-LABEL: store_double_f64_to_sint:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: xscvdpsxds v2, f1
; CHECK-P10-LE-NEXT: pstxsd v2, GlobSt10@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: store_double_f64_to_sint:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: xscvdpsxds v2, f1
; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P10-BE-NEXT: stxsd v2, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: store_double_f64_to_sint:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvdpsxds v2, f1
; CHECK-P9-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P9-NEXT: stxsd v2, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LABEL: store_double_f64_to_sint:
; CHECK-P8: # %bb.0: # %entry
; CHECK-P8-NEXT: xscvdpsxds f0, f1
; CHECK-P8-NEXT: addis r3, r2, GlobSt10@toc@ha
; CHECK-P8-NEXT: addi r3, r3, GlobSt10@toc@l
; CHECK-P8-NEXT: stxsdx f0, 0, r3
; CHECK-P8-NEXT: blr
entry:
%conv = fptosi double %str to i64
store i64 %conv, i64* bitcast ([20 x double]* @GlobSt10 to i64*), align 8
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
define dso_local void @store_f128_to_uint(fp128 %str) local_unnamed_addr #0 {
; CHECK-P10-LE-LABEL: store_f128_to_uint:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: xscvqpudz v2, v2
; CHECK-P10-LE-NEXT: pstxsd v2, GlobF128@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: store_f128_to_uint:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: xscvqpudz v2, v2
; CHECK-P10-BE-NEXT: addis r3, r2, GlobF128@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobF128@toc@l
; CHECK-P10-BE-NEXT: stxsd v2, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: store_f128_to_uint:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvqpudz v2, v2
; CHECK-P9-NEXT: addis r3, r2, GlobF128@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobF128@toc@l
; CHECK-P9-NEXT: stxsd v2, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: store_f128_to_uint:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: mflr r0
; CHECK-P8-LE-NEXT: std r0, 16(r1)
; CHECK-P8-LE-NEXT: stdu r1, -32(r1)
; CHECK-P8-LE-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-LE-NEXT: .cfi_offset lr, 16
; CHECK-P8-LE-NEXT: bl __fixunskfdi
; CHECK-P8-LE-NEXT: nop
; CHECK-P8-LE-NEXT: addis r4, r2, GlobF128@toc@ha
; CHECK-P8-LE-NEXT: std r3, GlobF128@toc@l(r4)
; CHECK-P8-LE-NEXT: addi r1, r1, 32
; CHECK-P8-LE-NEXT: ld r0, 16(r1)
; CHECK-P8-LE-NEXT: mtlr r0
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: store_f128_to_uint:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: mflr r0
; CHECK-P8-BE-NEXT: std r0, 16(r1)
; CHECK-P8-BE-NEXT: stdu r1, -112(r1)
; CHECK-P8-BE-NEXT: .cfi_def_cfa_offset 112
; CHECK-P8-BE-NEXT: .cfi_offset lr, 16
; CHECK-P8-BE-NEXT: bl __fixunskfdi
; CHECK-P8-BE-NEXT: nop
; CHECK-P8-BE-NEXT: addis r4, r2, GlobF128@toc@ha
; CHECK-P8-BE-NEXT: std r3, GlobF128@toc@l(r4)
; CHECK-P8-BE-NEXT: addi r1, r1, 112
; CHECK-P8-BE-NEXT: ld r0, 16(r1)
; CHECK-P8-BE-NEXT: mtlr r0
; CHECK-P8-BE-NEXT: blr
entry:
%conv = fptoui fp128 %str to i64
store i64 %conv, i64* bitcast ([20 x fp128]* @GlobF128 to i64*), align 16
ret void
}
; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
define dso_local void @store_f128_to_sint(fp128 %str) local_unnamed_addr #0 {
; CHECK-P10-LE-LABEL: store_f128_to_sint:
; CHECK-P10-LE: # %bb.0: # %entry
; CHECK-P10-LE-NEXT: xscvqpsdz v2, v2
; CHECK-P10-LE-NEXT: pstxsd v2, GlobF128@PCREL(0), 1
; CHECK-P10-LE-NEXT: blr
;
; CHECK-P10-BE-LABEL: store_f128_to_sint:
; CHECK-P10-BE: # %bb.0: # %entry
; CHECK-P10-BE-NEXT: xscvqpsdz v2, v2
; CHECK-P10-BE-NEXT: addis r3, r2, GlobF128@toc@ha
; CHECK-P10-BE-NEXT: addi r3, r3, GlobF128@toc@l
; CHECK-P10-BE-NEXT: stxsd v2, 0(r3)
; CHECK-P10-BE-NEXT: blr
;
; CHECK-P9-LABEL: store_f128_to_sint:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvqpsdz v2, v2
; CHECK-P9-NEXT: addis r3, r2, GlobF128@toc@ha
; CHECK-P9-NEXT: addi r3, r3, GlobF128@toc@l
; CHECK-P9-NEXT: stxsd v2, 0(r3)
; CHECK-P9-NEXT: blr
;
; CHECK-P8-LE-LABEL: store_f128_to_sint:
; CHECK-P8-LE: # %bb.0: # %entry
; CHECK-P8-LE-NEXT: mflr r0
; CHECK-P8-LE-NEXT: std r0, 16(r1)
; CHECK-P8-LE-NEXT: stdu r1, -32(r1)
; CHECK-P8-LE-NEXT: .cfi_def_cfa_offset 32
; CHECK-P8-LE-NEXT: .cfi_offset lr, 16
; CHECK-P8-LE-NEXT: bl __fixkfdi
; CHECK-P8-LE-NEXT: nop
; CHECK-P8-LE-NEXT: addis r4, r2, GlobF128@toc@ha
; CHECK-P8-LE-NEXT: std r3, GlobF128@toc@l(r4)
; CHECK-P8-LE-NEXT: addi r1, r1, 32
; CHECK-P8-LE-NEXT: ld r0, 16(r1)
; CHECK-P8-LE-NEXT: mtlr r0
; CHECK-P8-LE-NEXT: blr
;
; CHECK-P8-BE-LABEL: store_f128_to_sint:
; CHECK-P8-BE: # %bb.0: # %entry
; CHECK-P8-BE-NEXT: mflr r0
; CHECK-P8-BE-NEXT: std r0, 16(r1)
; CHECK-P8-BE-NEXT: stdu r1, -112(r1)
; CHECK-P8-BE-NEXT: .cfi_def_cfa_offset 112
; CHECK-P8-BE-NEXT: .cfi_offset lr, 16
; CHECK-P8-BE-NEXT: bl __fixkfdi
; CHECK-P8-BE-NEXT: nop
; CHECK-P8-BE-NEXT: addis r4, r2, GlobF128@toc@ha
; CHECK-P8-BE-NEXT: std r3, GlobF128@toc@l(r4)
; CHECK-P8-BE-NEXT: addi r1, r1, 112
; CHECK-P8-BE-NEXT: ld r0, 16(r1)
; CHECK-P8-BE-NEXT: mtlr r0
; CHECK-P8-BE-NEXT: blr
entry:
%conv = fptosi fp128 %str to i64
store i64 %conv, i64* bitcast ([20 x fp128]* @GlobF128 to i64*), align 16
ret void
}