; 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 }