1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
3; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
4; RUN:   < %s | FileCheck %s --check-prefix=CHECK-P10-LE
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
6; RUN:   -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
7; RUN:   < %s | FileCheck %s --check-prefix=CHECK-P10-BE
8; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
9; RUN:   -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
10; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9
11; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
12; RUN:   -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
13; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P9
14; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
15; RUN:   -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
16; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P8,CHECK-P8-LE
17; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
18; RUN:   -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \
19; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P8,CHECK-P8-BE
20
21@GlobLd1 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
22@GlobSt1 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
23@GlobLd2 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
24@GlobSt2 = dso_local local_unnamed_addr global [20 x i8] zeroinitializer, align 1
25@GlobLd3 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
26@GlobSt3 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
27@GlobLd4 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
28@GlobSt4 = dso_local local_unnamed_addr global [20 x i16] zeroinitializer, align 2
29@GlobLd5 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
30@GlobSt5 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
31@GlobLd6 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
32@GlobSt6 = dso_local local_unnamed_addr global [20 x i32] zeroinitializer, align 4
33@GlobLd7 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
34@GlobSt7 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
35@GlobLd8 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
36@GlobSt8 = dso_local local_unnamed_addr global [20 x i64] zeroinitializer, align 8
37@GlobLd9 = dso_local local_unnamed_addr global [20 x float] zeroinitializer, align 4
38@GlobSt9 = dso_local local_unnamed_addr global [20 x float] zeroinitializer, align 4
39@GlobLd10 = dso_local local_unnamed_addr global [20 x double] zeroinitializer, align 8
40@GlobSt10 = dso_local local_unnamed_addr global [20 x double] zeroinitializer, align 8
41@GlobLd11 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
42@GlobSt11 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
43@GlobLd12 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
44@GlobSt12 = dso_local local_unnamed_addr global [20 x <16 x i8>] zeroinitializer, align 16
45
46; Function Attrs: nofree norecurse nounwind uwtable willreturn
47define dso_local void @testGlob1PtrPlus0() {
48; CHECK-P10-LE-LABEL: testGlob1PtrPlus0:
49; CHECK-P10-LE:       # %bb.0: # %entry
50; CHECK-P10-LE-NEXT:    plbz r3, GlobLd1@PCREL(0), 1
51; CHECK-P10-LE-NEXT:    pstb r3, GlobSt1@PCREL(0), 1
52; CHECK-P10-LE-NEXT:    blr
53;
54; CHECK-P10-BE-LABEL: testGlob1PtrPlus0:
55; CHECK-P10-BE:       # %bb.0: # %entry
56; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd1@toc@ha
57; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt1@toc@ha
58; CHECK-P10-BE-NEXT:    lbz r3, GlobLd1@toc@l(r3)
59; CHECK-P10-BE-NEXT:    stb r3, GlobSt1@toc@l(r4)
60; CHECK-P10-BE-NEXT:    blr
61;
62; CHECK-LABEL: testGlob1PtrPlus0:
63; CHECK:       # %bb.0: # %entry
64; CHECK-NEXT:    addis r3, r2, GlobLd1@toc@ha
65; CHECK-NEXT:    addis r4, r2, GlobSt1@toc@ha
66; CHECK-NEXT:    lbz r3, GlobLd1@toc@l(r3)
67; CHECK-NEXT:    stb r3, GlobSt1@toc@l(r4)
68; CHECK-NEXT:    blr
69entry:
70  %0 = load i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 0), align 1
71  store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt1, i64 0, i64 0), align 1
72  ret void
73}
74
75; Function Attrs: nofree norecurse nounwind uwtable willreturn
76define dso_local void @testGlob1PtrPlus3() {
77; CHECK-P10-LE-LABEL: testGlob1PtrPlus3:
78; CHECK-P10-LE:       # %bb.0: # %entry
79; CHECK-P10-LE-NEXT:    plbz r3, GlobLd1@PCREL+3(0), 1
80; CHECK-P10-LE-NEXT:    pstb r3, GlobSt1@PCREL+3(0), 1
81; CHECK-P10-LE-NEXT:    blr
82;
83; CHECK-P10-BE-LABEL: testGlob1PtrPlus3:
84; CHECK-P10-BE:       # %bb.0: # %entry
85; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd1@toc@ha
86; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt1@toc@ha
87; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd1@toc@l
88; CHECK-P10-BE-NEXT:    addi r4, r4, GlobSt1@toc@l
89; CHECK-P10-BE-NEXT:    lbz r3, 3(r3)
90; CHECK-P10-BE-NEXT:    stb r3, 3(r4)
91; CHECK-P10-BE-NEXT:    blr
92;
93; CHECK-LABEL: testGlob1PtrPlus3:
94; CHECK:       # %bb.0: # %entry
95; CHECK-NEXT:    addis r3, r2, GlobLd1@toc@ha
96; CHECK-NEXT:    addis r4, r2, GlobSt1@toc@ha
97; CHECK-NEXT:    addi r3, r3, GlobLd1@toc@l
98; CHECK-NEXT:    addi r4, r4, GlobSt1@toc@l
99; CHECK-NEXT:    lbz r3, 3(r3)
100; CHECK-NEXT:    stb r3, 3(r4)
101; CHECK-NEXT:    blr
102entry:
103  %0 = load i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 3), align 1
104  store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt1, i64 0, i64 3), align 1
105  ret void
106}
107
108; Function Attrs: nofree norecurse nounwind uwtable willreturn
109define dso_local void @testGlob1PtrPlus4() {
110; CHECK-P10-LE-LABEL: testGlob1PtrPlus4:
111; CHECK-P10-LE:       # %bb.0: # %entry
112; CHECK-P10-LE-NEXT:    plbz r3, GlobLd1@PCREL+4(0), 1
113; CHECK-P10-LE-NEXT:    pstb r3, GlobSt1@PCREL+4(0), 1
114; CHECK-P10-LE-NEXT:    blr
115;
116; CHECK-P10-BE-LABEL: testGlob1PtrPlus4:
117; CHECK-P10-BE:       # %bb.0: # %entry
118; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd1@toc@ha+4
119; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt1@toc@ha+4
120; CHECK-P10-BE-NEXT:    lbz r3, GlobLd1@toc@l+4(r3)
121; CHECK-P10-BE-NEXT:    stb r3, GlobSt1@toc@l+4(r4)
122; CHECK-P10-BE-NEXT:    blr
123;
124; CHECK-LABEL: testGlob1PtrPlus4:
125; CHECK:       # %bb.0: # %entry
126; CHECK-NEXT:    addis r3, r2, GlobLd1@toc@ha+4
127; CHECK-NEXT:    addis r4, r2, GlobSt1@toc@ha+4
128; CHECK-NEXT:    lbz r3, GlobLd1@toc@l+4(r3)
129; CHECK-NEXT:    stb r3, GlobSt1@toc@l+4(r4)
130; CHECK-NEXT:    blr
131entry:
132  %0 = load i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 4), align 1
133  store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt1, i64 0, i64 4), align 1
134  ret void
135}
136
137; Function Attrs: nofree norecurse nounwind uwtable willreturn
138define dso_local void @testGlob1PtrPlus16() {
139; CHECK-P10-LE-LABEL: testGlob1PtrPlus16:
140; CHECK-P10-LE:       # %bb.0: # %entry
141; CHECK-P10-LE-NEXT:    plbz r3, GlobLd1@PCREL+16(0), 1
142; CHECK-P10-LE-NEXT:    pstb r3, GlobSt1@PCREL+16(0), 1
143; CHECK-P10-LE-NEXT:    blr
144;
145; CHECK-P10-BE-LABEL: testGlob1PtrPlus16:
146; CHECK-P10-BE:       # %bb.0: # %entry
147; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd1@toc@ha+16
148; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt1@toc@ha+16
149; CHECK-P10-BE-NEXT:    lbz r3, GlobLd1@toc@l+16(r3)
150; CHECK-P10-BE-NEXT:    stb r3, GlobSt1@toc@l+16(r4)
151; CHECK-P10-BE-NEXT:    blr
152;
153; CHECK-LABEL: testGlob1PtrPlus16:
154; CHECK:       # %bb.0: # %entry
155; CHECK-NEXT:    addis r3, r2, GlobLd1@toc@ha+16
156; CHECK-NEXT:    addis r4, r2, GlobSt1@toc@ha+16
157; CHECK-NEXT:    lbz r3, GlobLd1@toc@l+16(r3)
158; CHECK-NEXT:    stb r3, GlobSt1@toc@l+16(r4)
159; CHECK-NEXT:    blr
160entry:
161  %0 = load i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 16), align 1
162  store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt1, i64 0, i64 16), align 1
163  ret void
164}
165
166; Function Attrs: nofree norecurse nounwind uwtable willreturn
167define dso_local void @testGlob1PtrPlusVar(i64 %Idx) {
168; CHECK-P10-LE-LABEL: testGlob1PtrPlusVar:
169; CHECK-P10-LE:       # %bb.0: # %entry
170; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd1@PCREL, 1
171; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt1@PCREL, 1
172; CHECK-P10-LE-NEXT:    lbzx r4, r4, r3
173; CHECK-P10-LE-NEXT:    stbx r4, r5, r3
174; CHECK-P10-LE-NEXT:    blr
175;
176; CHECK-P10-BE-LABEL: testGlob1PtrPlusVar:
177; CHECK-P10-BE:       # %bb.0: # %entry
178; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd1@toc@ha
179; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt1@toc@ha
180; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd1@toc@l
181; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt1@toc@l
182; CHECK-P10-BE-NEXT:    lbzx r4, r4, r3
183; CHECK-P10-BE-NEXT:    stbx r4, r5, r3
184; CHECK-P10-BE-NEXT:    blr
185;
186; CHECK-LABEL: testGlob1PtrPlusVar:
187; CHECK:       # %bb.0: # %entry
188; CHECK-NEXT:    addis r4, r2, GlobLd1@toc@ha
189; CHECK-NEXT:    addis r5, r2, GlobSt1@toc@ha
190; CHECK-NEXT:    addi r4, r4, GlobLd1@toc@l
191; CHECK-NEXT:    addi r5, r5, GlobSt1@toc@l
192; CHECK-NEXT:    lbzx r4, r4, r3
193; CHECK-NEXT:    stbx r4, r5, r3
194; CHECK-NEXT:    blr
195entry:
196  %arrayidx = getelementptr inbounds [20 x i8], [20 x i8]* @GlobLd1, i64 0, i64 %Idx
197  %0 = load i8, i8* %arrayidx, align 1
198  %arrayidx1 = getelementptr inbounds [20 x i8], [20 x i8]* @GlobSt1, i64 0, i64 %Idx
199  store i8 %0, i8* %arrayidx1, align 1
200  ret void
201}
202
203; Function Attrs: nofree norecurse nounwind uwtable willreturn
204define dso_local void @testGlob2PtrPlus0() {
205; CHECK-P10-LE-LABEL: testGlob2PtrPlus0:
206; CHECK-P10-LE:       # %bb.0: # %entry
207; CHECK-P10-LE-NEXT:    plbz r3, GlobLd2@PCREL(0), 1
208; CHECK-P10-LE-NEXT:    pstb r3, GlobSt2@PCREL(0), 1
209; CHECK-P10-LE-NEXT:    blr
210;
211; CHECK-P10-BE-LABEL: testGlob2PtrPlus0:
212; CHECK-P10-BE:       # %bb.0: # %entry
213; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd2@toc@ha
214; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt2@toc@ha
215; CHECK-P10-BE-NEXT:    lbz r3, GlobLd2@toc@l(r3)
216; CHECK-P10-BE-NEXT:    stb r3, GlobSt2@toc@l(r4)
217; CHECK-P10-BE-NEXT:    blr
218;
219; CHECK-LABEL: testGlob2PtrPlus0:
220; CHECK:       # %bb.0: # %entry
221; CHECK-NEXT:    addis r3, r2, GlobLd2@toc@ha
222; CHECK-NEXT:    addis r4, r2, GlobSt2@toc@ha
223; CHECK-NEXT:    lbz r3, GlobLd2@toc@l(r3)
224; CHECK-NEXT:    stb r3, GlobSt2@toc@l(r4)
225; CHECK-NEXT:    blr
226entry:
227  %0 = load i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd2, i64 0, i64 0), align 1
228  store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt2, i64 0, i64 0), align 1
229  ret void
230}
231
232; Function Attrs: nofree norecurse nounwind uwtable willreturn
233define dso_local void @testGlob2PtrPlus3() {
234; CHECK-P10-LE-LABEL: testGlob2PtrPlus3:
235; CHECK-P10-LE:       # %bb.0: # %entry
236; CHECK-P10-LE-NEXT:    plbz r3, GlobLd2@PCREL+3(0), 1
237; CHECK-P10-LE-NEXT:    pstb r3, GlobSt2@PCREL+3(0), 1
238; CHECK-P10-LE-NEXT:    blr
239;
240; CHECK-P10-BE-LABEL: testGlob2PtrPlus3:
241; CHECK-P10-BE:       # %bb.0: # %entry
242; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd2@toc@ha
243; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt2@toc@ha
244; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd2@toc@l
245; CHECK-P10-BE-NEXT:    addi r4, r4, GlobSt2@toc@l
246; CHECK-P10-BE-NEXT:    lbz r3, 3(r3)
247; CHECK-P10-BE-NEXT:    stb r3, 3(r4)
248; CHECK-P10-BE-NEXT:    blr
249;
250; CHECK-LABEL: testGlob2PtrPlus3:
251; CHECK:       # %bb.0: # %entry
252; CHECK-NEXT:    addis r3, r2, GlobLd2@toc@ha
253; CHECK-NEXT:    addis r4, r2, GlobSt2@toc@ha
254; CHECK-NEXT:    addi r3, r3, GlobLd2@toc@l
255; CHECK-NEXT:    addi r4, r4, GlobSt2@toc@l
256; CHECK-NEXT:    lbz r3, 3(r3)
257; CHECK-NEXT:    stb r3, 3(r4)
258; CHECK-NEXT:    blr
259entry:
260  %0 = load i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd2, i64 0, i64 3), align 1
261  store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt2, i64 0, i64 3), align 1
262  ret void
263}
264
265; Function Attrs: nofree norecurse nounwind uwtable willreturn
266define dso_local void @testGlob2PtrPlus4() {
267; CHECK-P10-LE-LABEL: testGlob2PtrPlus4:
268; CHECK-P10-LE:       # %bb.0: # %entry
269; CHECK-P10-LE-NEXT:    plbz r3, GlobLd2@PCREL+4(0), 1
270; CHECK-P10-LE-NEXT:    pstb r3, GlobSt2@PCREL+4(0), 1
271; CHECK-P10-LE-NEXT:    blr
272;
273; CHECK-P10-BE-LABEL: testGlob2PtrPlus4:
274; CHECK-P10-BE:       # %bb.0: # %entry
275; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd2@toc@ha+4
276; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt2@toc@ha+4
277; CHECK-P10-BE-NEXT:    lbz r3, GlobLd2@toc@l+4(r3)
278; CHECK-P10-BE-NEXT:    stb r3, GlobSt2@toc@l+4(r4)
279; CHECK-P10-BE-NEXT:    blr
280;
281; CHECK-LABEL: testGlob2PtrPlus4:
282; CHECK:       # %bb.0: # %entry
283; CHECK-NEXT:    addis r3, r2, GlobLd2@toc@ha+4
284; CHECK-NEXT:    addis r4, r2, GlobSt2@toc@ha+4
285; CHECK-NEXT:    lbz r3, GlobLd2@toc@l+4(r3)
286; CHECK-NEXT:    stb r3, GlobSt2@toc@l+4(r4)
287; CHECK-NEXT:    blr
288entry:
289  %0 = load i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd2, i64 0, i64 4), align 1
290  store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt2, i64 0, i64 4), align 1
291  ret void
292}
293
294; Function Attrs: nofree norecurse nounwind uwtable willreturn
295define dso_local void @testGlob2PtrPlus16() {
296; CHECK-P10-LE-LABEL: testGlob2PtrPlus16:
297; CHECK-P10-LE:       # %bb.0: # %entry
298; CHECK-P10-LE-NEXT:    plbz r3, GlobLd2@PCREL+16(0), 1
299; CHECK-P10-LE-NEXT:    pstb r3, GlobSt2@PCREL+16(0), 1
300; CHECK-P10-LE-NEXT:    blr
301;
302; CHECK-P10-BE-LABEL: testGlob2PtrPlus16:
303; CHECK-P10-BE:       # %bb.0: # %entry
304; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd2@toc@ha+16
305; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt2@toc@ha+16
306; CHECK-P10-BE-NEXT:    lbz r3, GlobLd2@toc@l+16(r3)
307; CHECK-P10-BE-NEXT:    stb r3, GlobSt2@toc@l+16(r4)
308; CHECK-P10-BE-NEXT:    blr
309;
310; CHECK-LABEL: testGlob2PtrPlus16:
311; CHECK:       # %bb.0: # %entry
312; CHECK-NEXT:    addis r3, r2, GlobLd2@toc@ha+16
313; CHECK-NEXT:    addis r4, r2, GlobSt2@toc@ha+16
314; CHECK-NEXT:    lbz r3, GlobLd2@toc@l+16(r3)
315; CHECK-NEXT:    stb r3, GlobSt2@toc@l+16(r4)
316; CHECK-NEXT:    blr
317entry:
318  %0 = load i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobLd2, i64 0, i64 16), align 1
319  store i8 %0, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @GlobSt2, i64 0, i64 16), align 1
320  ret void
321}
322
323; Function Attrs: nofree norecurse nounwind uwtable willreturn
324define dso_local void @testGlob2PtrPlusVar(i64 %Idx) {
325; CHECK-P10-LE-LABEL: testGlob2PtrPlusVar:
326; CHECK-P10-LE:       # %bb.0: # %entry
327; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd2@PCREL, 1
328; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt2@PCREL, 1
329; CHECK-P10-LE-NEXT:    lbzx r4, r4, r3
330; CHECK-P10-LE-NEXT:    stbx r4, r5, r3
331; CHECK-P10-LE-NEXT:    blr
332;
333; CHECK-P10-BE-LABEL: testGlob2PtrPlusVar:
334; CHECK-P10-BE:       # %bb.0: # %entry
335; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd2@toc@ha
336; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt2@toc@ha
337; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd2@toc@l
338; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt2@toc@l
339; CHECK-P10-BE-NEXT:    lbzx r4, r4, r3
340; CHECK-P10-BE-NEXT:    stbx r4, r5, r3
341; CHECK-P10-BE-NEXT:    blr
342;
343; CHECK-LABEL: testGlob2PtrPlusVar:
344; CHECK:       # %bb.0: # %entry
345; CHECK-NEXT:    addis r4, r2, GlobLd2@toc@ha
346; CHECK-NEXT:    addis r5, r2, GlobSt2@toc@ha
347; CHECK-NEXT:    addi r4, r4, GlobLd2@toc@l
348; CHECK-NEXT:    addi r5, r5, GlobSt2@toc@l
349; CHECK-NEXT:    lbzx r4, r4, r3
350; CHECK-NEXT:    stbx r4, r5, r3
351; CHECK-NEXT:    blr
352entry:
353  %arrayidx = getelementptr inbounds [20 x i8], [20 x i8]* @GlobLd2, i64 0, i64 %Idx
354  %0 = load i8, i8* %arrayidx, align 1
355  %arrayidx1 = getelementptr inbounds [20 x i8], [20 x i8]* @GlobSt2, i64 0, i64 %Idx
356  store i8 %0, i8* %arrayidx1, align 1
357  ret void
358}
359
360; Function Attrs: nofree norecurse nounwind uwtable willreturn
361define dso_local void @testGlob3PtrPlus0() {
362; CHECK-P10-LE-LABEL: testGlob3PtrPlus0:
363; CHECK-P10-LE:       # %bb.0: # %entry
364; CHECK-P10-LE-NEXT:    plhz r3, GlobLd3@PCREL(0), 1
365; CHECK-P10-LE-NEXT:    psth r3, GlobSt3@PCREL(0), 1
366; CHECK-P10-LE-NEXT:    blr
367;
368; CHECK-P10-BE-LABEL: testGlob3PtrPlus0:
369; CHECK-P10-BE:       # %bb.0: # %entry
370; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd3@toc@ha
371; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt3@toc@ha
372; CHECK-P10-BE-NEXT:    lhz r3, GlobLd3@toc@l(r3)
373; CHECK-P10-BE-NEXT:    sth r3, GlobSt3@toc@l(r4)
374; CHECK-P10-BE-NEXT:    blr
375;
376; CHECK-LABEL: testGlob3PtrPlus0:
377; CHECK:       # %bb.0: # %entry
378; CHECK-NEXT:    addis r3, r2, GlobLd3@toc@ha
379; CHECK-NEXT:    addis r4, r2, GlobSt3@toc@ha
380; CHECK-NEXT:    lhz r3, GlobLd3@toc@l(r3)
381; CHECK-NEXT:    sth r3, GlobSt3@toc@l(r4)
382; CHECK-NEXT:    blr
383entry:
384  %0 = load i16, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd3, i64 0, i64 0), align 2
385  store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobSt3, i64 0, i64 0), align 2
386  ret void
387}
388
389; Function Attrs: nofree norecurse nounwind uwtable willreturn
390define dso_local void @testGlob3PtrPlus3() {
391; CHECK-P10-LE-LABEL: testGlob3PtrPlus3:
392; CHECK-P10-LE:       # %bb.0: # %entry
393; CHECK-P10-LE-NEXT:    plhz r3, GlobLd3@PCREL+3(0), 1
394; CHECK-P10-LE-NEXT:    psth r3, GlobSt3@PCREL+3(0), 1
395; CHECK-P10-LE-NEXT:    blr
396;
397; CHECK-P10-BE-LABEL: testGlob3PtrPlus3:
398; CHECK-P10-BE:       # %bb.0: # %entry
399; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd3@toc@ha
400; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt3@toc@ha
401; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd3@toc@l
402; CHECK-P10-BE-NEXT:    addi r4, r4, GlobSt3@toc@l
403; CHECK-P10-BE-NEXT:    lhz r3, 3(r3)
404; CHECK-P10-BE-NEXT:    sth r3, 3(r4)
405; CHECK-P10-BE-NEXT:    blr
406;
407; CHECK-LABEL: testGlob3PtrPlus3:
408; CHECK:       # %bb.0: # %entry
409; CHECK-NEXT:    addis r3, r2, GlobLd3@toc@ha
410; CHECK-NEXT:    addis r4, r2, GlobSt3@toc@ha
411; CHECK-NEXT:    addi r3, r3, GlobLd3@toc@l
412; CHECK-NEXT:    addi r4, r4, GlobSt3@toc@l
413; CHECK-NEXT:    lhz r3, 3(r3)
414; CHECK-NEXT:    sth r3, 3(r4)
415; CHECK-NEXT:    blr
416entry:
417  %0 = load i16, i16* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i16]* @GlobLd3 to i8*), i64 3) to i16*), align 2
418  store i16 %0, i16* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i16]* @GlobSt3 to i8*), i64 3) to i16*), align 2
419  ret void
420}
421
422; Function Attrs: nofree norecurse nounwind uwtable willreturn
423define dso_local void @testGlob3PtrPlus4() {
424; CHECK-P10-LE-LABEL: testGlob3PtrPlus4:
425; CHECK-P10-LE:       # %bb.0: # %entry
426; CHECK-P10-LE-NEXT:    plhz r3, GlobLd3@PCREL+4(0), 1
427; CHECK-P10-LE-NEXT:    psth r3, GlobSt3@PCREL+4(0), 1
428; CHECK-P10-LE-NEXT:    blr
429;
430; CHECK-P10-BE-LABEL: testGlob3PtrPlus4:
431; CHECK-P10-BE:       # %bb.0: # %entry
432; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd3@toc@ha+4
433; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt3@toc@ha+4
434; CHECK-P10-BE-NEXT:    lhz r3, GlobLd3@toc@l+4(r3)
435; CHECK-P10-BE-NEXT:    sth r3, GlobSt3@toc@l+4(r4)
436; CHECK-P10-BE-NEXT:    blr
437;
438; CHECK-LABEL: testGlob3PtrPlus4:
439; CHECK:       # %bb.0: # %entry
440; CHECK-NEXT:    addis r3, r2, GlobLd3@toc@ha+4
441; CHECK-NEXT:    addis r4, r2, GlobSt3@toc@ha+4
442; CHECK-NEXT:    lhz r3, GlobLd3@toc@l+4(r3)
443; CHECK-NEXT:    sth r3, GlobSt3@toc@l+4(r4)
444; CHECK-NEXT:    blr
445entry:
446  %0 = load i16, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd3, i64 0, i64 2), align 2
447  store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobSt3, i64 0, i64 2), align 2
448  ret void
449}
450
451; Function Attrs: nofree norecurse nounwind uwtable willreturn
452define dso_local void @testGlob3PtrPlus16() {
453; CHECK-P10-LE-LABEL: testGlob3PtrPlus16:
454; CHECK-P10-LE:       # %bb.0: # %entry
455; CHECK-P10-LE-NEXT:    plhz r3, GlobLd3@PCREL+16(0), 1
456; CHECK-P10-LE-NEXT:    psth r3, GlobSt3@PCREL+16(0), 1
457; CHECK-P10-LE-NEXT:    blr
458;
459; CHECK-P10-BE-LABEL: testGlob3PtrPlus16:
460; CHECK-P10-BE:       # %bb.0: # %entry
461; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd3@toc@ha+16
462; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt3@toc@ha+16
463; CHECK-P10-BE-NEXT:    lhz r3, GlobLd3@toc@l+16(r3)
464; CHECK-P10-BE-NEXT:    sth r3, GlobSt3@toc@l+16(r4)
465; CHECK-P10-BE-NEXT:    blr
466;
467; CHECK-LABEL: testGlob3PtrPlus16:
468; CHECK:       # %bb.0: # %entry
469; CHECK-NEXT:    addis r3, r2, GlobLd3@toc@ha+16
470; CHECK-NEXT:    addis r4, r2, GlobSt3@toc@ha+16
471; CHECK-NEXT:    lhz r3, GlobLd3@toc@l+16(r3)
472; CHECK-NEXT:    sth r3, GlobSt3@toc@l+16(r4)
473; CHECK-NEXT:    blr
474entry:
475  %0 = load i16, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd3, i64 0, i64 8), align 2
476  store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobSt3, i64 0, i64 8), align 2
477  ret void
478}
479
480; Function Attrs: nofree norecurse nounwind uwtable willreturn
481define dso_local void @testGlob3PtrPlusVar(i64 %Idx) {
482; CHECK-P10-LE-LABEL: testGlob3PtrPlusVar:
483; CHECK-P10-LE:       # %bb.0: # %entry
484; CHECK-P10-LE-NEXT:    sldi r3, r3, 1
485; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd3@PCREL, 1
486; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt3@PCREL, 1
487; CHECK-P10-LE-NEXT:    lhzx r4, r4, r3
488; CHECK-P10-LE-NEXT:    sthx r4, r5, r3
489; CHECK-P10-LE-NEXT:    blr
490;
491; CHECK-P10-BE-LABEL: testGlob3PtrPlusVar:
492; CHECK-P10-BE:       # %bb.0: # %entry
493; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd3@toc@ha
494; CHECK-P10-BE-NEXT:    sldi r3, r3, 1
495; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt3@toc@ha
496; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd3@toc@l
497; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt3@toc@l
498; CHECK-P10-BE-NEXT:    lhzx r4, r4, r3
499; CHECK-P10-BE-NEXT:    sthx r4, r5, r3
500; CHECK-P10-BE-NEXT:    blr
501;
502; CHECK-LABEL: testGlob3PtrPlusVar:
503; CHECK:       # %bb.0: # %entry
504; CHECK-NEXT:    addis r4, r2, GlobLd3@toc@ha
505; CHECK-NEXT:    sldi r3, r3, 1
506; CHECK-NEXT:    addis r5, r2, GlobSt3@toc@ha
507; CHECK-NEXT:    addi r4, r4, GlobLd3@toc@l
508; CHECK-NEXT:    addi r5, r5, GlobSt3@toc@l
509; CHECK-NEXT:    lhzx r4, r4, r3
510; CHECK-NEXT:    sthx r4, r5, r3
511; CHECK-NEXT:    blr
512entry:
513  %arrayidx = getelementptr inbounds [20 x i16], [20 x i16]* @GlobLd3, i64 0, i64 %Idx
514  %0 = load i16, i16* %arrayidx, align 2
515  %arrayidx1 = getelementptr inbounds [20 x i16], [20 x i16]* @GlobSt3, i64 0, i64 %Idx
516  store i16 %0, i16* %arrayidx1, align 2
517  ret void
518}
519
520; Function Attrs: nofree norecurse nounwind uwtable willreturn
521define dso_local void @testGlob4PtrPlus0() {
522; CHECK-P10-LE-LABEL: testGlob4PtrPlus0:
523; CHECK-P10-LE:       # %bb.0: # %entry
524; CHECK-P10-LE-NEXT:    plhz r3, GlobLd4@PCREL(0), 1
525; CHECK-P10-LE-NEXT:    psth r3, GlobSt4@PCREL(0), 1
526; CHECK-P10-LE-NEXT:    blr
527;
528; CHECK-P10-BE-LABEL: testGlob4PtrPlus0:
529; CHECK-P10-BE:       # %bb.0: # %entry
530; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd4@toc@ha
531; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt4@toc@ha
532; CHECK-P10-BE-NEXT:    lhz r3, GlobLd4@toc@l(r3)
533; CHECK-P10-BE-NEXT:    sth r3, GlobSt4@toc@l(r4)
534; CHECK-P10-BE-NEXT:    blr
535;
536; CHECK-LABEL: testGlob4PtrPlus0:
537; CHECK:       # %bb.0: # %entry
538; CHECK-NEXT:    addis r3, r2, GlobLd4@toc@ha
539; CHECK-NEXT:    addis r4, r2, GlobSt4@toc@ha
540; CHECK-NEXT:    lhz r3, GlobLd4@toc@l(r3)
541; CHECK-NEXT:    sth r3, GlobSt4@toc@l(r4)
542; CHECK-NEXT:    blr
543entry:
544  %0 = load i16, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd4, i64 0, i64 0), align 2
545  store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobSt4, i64 0, i64 0), align 2
546  ret void
547}
548
549; Function Attrs: nofree norecurse nounwind uwtable willreturn
550define dso_local void @testGlob4PtrPlus3() {
551; CHECK-P10-LE-LABEL: testGlob4PtrPlus3:
552; CHECK-P10-LE:       # %bb.0: # %entry
553; CHECK-P10-LE-NEXT:    plhz r3, GlobLd4@PCREL+3(0), 1
554; CHECK-P10-LE-NEXT:    psth r3, GlobSt4@PCREL+3(0), 1
555; CHECK-P10-LE-NEXT:    blr
556;
557; CHECK-P10-BE-LABEL: testGlob4PtrPlus3:
558; CHECK-P10-BE:       # %bb.0: # %entry
559; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd4@toc@ha
560; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt4@toc@ha
561; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd4@toc@l
562; CHECK-P10-BE-NEXT:    addi r4, r4, GlobSt4@toc@l
563; CHECK-P10-BE-NEXT:    lhz r3, 3(r3)
564; CHECK-P10-BE-NEXT:    sth r3, 3(r4)
565; CHECK-P10-BE-NEXT:    blr
566;
567; CHECK-LABEL: testGlob4PtrPlus3:
568; CHECK:       # %bb.0: # %entry
569; CHECK-NEXT:    addis r3, r2, GlobLd4@toc@ha
570; CHECK-NEXT:    addis r4, r2, GlobSt4@toc@ha
571; CHECK-NEXT:    addi r3, r3, GlobLd4@toc@l
572; CHECK-NEXT:    addi r4, r4, GlobSt4@toc@l
573; CHECK-NEXT:    lhz r3, 3(r3)
574; CHECK-NEXT:    sth r3, 3(r4)
575; CHECK-NEXT:    blr
576entry:
577  %0 = load i16, i16* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i16]* @GlobLd4 to i8*), i64 3) to i16*), align 2
578  store i16 %0, i16* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i16]* @GlobSt4 to i8*), i64 3) to i16*), align 2
579  ret void
580}
581
582; Function Attrs: nofree norecurse nounwind uwtable willreturn
583define dso_local void @testGlob4PtrPlus4() {
584; CHECK-P10-LE-LABEL: testGlob4PtrPlus4:
585; CHECK-P10-LE:       # %bb.0: # %entry
586; CHECK-P10-LE-NEXT:    plhz r3, GlobLd4@PCREL+4(0), 1
587; CHECK-P10-LE-NEXT:    psth r3, GlobSt4@PCREL+4(0), 1
588; CHECK-P10-LE-NEXT:    blr
589;
590; CHECK-P10-BE-LABEL: testGlob4PtrPlus4:
591; CHECK-P10-BE:       # %bb.0: # %entry
592; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd4@toc@ha+4
593; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt4@toc@ha+4
594; CHECK-P10-BE-NEXT:    lhz r3, GlobLd4@toc@l+4(r3)
595; CHECK-P10-BE-NEXT:    sth r3, GlobSt4@toc@l+4(r4)
596; CHECK-P10-BE-NEXT:    blr
597;
598; CHECK-LABEL: testGlob4PtrPlus4:
599; CHECK:       # %bb.0: # %entry
600; CHECK-NEXT:    addis r3, r2, GlobLd4@toc@ha+4
601; CHECK-NEXT:    addis r4, r2, GlobSt4@toc@ha+4
602; CHECK-NEXT:    lhz r3, GlobLd4@toc@l+4(r3)
603; CHECK-NEXT:    sth r3, GlobSt4@toc@l+4(r4)
604; CHECK-NEXT:    blr
605entry:
606  %0 = load i16, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd4, i64 0, i64 2), align 2
607  store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobSt4, i64 0, i64 2), align 2
608  ret void
609}
610
611; Function Attrs: nofree norecurse nounwind uwtable willreturn
612define dso_local void @testGlob4PtrPlus16() {
613; CHECK-P10-LE-LABEL: testGlob4PtrPlus16:
614; CHECK-P10-LE:       # %bb.0: # %entry
615; CHECK-P10-LE-NEXT:    plhz r3, GlobLd4@PCREL+16(0), 1
616; CHECK-P10-LE-NEXT:    psth r3, GlobSt4@PCREL+16(0), 1
617; CHECK-P10-LE-NEXT:    blr
618;
619; CHECK-P10-BE-LABEL: testGlob4PtrPlus16:
620; CHECK-P10-BE:       # %bb.0: # %entry
621; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd4@toc@ha+16
622; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt4@toc@ha+16
623; CHECK-P10-BE-NEXT:    lhz r3, GlobLd4@toc@l+16(r3)
624; CHECK-P10-BE-NEXT:    sth r3, GlobSt4@toc@l+16(r4)
625; CHECK-P10-BE-NEXT:    blr
626;
627; CHECK-LABEL: testGlob4PtrPlus16:
628; CHECK:       # %bb.0: # %entry
629; CHECK-NEXT:    addis r3, r2, GlobLd4@toc@ha+16
630; CHECK-NEXT:    addis r4, r2, GlobSt4@toc@ha+16
631; CHECK-NEXT:    lhz r3, GlobLd4@toc@l+16(r3)
632; CHECK-NEXT:    sth r3, GlobSt4@toc@l+16(r4)
633; CHECK-NEXT:    blr
634entry:
635  %0 = load i16, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobLd4, i64 0, i64 8), align 2
636  store i16 %0, i16* getelementptr inbounds ([20 x i16], [20 x i16]* @GlobSt4, i64 0, i64 8), align 2
637  ret void
638}
639
640; Function Attrs: nofree norecurse nounwind uwtable willreturn
641define dso_local void @testGlob4PtrPlusVar(i64 %Idx) {
642; CHECK-P10-LE-LABEL: testGlob4PtrPlusVar:
643; CHECK-P10-LE:       # %bb.0: # %entry
644; CHECK-P10-LE-NEXT:    sldi r3, r3, 1
645; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd4@PCREL, 1
646; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt4@PCREL, 1
647; CHECK-P10-LE-NEXT:    lhzx r4, r4, r3
648; CHECK-P10-LE-NEXT:    sthx r4, r5, r3
649; CHECK-P10-LE-NEXT:    blr
650;
651; CHECK-P10-BE-LABEL: testGlob4PtrPlusVar:
652; CHECK-P10-BE:       # %bb.0: # %entry
653; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd4@toc@ha
654; CHECK-P10-BE-NEXT:    sldi r3, r3, 1
655; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt4@toc@ha
656; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd4@toc@l
657; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt4@toc@l
658; CHECK-P10-BE-NEXT:    lhzx r4, r4, r3
659; CHECK-P10-BE-NEXT:    sthx r4, r5, r3
660; CHECK-P10-BE-NEXT:    blr
661;
662; CHECK-LABEL: testGlob4PtrPlusVar:
663; CHECK:       # %bb.0: # %entry
664; CHECK-NEXT:    addis r4, r2, GlobLd4@toc@ha
665; CHECK-NEXT:    sldi r3, r3, 1
666; CHECK-NEXT:    addis r5, r2, GlobSt4@toc@ha
667; CHECK-NEXT:    addi r4, r4, GlobLd4@toc@l
668; CHECK-NEXT:    addi r5, r5, GlobSt4@toc@l
669; CHECK-NEXT:    lhzx r4, r4, r3
670; CHECK-NEXT:    sthx r4, r5, r3
671; CHECK-NEXT:    blr
672entry:
673  %arrayidx = getelementptr inbounds [20 x i16], [20 x i16]* @GlobLd4, i64 0, i64 %Idx
674  %0 = load i16, i16* %arrayidx, align 2
675  %arrayidx1 = getelementptr inbounds [20 x i16], [20 x i16]* @GlobSt4, i64 0, i64 %Idx
676  store i16 %0, i16* %arrayidx1, align 2
677  ret void
678}
679
680; Function Attrs: nofree norecurse nounwind uwtable willreturn
681define dso_local void @testGlob5PtrPlus0() {
682; CHECK-P10-LE-LABEL: testGlob5PtrPlus0:
683; CHECK-P10-LE:       # %bb.0: # %entry
684; CHECK-P10-LE-NEXT:    plwz r3, GlobLd5@PCREL(0), 1
685; CHECK-P10-LE-NEXT:    pstw r3, GlobSt5@PCREL(0), 1
686; CHECK-P10-LE-NEXT:    blr
687;
688; CHECK-P10-BE-LABEL: testGlob5PtrPlus0:
689; CHECK-P10-BE:       # %bb.0: # %entry
690; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd5@toc@ha
691; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt5@toc@ha
692; CHECK-P10-BE-NEXT:    lwz r3, GlobLd5@toc@l(r3)
693; CHECK-P10-BE-NEXT:    stw r3, GlobSt5@toc@l(r4)
694; CHECK-P10-BE-NEXT:    blr
695;
696; CHECK-LABEL: testGlob5PtrPlus0:
697; CHECK:       # %bb.0: # %entry
698; CHECK-NEXT:    addis r3, r2, GlobLd5@toc@ha
699; CHECK-NEXT:    addis r4, r2, GlobSt5@toc@ha
700; CHECK-NEXT:    lwz r3, GlobLd5@toc@l(r3)
701; CHECK-NEXT:    stw r3, GlobSt5@toc@l(r4)
702; CHECK-NEXT:    blr
703entry:
704  %0 = load i32, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd5, i64 0, i64 0), align 4
705  store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobSt5, i64 0, i64 0), align 4
706  ret void
707}
708
709; Function Attrs: nofree norecurse nounwind uwtable willreturn
710define dso_local void @testGlob5PtrPlus3() {
711; CHECK-P10-LE-LABEL: testGlob5PtrPlus3:
712; CHECK-P10-LE:       # %bb.0: # %entry
713; CHECK-P10-LE-NEXT:    plwz r3, GlobLd5@PCREL+3(0), 1
714; CHECK-P10-LE-NEXT:    pstw r3, GlobSt5@PCREL+3(0), 1
715; CHECK-P10-LE-NEXT:    blr
716;
717; CHECK-P10-BE-LABEL: testGlob5PtrPlus3:
718; CHECK-P10-BE:       # %bb.0: # %entry
719; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd5@toc@ha
720; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt5@toc@ha
721; CHECK-P10-BE-NEXT:    lwz r3, GlobLd5@toc@l+3(r3)
722; CHECK-P10-BE-NEXT:    stw r3, GlobSt5@toc@l+3(r4)
723; CHECK-P10-BE-NEXT:    blr
724;
725; CHECK-LABEL: testGlob5PtrPlus3:
726; CHECK:       # %bb.0: # %entry
727; CHECK-NEXT:    addis r3, r2, GlobLd5@toc@ha
728; CHECK-NEXT:    addis r4, r2, GlobSt5@toc@ha
729; CHECK-NEXT:    lwz r3, GlobLd5@toc@l+3(r3)
730; CHECK-NEXT:    stw r3, GlobSt5@toc@l+3(r4)
731; CHECK-NEXT:    blr
732entry:
733  %0 = load i32, i32* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i32]* @GlobLd5 to i8*), i64 3) to i32*), align 4
734  store i32 %0, i32* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i32]* @GlobSt5 to i8*), i64 3) to i32*), align 4
735  ret void
736}
737
738; Function Attrs: nofree norecurse nounwind uwtable willreturn
739define dso_local void @testGlob5PtrPlus4() {
740; CHECK-P10-LE-LABEL: testGlob5PtrPlus4:
741; CHECK-P10-LE:       # %bb.0: # %entry
742; CHECK-P10-LE-NEXT:    plwz r3, GlobLd5@PCREL+4(0), 1
743; CHECK-P10-LE-NEXT:    pstw r3, GlobSt5@PCREL+4(0), 1
744; CHECK-P10-LE-NEXT:    blr
745;
746; CHECK-P10-BE-LABEL: testGlob5PtrPlus4:
747; CHECK-P10-BE:       # %bb.0: # %entry
748; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd5@toc@ha+4
749; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt5@toc@ha+4
750; CHECK-P10-BE-NEXT:    lwz r3, GlobLd5@toc@l+4(r3)
751; CHECK-P10-BE-NEXT:    stw r3, GlobSt5@toc@l+4(r4)
752; CHECK-P10-BE-NEXT:    blr
753;
754; CHECK-LABEL: testGlob5PtrPlus4:
755; CHECK:       # %bb.0: # %entry
756; CHECK-NEXT:    addis r3, r2, GlobLd5@toc@ha+4
757; CHECK-NEXT:    addis r4, r2, GlobSt5@toc@ha+4
758; CHECK-NEXT:    lwz r3, GlobLd5@toc@l+4(r3)
759; CHECK-NEXT:    stw r3, GlobSt5@toc@l+4(r4)
760; CHECK-NEXT:    blr
761entry:
762  %0 = load i32, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd5, i64 0, i64 1), align 4
763  store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobSt5, i64 0, i64 1), align 4
764  ret void
765}
766
767; Function Attrs: nofree norecurse nounwind uwtable willreturn
768define dso_local void @testGlob5PtrPlus16() {
769; CHECK-P10-LE-LABEL: testGlob5PtrPlus16:
770; CHECK-P10-LE:       # %bb.0: # %entry
771; CHECK-P10-LE-NEXT:    plwz r3, GlobLd5@PCREL+16(0), 1
772; CHECK-P10-LE-NEXT:    pstw r3, GlobSt5@PCREL+16(0), 1
773; CHECK-P10-LE-NEXT:    blr
774;
775; CHECK-P10-BE-LABEL: testGlob5PtrPlus16:
776; CHECK-P10-BE:       # %bb.0: # %entry
777; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd5@toc@ha+16
778; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt5@toc@ha+16
779; CHECK-P10-BE-NEXT:    lwz r3, GlobLd5@toc@l+16(r3)
780; CHECK-P10-BE-NEXT:    stw r3, GlobSt5@toc@l+16(r4)
781; CHECK-P10-BE-NEXT:    blr
782;
783; CHECK-LABEL: testGlob5PtrPlus16:
784; CHECK:       # %bb.0: # %entry
785; CHECK-NEXT:    addis r3, r2, GlobLd5@toc@ha+16
786; CHECK-NEXT:    addis r4, r2, GlobSt5@toc@ha+16
787; CHECK-NEXT:    lwz r3, GlobLd5@toc@l+16(r3)
788; CHECK-NEXT:    stw r3, GlobSt5@toc@l+16(r4)
789; CHECK-NEXT:    blr
790entry:
791  %0 = load i32, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd5, i64 0, i64 4), align 4
792  store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobSt5, i64 0, i64 4), align 4
793  ret void
794}
795
796; Function Attrs: nofree norecurse nounwind uwtable willreturn
797define dso_local void @testGlob5PtrPlusVar(i64 %Idx) {
798; CHECK-P10-LE-LABEL: testGlob5PtrPlusVar:
799; CHECK-P10-LE:       # %bb.0: # %entry
800; CHECK-P10-LE-NEXT:    sldi r3, r3, 2
801; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd5@PCREL, 1
802; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt5@PCREL, 1
803; CHECK-P10-LE-NEXT:    lwzx r4, r4, r3
804; CHECK-P10-LE-NEXT:    stwx r4, r5, r3
805; CHECK-P10-LE-NEXT:    blr
806;
807; CHECK-P10-BE-LABEL: testGlob5PtrPlusVar:
808; CHECK-P10-BE:       # %bb.0: # %entry
809; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd5@toc@ha
810; CHECK-P10-BE-NEXT:    sldi r3, r3, 2
811; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt5@toc@ha
812; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd5@toc@l
813; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt5@toc@l
814; CHECK-P10-BE-NEXT:    lwzx r4, r4, r3
815; CHECK-P10-BE-NEXT:    stwx r4, r5, r3
816; CHECK-P10-BE-NEXT:    blr
817;
818; CHECK-LABEL: testGlob5PtrPlusVar:
819; CHECK:       # %bb.0: # %entry
820; CHECK-NEXT:    addis r4, r2, GlobLd5@toc@ha
821; CHECK-NEXT:    sldi r3, r3, 2
822; CHECK-NEXT:    addis r5, r2, GlobSt5@toc@ha
823; CHECK-NEXT:    addi r4, r4, GlobLd5@toc@l
824; CHECK-NEXT:    addi r5, r5, GlobSt5@toc@l
825; CHECK-NEXT:    lwzx r4, r4, r3
826; CHECK-NEXT:    stwx r4, r5, r3
827; CHECK-NEXT:    blr
828entry:
829  %arrayidx = getelementptr inbounds [20 x i32], [20 x i32]* @GlobLd5, i64 0, i64 %Idx
830  %0 = load i32, i32* %arrayidx, align 4
831  %arrayidx1 = getelementptr inbounds [20 x i32], [20 x i32]* @GlobSt5, i64 0, i64 %Idx
832  store i32 %0, i32* %arrayidx1, align 4
833  ret void
834}
835
836; Function Attrs: nofree norecurse nounwind uwtable willreturn
837define dso_local void @testGlob6PtrPlus0() {
838; CHECK-P10-LE-LABEL: testGlob6PtrPlus0:
839; CHECK-P10-LE:       # %bb.0: # %entry
840; CHECK-P10-LE-NEXT:    plwz r3, GlobLd6@PCREL(0), 1
841; CHECK-P10-LE-NEXT:    pstw r3, GlobSt6@PCREL(0), 1
842; CHECK-P10-LE-NEXT:    blr
843;
844; CHECK-P10-BE-LABEL: testGlob6PtrPlus0:
845; CHECK-P10-BE:       # %bb.0: # %entry
846; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd6@toc@ha
847; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt6@toc@ha
848; CHECK-P10-BE-NEXT:    lwz r3, GlobLd6@toc@l(r3)
849; CHECK-P10-BE-NEXT:    stw r3, GlobSt6@toc@l(r4)
850; CHECK-P10-BE-NEXT:    blr
851;
852; CHECK-LABEL: testGlob6PtrPlus0:
853; CHECK:       # %bb.0: # %entry
854; CHECK-NEXT:    addis r3, r2, GlobLd6@toc@ha
855; CHECK-NEXT:    addis r4, r2, GlobSt6@toc@ha
856; CHECK-NEXT:    lwz r3, GlobLd6@toc@l(r3)
857; CHECK-NEXT:    stw r3, GlobSt6@toc@l(r4)
858; CHECK-NEXT:    blr
859entry:
860  %0 = load i32, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd6, i64 0, i64 0), align 4
861  store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobSt6, i64 0, i64 0), align 4
862  ret void
863}
864
865; Function Attrs: nofree norecurse nounwind uwtable willreturn
866define dso_local void @testGlob6PtrPlus3() {
867; CHECK-P10-LE-LABEL: testGlob6PtrPlus3:
868; CHECK-P10-LE:       # %bb.0: # %entry
869; CHECK-P10-LE-NEXT:    plwz r3, GlobLd6@PCREL+3(0), 1
870; CHECK-P10-LE-NEXT:    pstw r3, GlobSt6@PCREL+3(0), 1
871; CHECK-P10-LE-NEXT:    blr
872;
873; CHECK-P10-BE-LABEL: testGlob6PtrPlus3:
874; CHECK-P10-BE:       # %bb.0: # %entry
875; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd6@toc@ha
876; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt6@toc@ha
877; CHECK-P10-BE-NEXT:    lwz r3, GlobLd6@toc@l+3(r3)
878; CHECK-P10-BE-NEXT:    stw r3, GlobSt6@toc@l+3(r4)
879; CHECK-P10-BE-NEXT:    blr
880;
881; CHECK-LABEL: testGlob6PtrPlus3:
882; CHECK:       # %bb.0: # %entry
883; CHECK-NEXT:    addis r3, r2, GlobLd6@toc@ha
884; CHECK-NEXT:    addis r4, r2, GlobSt6@toc@ha
885; CHECK-NEXT:    lwz r3, GlobLd6@toc@l+3(r3)
886; CHECK-NEXT:    stw r3, GlobSt6@toc@l+3(r4)
887; CHECK-NEXT:    blr
888entry:
889  %0 = load i32, i32* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i32]* @GlobLd6 to i8*), i64 3) to i32*), align 4
890  store i32 %0, i32* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i32]* @GlobSt6 to i8*), i64 3) to i32*), align 4
891  ret void
892}
893
894; Function Attrs: nofree norecurse nounwind uwtable willreturn
895define dso_local void @testGlob6PtrPlus4() {
896; CHECK-P10-LE-LABEL: testGlob6PtrPlus4:
897; CHECK-P10-LE:       # %bb.0: # %entry
898; CHECK-P10-LE-NEXT:    plwz r3, GlobLd6@PCREL+4(0), 1
899; CHECK-P10-LE-NEXT:    pstw r3, GlobSt6@PCREL+4(0), 1
900; CHECK-P10-LE-NEXT:    blr
901;
902; CHECK-P10-BE-LABEL: testGlob6PtrPlus4:
903; CHECK-P10-BE:       # %bb.0: # %entry
904; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd6@toc@ha+4
905; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt6@toc@ha+4
906; CHECK-P10-BE-NEXT:    lwz r3, GlobLd6@toc@l+4(r3)
907; CHECK-P10-BE-NEXT:    stw r3, GlobSt6@toc@l+4(r4)
908; CHECK-P10-BE-NEXT:    blr
909;
910; CHECK-LABEL: testGlob6PtrPlus4:
911; CHECK:       # %bb.0: # %entry
912; CHECK-NEXT:    addis r3, r2, GlobLd6@toc@ha+4
913; CHECK-NEXT:    addis r4, r2, GlobSt6@toc@ha+4
914; CHECK-NEXT:    lwz r3, GlobLd6@toc@l+4(r3)
915; CHECK-NEXT:    stw r3, GlobSt6@toc@l+4(r4)
916; CHECK-NEXT:    blr
917entry:
918  %0 = load i32, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd6, i64 0, i64 1), align 4
919  store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobSt6, i64 0, i64 1), align 4
920  ret void
921}
922
923; Function Attrs: nofree norecurse nounwind uwtable willreturn
924define dso_local void @testGlob6PtrPlus16() {
925; CHECK-P10-LE-LABEL: testGlob6PtrPlus16:
926; CHECK-P10-LE:       # %bb.0: # %entry
927; CHECK-P10-LE-NEXT:    plwz r3, GlobLd6@PCREL+16(0), 1
928; CHECK-P10-LE-NEXT:    pstw r3, GlobSt6@PCREL+16(0), 1
929; CHECK-P10-LE-NEXT:    blr
930;
931; CHECK-P10-BE-LABEL: testGlob6PtrPlus16:
932; CHECK-P10-BE:       # %bb.0: # %entry
933; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd6@toc@ha+16
934; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt6@toc@ha+16
935; CHECK-P10-BE-NEXT:    lwz r3, GlobLd6@toc@l+16(r3)
936; CHECK-P10-BE-NEXT:    stw r3, GlobSt6@toc@l+16(r4)
937; CHECK-P10-BE-NEXT:    blr
938;
939; CHECK-LABEL: testGlob6PtrPlus16:
940; CHECK:       # %bb.0: # %entry
941; CHECK-NEXT:    addis r3, r2, GlobLd6@toc@ha+16
942; CHECK-NEXT:    addis r4, r2, GlobSt6@toc@ha+16
943; CHECK-NEXT:    lwz r3, GlobLd6@toc@l+16(r3)
944; CHECK-NEXT:    stw r3, GlobSt6@toc@l+16(r4)
945; CHECK-NEXT:    blr
946entry:
947  %0 = load i32, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobLd6, i64 0, i64 4), align 4
948  store i32 %0, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @GlobSt6, i64 0, i64 4), align 4
949  ret void
950}
951
952; Function Attrs: nofree norecurse nounwind uwtable willreturn
953define dso_local void @testGlob6PtrPlusVar(i64 %Idx) {
954; CHECK-P10-LE-LABEL: testGlob6PtrPlusVar:
955; CHECK-P10-LE:       # %bb.0: # %entry
956; CHECK-P10-LE-NEXT:    sldi r3, r3, 2
957; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd6@PCREL, 1
958; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt6@PCREL, 1
959; CHECK-P10-LE-NEXT:    lwzx r4, r4, r3
960; CHECK-P10-LE-NEXT:    stwx r4, r5, r3
961; CHECK-P10-LE-NEXT:    blr
962;
963; CHECK-P10-BE-LABEL: testGlob6PtrPlusVar:
964; CHECK-P10-BE:       # %bb.0: # %entry
965; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd6@toc@ha
966; CHECK-P10-BE-NEXT:    sldi r3, r3, 2
967; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt6@toc@ha
968; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd6@toc@l
969; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt6@toc@l
970; CHECK-P10-BE-NEXT:    lwzx r4, r4, r3
971; CHECK-P10-BE-NEXT:    stwx r4, r5, r3
972; CHECK-P10-BE-NEXT:    blr
973;
974; CHECK-LABEL: testGlob6PtrPlusVar:
975; CHECK:       # %bb.0: # %entry
976; CHECK-NEXT:    addis r4, r2, GlobLd6@toc@ha
977; CHECK-NEXT:    sldi r3, r3, 2
978; CHECK-NEXT:    addis r5, r2, GlobSt6@toc@ha
979; CHECK-NEXT:    addi r4, r4, GlobLd6@toc@l
980; CHECK-NEXT:    addi r5, r5, GlobSt6@toc@l
981; CHECK-NEXT:    lwzx r4, r4, r3
982; CHECK-NEXT:    stwx r4, r5, r3
983; CHECK-NEXT:    blr
984entry:
985  %arrayidx = getelementptr inbounds [20 x i32], [20 x i32]* @GlobLd6, i64 0, i64 %Idx
986  %0 = load i32, i32* %arrayidx, align 4
987  %arrayidx1 = getelementptr inbounds [20 x i32], [20 x i32]* @GlobSt6, i64 0, i64 %Idx
988  store i32 %0, i32* %arrayidx1, align 4
989  ret void
990}
991
992; Function Attrs: nofree norecurse nounwind uwtable willreturn
993define dso_local void @testGlob7PtrPlus0() {
994; CHECK-P10-LE-LABEL: testGlob7PtrPlus0:
995; CHECK-P10-LE:       # %bb.0: # %entry
996; CHECK-P10-LE-NEXT:    pld r3, GlobLd7@PCREL(0), 1
997; CHECK-P10-LE-NEXT:    pstd r3, GlobSt7@PCREL(0), 1
998; CHECK-P10-LE-NEXT:    blr
999;
1000; CHECK-P10-BE-LABEL: testGlob7PtrPlus0:
1001; CHECK-P10-BE:       # %bb.0: # %entry
1002; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd7@toc@ha
1003; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt7@toc@ha
1004; CHECK-P10-BE-NEXT:    ld r3, GlobLd7@toc@l(r3)
1005; CHECK-P10-BE-NEXT:    std r3, GlobSt7@toc@l(r4)
1006; CHECK-P10-BE-NEXT:    blr
1007;
1008; CHECK-P9-LABEL: testGlob7PtrPlus0:
1009; CHECK-P9:       # %bb.0: # %entry
1010; CHECK-P9-NEXT:    addis r3, r2, GlobLd7@toc@ha
1011; CHECK-P9-NEXT:    addis r4, r2, GlobSt7@toc@ha
1012; CHECK-P9-NEXT:    ld r3, GlobLd7@toc@l(r3)
1013; CHECK-P9-NEXT:    std r3, GlobSt7@toc@l(r4)
1014; CHECK-P9-NEXT:    blr
1015;
1016; CHECK-P8-LABEL: testGlob7PtrPlus0:
1017; CHECK-P8:       # %bb.0: # %entry
1018; CHECK-P8-NEXT:    addis r3, r2, GlobLd7@toc@ha
1019; CHECK-P8-NEXT:    ld r3, GlobLd7@toc@l(r3)
1020; CHECK-P8-NEXT:    addis r4, r2, GlobSt7@toc@ha
1021; CHECK-P8-NEXT:    std r3, GlobSt7@toc@l(r4)
1022; CHECK-P8-NEXT:    blr
1023entry:
1024  %0 = load i64, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobLd7, i64 0, i64 0), align 8
1025  store i64 %0, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobSt7, i64 0, i64 0), align 8
1026  ret void
1027}
1028
1029; Function Attrs: nofree norecurse nounwind uwtable willreturn
1030define dso_local void @testGlob7PtrPlus3() {
1031; CHECK-P10-LE-LABEL: testGlob7PtrPlus3:
1032; CHECK-P10-LE:       # %bb.0: # %entry
1033; CHECK-P10-LE-NEXT:    pld r3, GlobLd7@PCREL+3(0), 1
1034; CHECK-P10-LE-NEXT:    pstd r3, GlobSt7@PCREL+3(0), 1
1035; CHECK-P10-LE-NEXT:    blr
1036;
1037; CHECK-P10-BE-LABEL: testGlob7PtrPlus3:
1038; CHECK-P10-BE:       # %bb.0: # %entry
1039; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd7@toc@ha
1040; CHECK-P10-BE-NEXT:    li r4, 3
1041; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt7@toc@ha
1042; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd7@toc@l
1043; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt7@toc@l
1044; CHECK-P10-BE-NEXT:    ldx r3, r3, r4
1045; CHECK-P10-BE-NEXT:    stdx r3, r5, r4
1046; CHECK-P10-BE-NEXT:    blr
1047;
1048; CHECK-LABEL: testGlob7PtrPlus3:
1049; CHECK:       # %bb.0: # %entry
1050; CHECK-NEXT:    addis r3, r2, GlobLd7@toc@ha
1051; CHECK-NEXT:    li r4, 3
1052; CHECK-NEXT:    addis r5, r2, GlobSt7@toc@ha
1053; CHECK-NEXT:    addi r3, r3, GlobLd7@toc@l
1054; CHECK-NEXT:    addi r5, r5, GlobSt7@toc@l
1055; CHECK-NEXT:    ldx r3, r3, r4
1056; CHECK-NEXT:    stdx r3, r5, r4
1057; CHECK-NEXT:    blr
1058entry:
1059  %0 = load i64, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobLd7 to i8*), i64 3) to i64*), align 8
1060  store i64 %0, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobSt7 to i8*), i64 3) to i64*), align 8
1061  ret void
1062}
1063
1064; Function Attrs: nofree norecurse nounwind uwtable willreturn
1065define dso_local void @testGlob7PtrPlus4() {
1066; CHECK-P10-LE-LABEL: testGlob7PtrPlus4:
1067; CHECK-P10-LE:       # %bb.0: # %entry
1068; CHECK-P10-LE-NEXT:    pld r3, GlobLd7@PCREL+4(0), 1
1069; CHECK-P10-LE-NEXT:    pstd r3, GlobSt7@PCREL+4(0), 1
1070; CHECK-P10-LE-NEXT:    blr
1071;
1072; CHECK-P10-BE-LABEL: testGlob7PtrPlus4:
1073; CHECK-P10-BE:       # %bb.0: # %entry
1074; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd7@toc@ha
1075; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt7@toc@ha
1076; CHECK-P10-BE-NEXT:    ld r3, GlobLd7@toc@l+4(r3)
1077; CHECK-P10-BE-NEXT:    std r3, GlobSt7@toc@l+4(r4)
1078; CHECK-P10-BE-NEXT:    blr
1079;
1080; CHECK-P9-LABEL: testGlob7PtrPlus4:
1081; CHECK-P9:       # %bb.0: # %entry
1082; CHECK-P9-NEXT:    addis r3, r2, GlobLd7@toc@ha
1083; CHECK-P9-NEXT:    addis r4, r2, GlobSt7@toc@ha
1084; CHECK-P9-NEXT:    ld r3, GlobLd7@toc@l+4(r3)
1085; CHECK-P9-NEXT:    std r3, GlobSt7@toc@l+4(r4)
1086; CHECK-P9-NEXT:    blr
1087;
1088; CHECK-P8-LABEL: testGlob7PtrPlus4:
1089; CHECK-P8:       # %bb.0: # %entry
1090; CHECK-P8-NEXT:    addis r3, r2, GlobLd7@toc@ha
1091; CHECK-P8-NEXT:    ld r3, GlobLd7@toc@l+4(r3)
1092; CHECK-P8-NEXT:    addis r4, r2, GlobSt7@toc@ha
1093; CHECK-P8-NEXT:    std r3, GlobSt7@toc@l+4(r4)
1094; CHECK-P8-NEXT:    blr
1095entry:
1096  %0 = load i64, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobLd7 to i8*), i64 4) to i64*), align 8
1097  store i64 %0, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobSt7 to i8*), i64 4) to i64*), align 8
1098  ret void
1099}
1100
1101; Function Attrs: nofree norecurse nounwind uwtable willreturn
1102define dso_local void @testGlob7PtrPlus16() {
1103; CHECK-P10-LE-LABEL: testGlob7PtrPlus16:
1104; CHECK-P10-LE:       # %bb.0: # %entry
1105; CHECK-P10-LE-NEXT:    pld r3, GlobLd7@PCREL+16(0), 1
1106; CHECK-P10-LE-NEXT:    pstd r3, GlobSt7@PCREL+16(0), 1
1107; CHECK-P10-LE-NEXT:    blr
1108;
1109; CHECK-P10-BE-LABEL: testGlob7PtrPlus16:
1110; CHECK-P10-BE:       # %bb.0: # %entry
1111; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd7@toc@ha+16
1112; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt7@toc@ha+16
1113; CHECK-P10-BE-NEXT:    ld r3, GlobLd7@toc@l+16(r3)
1114; CHECK-P10-BE-NEXT:    std r3, GlobSt7@toc@l+16(r4)
1115; CHECK-P10-BE-NEXT:    blr
1116;
1117; CHECK-P9-LABEL: testGlob7PtrPlus16:
1118; CHECK-P9:       # %bb.0: # %entry
1119; CHECK-P9-NEXT:    addis r3, r2, GlobLd7@toc@ha+16
1120; CHECK-P9-NEXT:    addis r4, r2, GlobSt7@toc@ha+16
1121; CHECK-P9-NEXT:    ld r3, GlobLd7@toc@l+16(r3)
1122; CHECK-P9-NEXT:    std r3, GlobSt7@toc@l+16(r4)
1123; CHECK-P9-NEXT:    blr
1124;
1125; CHECK-P8-LABEL: testGlob7PtrPlus16:
1126; CHECK-P8:       # %bb.0: # %entry
1127; CHECK-P8-NEXT:    addis r3, r2, GlobLd7@toc@ha+16
1128; CHECK-P8-NEXT:    ld r3, GlobLd7@toc@l+16(r3)
1129; CHECK-P8-NEXT:    addis r4, r2, GlobSt7@toc@ha+16
1130; CHECK-P8-NEXT:    std r3, GlobSt7@toc@l+16(r4)
1131; CHECK-P8-NEXT:    blr
1132entry:
1133  %0 = load i64, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobLd7, i64 0, i64 2), align 8
1134  store i64 %0, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobSt7, i64 0, i64 2), align 8
1135  ret void
1136}
1137
1138; Function Attrs: nofree norecurse nounwind uwtable willreturn
1139define dso_local void @testGlob7PtrPlusVar(i64 %Idx) {
1140; CHECK-P10-LE-LABEL: testGlob7PtrPlusVar:
1141; CHECK-P10-LE:       # %bb.0: # %entry
1142; CHECK-P10-LE-NEXT:    sldi r3, r3, 3
1143; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd7@PCREL, 1
1144; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt7@PCREL, 1
1145; CHECK-P10-LE-NEXT:    ldx r4, r4, r3
1146; CHECK-P10-LE-NEXT:    stdx r4, r5, r3
1147; CHECK-P10-LE-NEXT:    blr
1148;
1149; CHECK-P10-BE-LABEL: testGlob7PtrPlusVar:
1150; CHECK-P10-BE:       # %bb.0: # %entry
1151; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd7@toc@ha
1152; CHECK-P10-BE-NEXT:    sldi r3, r3, 3
1153; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt7@toc@ha
1154; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd7@toc@l
1155; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt7@toc@l
1156; CHECK-P10-BE-NEXT:    ldx r4, r4, r3
1157; CHECK-P10-BE-NEXT:    stdx r4, r5, r3
1158; CHECK-P10-BE-NEXT:    blr
1159;
1160; CHECK-LABEL: testGlob7PtrPlusVar:
1161; CHECK:       # %bb.0: # %entry
1162; CHECK-NEXT:    addis r4, r2, GlobLd7@toc@ha
1163; CHECK-NEXT:    sldi r3, r3, 3
1164; CHECK-NEXT:    addis r5, r2, GlobSt7@toc@ha
1165; CHECK-NEXT:    addi r4, r4, GlobLd7@toc@l
1166; CHECK-NEXT:    addi r5, r5, GlobSt7@toc@l
1167; CHECK-NEXT:    ldx r4, r4, r3
1168; CHECK-NEXT:    stdx r4, r5, r3
1169; CHECK-NEXT:    blr
1170entry:
1171  %arrayidx = getelementptr inbounds [20 x i64], [20 x i64]* @GlobLd7, i64 0, i64 %Idx
1172  %0 = load i64, i64* %arrayidx, align 8
1173  %arrayidx1 = getelementptr inbounds [20 x i64], [20 x i64]* @GlobSt7, i64 0, i64 %Idx
1174  store i64 %0, i64* %arrayidx1, align 8
1175  ret void
1176}
1177
1178; Function Attrs: nofree norecurse nounwind uwtable willreturn
1179define dso_local void @testGlob8PtrPlus0() {
1180; CHECK-P10-LE-LABEL: testGlob8PtrPlus0:
1181; CHECK-P10-LE:       # %bb.0: # %entry
1182; CHECK-P10-LE-NEXT:    pld r3, GlobLd8@PCREL(0), 1
1183; CHECK-P10-LE-NEXT:    pstd r3, GlobSt8@PCREL(0), 1
1184; CHECK-P10-LE-NEXT:    blr
1185;
1186; CHECK-P10-BE-LABEL: testGlob8PtrPlus0:
1187; CHECK-P10-BE:       # %bb.0: # %entry
1188; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd8@toc@ha
1189; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt8@toc@ha
1190; CHECK-P10-BE-NEXT:    ld r3, GlobLd8@toc@l(r3)
1191; CHECK-P10-BE-NEXT:    std r3, GlobSt8@toc@l(r4)
1192; CHECK-P10-BE-NEXT:    blr
1193;
1194; CHECK-P9-LABEL: testGlob8PtrPlus0:
1195; CHECK-P9:       # %bb.0: # %entry
1196; CHECK-P9-NEXT:    addis r3, r2, GlobLd8@toc@ha
1197; CHECK-P9-NEXT:    addis r4, r2, GlobSt8@toc@ha
1198; CHECK-P9-NEXT:    ld r3, GlobLd8@toc@l(r3)
1199; CHECK-P9-NEXT:    std r3, GlobSt8@toc@l(r4)
1200; CHECK-P9-NEXT:    blr
1201;
1202; CHECK-P8-LABEL: testGlob8PtrPlus0:
1203; CHECK-P8:       # %bb.0: # %entry
1204; CHECK-P8-NEXT:    addis r3, r2, GlobLd8@toc@ha
1205; CHECK-P8-NEXT:    ld r3, GlobLd8@toc@l(r3)
1206; CHECK-P8-NEXT:    addis r4, r2, GlobSt8@toc@ha
1207; CHECK-P8-NEXT:    std r3, GlobSt8@toc@l(r4)
1208; CHECK-P8-NEXT:    blr
1209entry:
1210  %0 = load i64, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobLd8, i64 0, i64 0), align 8
1211  store i64 %0, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobSt8, i64 0, i64 0), align 8
1212  ret void
1213}
1214
1215; Function Attrs: nofree norecurse nounwind uwtable willreturn
1216define dso_local void @testGlob8PtrPlus3() {
1217; CHECK-P10-LE-LABEL: testGlob8PtrPlus3:
1218; CHECK-P10-LE:       # %bb.0: # %entry
1219; CHECK-P10-LE-NEXT:    pld r3, GlobLd8@PCREL+3(0), 1
1220; CHECK-P10-LE-NEXT:    pstd r3, GlobSt8@PCREL+3(0), 1
1221; CHECK-P10-LE-NEXT:    blr
1222;
1223; CHECK-P10-BE-LABEL: testGlob8PtrPlus3:
1224; CHECK-P10-BE:       # %bb.0: # %entry
1225; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd8@toc@ha
1226; CHECK-P10-BE-NEXT:    li r4, 3
1227; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt8@toc@ha
1228; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd8@toc@l
1229; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt8@toc@l
1230; CHECK-P10-BE-NEXT:    ldx r3, r3, r4
1231; CHECK-P10-BE-NEXT:    stdx r3, r5, r4
1232; CHECK-P10-BE-NEXT:    blr
1233;
1234; CHECK-LABEL: testGlob8PtrPlus3:
1235; CHECK:       # %bb.0: # %entry
1236; CHECK-NEXT:    addis r3, r2, GlobLd8@toc@ha
1237; CHECK-NEXT:    li r4, 3
1238; CHECK-NEXT:    addis r5, r2, GlobSt8@toc@ha
1239; CHECK-NEXT:    addi r3, r3, GlobLd8@toc@l
1240; CHECK-NEXT:    addi r5, r5, GlobSt8@toc@l
1241; CHECK-NEXT:    ldx r3, r3, r4
1242; CHECK-NEXT:    stdx r3, r5, r4
1243; CHECK-NEXT:    blr
1244entry:
1245  %0 = load i64, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobLd8 to i8*), i64 3) to i64*), align 8
1246  store i64 %0, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobSt8 to i8*), i64 3) to i64*), align 8
1247  ret void
1248}
1249
1250; Function Attrs: nofree norecurse nounwind uwtable willreturn
1251define dso_local void @testGlob8PtrPlus4() {
1252; CHECK-P10-LE-LABEL: testGlob8PtrPlus4:
1253; CHECK-P10-LE:       # %bb.0: # %entry
1254; CHECK-P10-LE-NEXT:    pld r3, GlobLd8@PCREL+4(0), 1
1255; CHECK-P10-LE-NEXT:    pstd r3, GlobSt8@PCREL+4(0), 1
1256; CHECK-P10-LE-NEXT:    blr
1257;
1258; CHECK-P10-BE-LABEL: testGlob8PtrPlus4:
1259; CHECK-P10-BE:       # %bb.0: # %entry
1260; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd8@toc@ha
1261; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt8@toc@ha
1262; CHECK-P10-BE-NEXT:    ld r3, GlobLd8@toc@l+4(r3)
1263; CHECK-P10-BE-NEXT:    std r3, GlobSt8@toc@l+4(r4)
1264; CHECK-P10-BE-NEXT:    blr
1265;
1266; CHECK-P9-LABEL: testGlob8PtrPlus4:
1267; CHECK-P9:       # %bb.0: # %entry
1268; CHECK-P9-NEXT:    addis r3, r2, GlobLd8@toc@ha
1269; CHECK-P9-NEXT:    addis r4, r2, GlobSt8@toc@ha
1270; CHECK-P9-NEXT:    ld r3, GlobLd8@toc@l+4(r3)
1271; CHECK-P9-NEXT:    std r3, GlobSt8@toc@l+4(r4)
1272; CHECK-P9-NEXT:    blr
1273;
1274; CHECK-P8-LABEL: testGlob8PtrPlus4:
1275; CHECK-P8:       # %bb.0: # %entry
1276; CHECK-P8-NEXT:    addis r3, r2, GlobLd8@toc@ha
1277; CHECK-P8-NEXT:    ld r3, GlobLd8@toc@l+4(r3)
1278; CHECK-P8-NEXT:    addis r4, r2, GlobSt8@toc@ha
1279; CHECK-P8-NEXT:    std r3, GlobSt8@toc@l+4(r4)
1280; CHECK-P8-NEXT:    blr
1281entry:
1282  %0 = load i64, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobLd8 to i8*), i64 4) to i64*), align 8
1283  store i64 %0, i64* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x i64]* @GlobSt8 to i8*), i64 4) to i64*), align 8
1284  ret void
1285}
1286
1287; Function Attrs: nofree norecurse nounwind uwtable willreturn
1288define dso_local void @testGlob8PtrPlus16() {
1289; CHECK-P10-LE-LABEL: testGlob8PtrPlus16:
1290; CHECK-P10-LE:       # %bb.0: # %entry
1291; CHECK-P10-LE-NEXT:    pld r3, GlobLd8@PCREL+16(0), 1
1292; CHECK-P10-LE-NEXT:    pstd r3, GlobSt8@PCREL+16(0), 1
1293; CHECK-P10-LE-NEXT:    blr
1294;
1295; CHECK-P10-BE-LABEL: testGlob8PtrPlus16:
1296; CHECK-P10-BE:       # %bb.0: # %entry
1297; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd8@toc@ha+16
1298; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt8@toc@ha+16
1299; CHECK-P10-BE-NEXT:    ld r3, GlobLd8@toc@l+16(r3)
1300; CHECK-P10-BE-NEXT:    std r3, GlobSt8@toc@l+16(r4)
1301; CHECK-P10-BE-NEXT:    blr
1302;
1303; CHECK-P9-LABEL: testGlob8PtrPlus16:
1304; CHECK-P9:       # %bb.0: # %entry
1305; CHECK-P9-NEXT:    addis r3, r2, GlobLd8@toc@ha+16
1306; CHECK-P9-NEXT:    addis r4, r2, GlobSt8@toc@ha+16
1307; CHECK-P9-NEXT:    ld r3, GlobLd8@toc@l+16(r3)
1308; CHECK-P9-NEXT:    std r3, GlobSt8@toc@l+16(r4)
1309; CHECK-P9-NEXT:    blr
1310;
1311; CHECK-P8-LABEL: testGlob8PtrPlus16:
1312; CHECK-P8:       # %bb.0: # %entry
1313; CHECK-P8-NEXT:    addis r3, r2, GlobLd8@toc@ha+16
1314; CHECK-P8-NEXT:    ld r3, GlobLd8@toc@l+16(r3)
1315; CHECK-P8-NEXT:    addis r4, r2, GlobSt8@toc@ha+16
1316; CHECK-P8-NEXT:    std r3, GlobSt8@toc@l+16(r4)
1317; CHECK-P8-NEXT:    blr
1318entry:
1319  %0 = load i64, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobLd8, i64 0, i64 2), align 8
1320  store i64 %0, i64* getelementptr inbounds ([20 x i64], [20 x i64]* @GlobSt8, i64 0, i64 2), align 8
1321  ret void
1322}
1323
1324; Function Attrs: nofree norecurse nounwind uwtable willreturn
1325define dso_local void @testGlob8PtrPlusVar(i64 %Idx) {
1326; CHECK-P10-LE-LABEL: testGlob8PtrPlusVar:
1327; CHECK-P10-LE:       # %bb.0: # %entry
1328; CHECK-P10-LE-NEXT:    sldi r3, r3, 3
1329; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd8@PCREL, 1
1330; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt8@PCREL, 1
1331; CHECK-P10-LE-NEXT:    ldx r4, r4, r3
1332; CHECK-P10-LE-NEXT:    stdx r4, r5, r3
1333; CHECK-P10-LE-NEXT:    blr
1334;
1335; CHECK-P10-BE-LABEL: testGlob8PtrPlusVar:
1336; CHECK-P10-BE:       # %bb.0: # %entry
1337; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd8@toc@ha
1338; CHECK-P10-BE-NEXT:    sldi r3, r3, 3
1339; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt8@toc@ha
1340; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd8@toc@l
1341; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt8@toc@l
1342; CHECK-P10-BE-NEXT:    ldx r4, r4, r3
1343; CHECK-P10-BE-NEXT:    stdx r4, r5, r3
1344; CHECK-P10-BE-NEXT:    blr
1345;
1346; CHECK-LABEL: testGlob8PtrPlusVar:
1347; CHECK:       # %bb.0: # %entry
1348; CHECK-NEXT:    addis r4, r2, GlobLd8@toc@ha
1349; CHECK-NEXT:    sldi r3, r3, 3
1350; CHECK-NEXT:    addis r5, r2, GlobSt8@toc@ha
1351; CHECK-NEXT:    addi r4, r4, GlobLd8@toc@l
1352; CHECK-NEXT:    addi r5, r5, GlobSt8@toc@l
1353; CHECK-NEXT:    ldx r4, r4, r3
1354; CHECK-NEXT:    stdx r4, r5, r3
1355; CHECK-NEXT:    blr
1356entry:
1357  %arrayidx = getelementptr inbounds [20 x i64], [20 x i64]* @GlobLd8, i64 0, i64 %Idx
1358  %0 = load i64, i64* %arrayidx, align 8
1359  %arrayidx1 = getelementptr inbounds [20 x i64], [20 x i64]* @GlobSt8, i64 0, i64 %Idx
1360  store i64 %0, i64* %arrayidx1, align 8
1361  ret void
1362}
1363
1364; Function Attrs: nofree norecurse nounwind uwtable willreturn
1365define dso_local void @testGlob9PtrPlus0() {
1366; CHECK-P10-LE-LABEL: testGlob9PtrPlus0:
1367; CHECK-P10-LE:       # %bb.0: # %entry
1368; CHECK-P10-LE-NEXT:    plwz r3, GlobLd9@PCREL(0), 1
1369; CHECK-P10-LE-NEXT:    pstw r3, GlobSt9@PCREL(0), 1
1370; CHECK-P10-LE-NEXT:    blr
1371;
1372; CHECK-P10-BE-LABEL: testGlob9PtrPlus0:
1373; CHECK-P10-BE:       # %bb.0: # %entry
1374; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd9@toc@ha
1375; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt9@toc@ha
1376; CHECK-P10-BE-NEXT:    lwz r3, GlobLd9@toc@l(r3)
1377; CHECK-P10-BE-NEXT:    stw r3, GlobSt9@toc@l(r4)
1378; CHECK-P10-BE-NEXT:    blr
1379;
1380; CHECK-LABEL: testGlob9PtrPlus0:
1381; CHECK:       # %bb.0: # %entry
1382; CHECK-NEXT:    addis r3, r2, GlobLd9@toc@ha
1383; CHECK-NEXT:    addis r4, r2, GlobSt9@toc@ha
1384; CHECK-NEXT:    lwz r3, GlobLd9@toc@l(r3)
1385; CHECK-NEXT:    stw r3, GlobSt9@toc@l(r4)
1386; CHECK-NEXT:    blr
1387entry:
1388  %0 = load float, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobLd9, i64 0, i64 0), align 4
1389  store float %0, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobSt9, i64 0, i64 0), align 4
1390  ret void
1391}
1392
1393; Function Attrs: nofree norecurse nounwind uwtable willreturn
1394define dso_local void @testGlob9PtrPlus3() {
1395; CHECK-P10-LE-LABEL: testGlob9PtrPlus3:
1396; CHECK-P10-LE:       # %bb.0: # %entry
1397; CHECK-P10-LE-NEXT:    plwz r3, GlobLd9@PCREL+3(0), 1
1398; CHECK-P10-LE-NEXT:    pstw r3, GlobSt9@PCREL+3(0), 1
1399; CHECK-P10-LE-NEXT:    blr
1400;
1401; CHECK-P10-BE-LABEL: testGlob9PtrPlus3:
1402; CHECK-P10-BE:       # %bb.0: # %entry
1403; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd9@toc@ha
1404; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt9@toc@ha
1405; CHECK-P10-BE-NEXT:    lwz r3, GlobLd9@toc@l+3(r3)
1406; CHECK-P10-BE-NEXT:    stw r3, GlobSt9@toc@l+3(r4)
1407; CHECK-P10-BE-NEXT:    blr
1408;
1409; CHECK-LABEL: testGlob9PtrPlus3:
1410; CHECK:       # %bb.0: # %entry
1411; CHECK-NEXT:    addis r3, r2, GlobLd9@toc@ha
1412; CHECK-NEXT:    addis r4, r2, GlobSt9@toc@ha
1413; CHECK-NEXT:    lwz r3, GlobLd9@toc@l+3(r3)
1414; CHECK-NEXT:    stw r3, GlobSt9@toc@l+3(r4)
1415; CHECK-NEXT:    blr
1416entry:
1417  %0 = load float, float* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x float]* @GlobLd9 to i8*), i64 3) to float*), align 4
1418  store float %0, float* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x float]* @GlobSt9 to i8*), i64 3) to float*), align 4
1419  ret void
1420}
1421
1422; Function Attrs: nofree norecurse nounwind uwtable willreturn
1423define dso_local void @testGlob9PtrPlus4() {
1424; CHECK-P10-LE-LABEL: testGlob9PtrPlus4:
1425; CHECK-P10-LE:       # %bb.0: # %entry
1426; CHECK-P10-LE-NEXT:    plwz r3, GlobLd9@PCREL+4(0), 1
1427; CHECK-P10-LE-NEXT:    pstw r3, GlobSt9@PCREL+4(0), 1
1428; CHECK-P10-LE-NEXT:    blr
1429;
1430; CHECK-P10-BE-LABEL: testGlob9PtrPlus4:
1431; CHECK-P10-BE:       # %bb.0: # %entry
1432; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd9@toc@ha+4
1433; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt9@toc@ha+4
1434; CHECK-P10-BE-NEXT:    lwz r3, GlobLd9@toc@l+4(r3)
1435; CHECK-P10-BE-NEXT:    stw r3, GlobSt9@toc@l+4(r4)
1436; CHECK-P10-BE-NEXT:    blr
1437;
1438; CHECK-LABEL: testGlob9PtrPlus4:
1439; CHECK:       # %bb.0: # %entry
1440; CHECK-NEXT:    addis r3, r2, GlobLd9@toc@ha+4
1441; CHECK-NEXT:    addis r4, r2, GlobSt9@toc@ha+4
1442; CHECK-NEXT:    lwz r3, GlobLd9@toc@l+4(r3)
1443; CHECK-NEXT:    stw r3, GlobSt9@toc@l+4(r4)
1444; CHECK-NEXT:    blr
1445entry:
1446  %0 = load float, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobLd9, i64 0, i64 1), align 4
1447  store float %0, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobSt9, i64 0, i64 1), align 4
1448  ret void
1449}
1450
1451; Function Attrs: nofree norecurse nounwind uwtable willreturn
1452define dso_local void @testGlob9PtrPlus16() {
1453; CHECK-P10-LE-LABEL: testGlob9PtrPlus16:
1454; CHECK-P10-LE:       # %bb.0: # %entry
1455; CHECK-P10-LE-NEXT:    plwz r3, GlobLd9@PCREL+16(0), 1
1456; CHECK-P10-LE-NEXT:    pstw r3, GlobSt9@PCREL+16(0), 1
1457; CHECK-P10-LE-NEXT:    blr
1458;
1459; CHECK-P10-BE-LABEL: testGlob9PtrPlus16:
1460; CHECK-P10-BE:       # %bb.0: # %entry
1461; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd9@toc@ha+16
1462; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt9@toc@ha+16
1463; CHECK-P10-BE-NEXT:    lwz r3, GlobLd9@toc@l+16(r3)
1464; CHECK-P10-BE-NEXT:    stw r3, GlobSt9@toc@l+16(r4)
1465; CHECK-P10-BE-NEXT:    blr
1466;
1467; CHECK-LABEL: testGlob9PtrPlus16:
1468; CHECK:       # %bb.0: # %entry
1469; CHECK-NEXT:    addis r3, r2, GlobLd9@toc@ha+16
1470; CHECK-NEXT:    addis r4, r2, GlobSt9@toc@ha+16
1471; CHECK-NEXT:    lwz r3, GlobLd9@toc@l+16(r3)
1472; CHECK-NEXT:    stw r3, GlobSt9@toc@l+16(r4)
1473; CHECK-NEXT:    blr
1474entry:
1475  %0 = load float, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobLd9, i64 0, i64 4), align 4
1476  store float %0, float* getelementptr inbounds ([20 x float], [20 x float]* @GlobSt9, i64 0, i64 4), align 4
1477  ret void
1478}
1479
1480; Function Attrs: nofree norecurse nounwind uwtable willreturn
1481define dso_local void @testGlob9PtrPlusVar(i64 %Idx) {
1482; CHECK-P10-LE-LABEL: testGlob9PtrPlusVar:
1483; CHECK-P10-LE:       # %bb.0: # %entry
1484; CHECK-P10-LE-NEXT:    sldi r3, r3, 2
1485; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd9@PCREL, 1
1486; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt9@PCREL, 1
1487; CHECK-P10-LE-NEXT:    lwzx r4, r4, r3
1488; CHECK-P10-LE-NEXT:    stwx r4, r5, r3
1489; CHECK-P10-LE-NEXT:    blr
1490;
1491; CHECK-P10-BE-LABEL: testGlob9PtrPlusVar:
1492; CHECK-P10-BE:       # %bb.0: # %entry
1493; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd9@toc@ha
1494; CHECK-P10-BE-NEXT:    sldi r3, r3, 2
1495; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt9@toc@ha
1496; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd9@toc@l
1497; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt9@toc@l
1498; CHECK-P10-BE-NEXT:    lwzx r4, r4, r3
1499; CHECK-P10-BE-NEXT:    stwx r4, r5, r3
1500; CHECK-P10-BE-NEXT:    blr
1501;
1502; CHECK-LABEL: testGlob9PtrPlusVar:
1503; CHECK:       # %bb.0: # %entry
1504; CHECK-NEXT:    addis r4, r2, GlobLd9@toc@ha
1505; CHECK-NEXT:    sldi r3, r3, 2
1506; CHECK-NEXT:    addis r5, r2, GlobSt9@toc@ha
1507; CHECK-NEXT:    addi r4, r4, GlobLd9@toc@l
1508; CHECK-NEXT:    addi r5, r5, GlobSt9@toc@l
1509; CHECK-NEXT:    lwzx r4, r4, r3
1510; CHECK-NEXT:    stwx r4, r5, r3
1511; CHECK-NEXT:    blr
1512entry:
1513  %arrayidx = getelementptr inbounds [20 x float], [20 x float]* @GlobLd9, i64 0, i64 %Idx
1514  %0 = load float, float* %arrayidx, align 4
1515  %arrayidx1 = getelementptr inbounds [20 x float], [20 x float]* @GlobSt9, i64 0, i64 %Idx
1516  store float %0, float* %arrayidx1, align 4
1517  ret void
1518}
1519
1520; Function Attrs: nofree norecurse nounwind uwtable willreturn
1521define dso_local void @testGlob10PtrPlus0() {
1522; CHECK-P10-LE-LABEL: testGlob10PtrPlus0:
1523; CHECK-P10-LE:       # %bb.0: # %entry
1524; CHECK-P10-LE-NEXT:    pld r3, GlobLd10@PCREL(0), 1
1525; CHECK-P10-LE-NEXT:    pstd r3, GlobSt10@PCREL(0), 1
1526; CHECK-P10-LE-NEXT:    blr
1527;
1528; CHECK-P10-BE-LABEL: testGlob10PtrPlus0:
1529; CHECK-P10-BE:       # %bb.0: # %entry
1530; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd10@toc@ha
1531; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt10@toc@ha
1532; CHECK-P10-BE-NEXT:    ld r3, GlobLd10@toc@l(r3)
1533; CHECK-P10-BE-NEXT:    std r3, GlobSt10@toc@l(r4)
1534; CHECK-P10-BE-NEXT:    blr
1535;
1536; CHECK-P9-LABEL: testGlob10PtrPlus0:
1537; CHECK-P9:       # %bb.0: # %entry
1538; CHECK-P9-NEXT:    addis r3, r2, GlobLd10@toc@ha
1539; CHECK-P9-NEXT:    addis r4, r2, GlobSt10@toc@ha
1540; CHECK-P9-NEXT:    ld r3, GlobLd10@toc@l(r3)
1541; CHECK-P9-NEXT:    std r3, GlobSt10@toc@l(r4)
1542; CHECK-P9-NEXT:    blr
1543;
1544; CHECK-P8-LABEL: testGlob10PtrPlus0:
1545; CHECK-P8:       # %bb.0: # %entry
1546; CHECK-P8-NEXT:    addis r3, r2, GlobLd10@toc@ha
1547; CHECK-P8-NEXT:    ld r3, GlobLd10@toc@l(r3)
1548; CHECK-P8-NEXT:    addis r4, r2, GlobSt10@toc@ha
1549; CHECK-P8-NEXT:    std r3, GlobSt10@toc@l(r4)
1550; CHECK-P8-NEXT:    blr
1551entry:
1552  %0 = load double, double* getelementptr inbounds ([20 x double], [20 x double]* @GlobLd10, i64 0, i64 0), align 8
1553  store double %0, double* getelementptr inbounds ([20 x double], [20 x double]* @GlobSt10, i64 0, i64 0), align 8
1554  ret void
1555}
1556
1557; Function Attrs: nofree norecurse nounwind uwtable willreturn
1558define dso_local void @testGlob10PtrPlus3() {
1559; CHECK-P10-LE-LABEL: testGlob10PtrPlus3:
1560; CHECK-P10-LE:       # %bb.0: # %entry
1561; CHECK-P10-LE-NEXT:    pld r3, GlobLd10@PCREL+3(0), 1
1562; CHECK-P10-LE-NEXT:    pstd r3, GlobSt10@PCREL+3(0), 1
1563; CHECK-P10-LE-NEXT:    blr
1564;
1565; CHECK-P10-BE-LABEL: testGlob10PtrPlus3:
1566; CHECK-P10-BE:       # %bb.0: # %entry
1567; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd10@toc@ha
1568; CHECK-P10-BE-NEXT:    li r4, 3
1569; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt10@toc@ha
1570; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd10@toc@l
1571; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt10@toc@l
1572; CHECK-P10-BE-NEXT:    ldx r3, r3, r4
1573; CHECK-P10-BE-NEXT:    stdx r3, r5, r4
1574; CHECK-P10-BE-NEXT:    blr
1575;
1576; CHECK-LABEL: testGlob10PtrPlus3:
1577; CHECK:       # %bb.0: # %entry
1578; CHECK-NEXT:    addis r3, r2, GlobLd10@toc@ha
1579; CHECK-NEXT:    li r4, 3
1580; CHECK-NEXT:    addis r5, r2, GlobSt10@toc@ha
1581; CHECK-NEXT:    addi r3, r3, GlobLd10@toc@l
1582; CHECK-NEXT:    addi r5, r5, GlobSt10@toc@l
1583; CHECK-NEXT:    ldx r3, r3, r4
1584; CHECK-NEXT:    stdx r3, r5, r4
1585; CHECK-NEXT:    blr
1586entry:
1587  %0 = load double, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobLd10 to i8*), i64 3) to double*), align 8
1588  store double %0, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobSt10 to i8*), i64 3) to double*), align 8
1589  ret void
1590}
1591
1592; Function Attrs: nofree norecurse nounwind uwtable willreturn
1593define dso_local void @testGlob10PtrPlus4() {
1594; CHECK-P10-LE-LABEL: testGlob10PtrPlus4:
1595; CHECK-P10-LE:       # %bb.0: # %entry
1596; CHECK-P10-LE-NEXT:    pld r3, GlobLd10@PCREL+4(0), 1
1597; CHECK-P10-LE-NEXT:    pstd r3, GlobSt10@PCREL+4(0), 1
1598; CHECK-P10-LE-NEXT:    blr
1599;
1600; CHECK-P10-BE-LABEL: testGlob10PtrPlus4:
1601; CHECK-P10-BE:       # %bb.0: # %entry
1602; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd10@toc@ha
1603; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt10@toc@ha
1604; CHECK-P10-BE-NEXT:    ld r3, GlobLd10@toc@l+4(r3)
1605; CHECK-P10-BE-NEXT:    std r3, GlobSt10@toc@l+4(r4)
1606; CHECK-P10-BE-NEXT:    blr
1607;
1608; CHECK-P9-LABEL: testGlob10PtrPlus4:
1609; CHECK-P9:       # %bb.0: # %entry
1610; CHECK-P9-NEXT:    addis r3, r2, GlobLd10@toc@ha
1611; CHECK-P9-NEXT:    addis r4, r2, GlobSt10@toc@ha
1612; CHECK-P9-NEXT:    ld r3, GlobLd10@toc@l+4(r3)
1613; CHECK-P9-NEXT:    std r3, GlobSt10@toc@l+4(r4)
1614; CHECK-P9-NEXT:    blr
1615;
1616; CHECK-P8-LABEL: testGlob10PtrPlus4:
1617; CHECK-P8:       # %bb.0: # %entry
1618; CHECK-P8-NEXT:    addis r3, r2, GlobLd10@toc@ha
1619; CHECK-P8-NEXT:    ld r3, GlobLd10@toc@l+4(r3)
1620; CHECK-P8-NEXT:    addis r4, r2, GlobSt10@toc@ha
1621; CHECK-P8-NEXT:    std r3, GlobSt10@toc@l+4(r4)
1622; CHECK-P8-NEXT:    blr
1623entry:
1624  %0 = load double, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobLd10 to i8*), i64 4) to double*), align 8
1625  store double %0, double* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x double]* @GlobSt10 to i8*), i64 4) to double*), align 8
1626  ret void
1627}
1628
1629; Function Attrs: nofree norecurse nounwind uwtable willreturn
1630define dso_local void @testGlob10PtrPlus16() {
1631; CHECK-P10-LE-LABEL: testGlob10PtrPlus16:
1632; CHECK-P10-LE:       # %bb.0: # %entry
1633; CHECK-P10-LE-NEXT:    pld r3, GlobLd10@PCREL+16(0), 1
1634; CHECK-P10-LE-NEXT:    pstd r3, GlobSt10@PCREL+16(0), 1
1635; CHECK-P10-LE-NEXT:    blr
1636;
1637; CHECK-P10-BE-LABEL: testGlob10PtrPlus16:
1638; CHECK-P10-BE:       # %bb.0: # %entry
1639; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd10@toc@ha+16
1640; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt10@toc@ha+16
1641; CHECK-P10-BE-NEXT:    ld r3, GlobLd10@toc@l+16(r3)
1642; CHECK-P10-BE-NEXT:    std r3, GlobSt10@toc@l+16(r4)
1643; CHECK-P10-BE-NEXT:    blr
1644;
1645; CHECK-P9-LABEL: testGlob10PtrPlus16:
1646; CHECK-P9:       # %bb.0: # %entry
1647; CHECK-P9-NEXT:    addis r3, r2, GlobLd10@toc@ha+16
1648; CHECK-P9-NEXT:    addis r4, r2, GlobSt10@toc@ha+16
1649; CHECK-P9-NEXT:    ld r3, GlobLd10@toc@l+16(r3)
1650; CHECK-P9-NEXT:    std r3, GlobSt10@toc@l+16(r4)
1651; CHECK-P9-NEXT:    blr
1652;
1653; CHECK-P8-LABEL: testGlob10PtrPlus16:
1654; CHECK-P8:       # %bb.0: # %entry
1655; CHECK-P8-NEXT:    addis r3, r2, GlobLd10@toc@ha+16
1656; CHECK-P8-NEXT:    ld r3, GlobLd10@toc@l+16(r3)
1657; CHECK-P8-NEXT:    addis r4, r2, GlobSt10@toc@ha+16
1658; CHECK-P8-NEXT:    std r3, GlobSt10@toc@l+16(r4)
1659; CHECK-P8-NEXT:    blr
1660entry:
1661  %0 = load double, double* getelementptr inbounds ([20 x double], [20 x double]* @GlobLd10, i64 0, i64 2), align 8
1662  store double %0, double* getelementptr inbounds ([20 x double], [20 x double]* @GlobSt10, i64 0, i64 2), align 8
1663  ret void
1664}
1665
1666; Function Attrs: nofree norecurse nounwind uwtable willreturn
1667define dso_local void @testGlob10PtrPlusVar(i64 %Idx) {
1668; CHECK-P10-LE-LABEL: testGlob10PtrPlusVar:
1669; CHECK-P10-LE:       # %bb.0: # %entry
1670; CHECK-P10-LE-NEXT:    sldi r3, r3, 3
1671; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd10@PCREL, 1
1672; CHECK-P10-LE-NEXT:    paddi r5, 0, GlobSt10@PCREL, 1
1673; CHECK-P10-LE-NEXT:    ldx r4, r4, r3
1674; CHECK-P10-LE-NEXT:    stdx r4, r5, r3
1675; CHECK-P10-LE-NEXT:    blr
1676;
1677; CHECK-P10-BE-LABEL: testGlob10PtrPlusVar:
1678; CHECK-P10-BE:       # %bb.0: # %entry
1679; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd10@toc@ha
1680; CHECK-P10-BE-NEXT:    sldi r3, r3, 3
1681; CHECK-P10-BE-NEXT:    addis r5, r2, GlobSt10@toc@ha
1682; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd10@toc@l
1683; CHECK-P10-BE-NEXT:    addi r5, r5, GlobSt10@toc@l
1684; CHECK-P10-BE-NEXT:    ldx r4, r4, r3
1685; CHECK-P10-BE-NEXT:    stdx r4, r5, r3
1686; CHECK-P10-BE-NEXT:    blr
1687;
1688; CHECK-LABEL: testGlob10PtrPlusVar:
1689; CHECK:       # %bb.0: # %entry
1690; CHECK-NEXT:    addis r4, r2, GlobLd10@toc@ha
1691; CHECK-NEXT:    sldi r3, r3, 3
1692; CHECK-NEXT:    addis r5, r2, GlobSt10@toc@ha
1693; CHECK-NEXT:    addi r4, r4, GlobLd10@toc@l
1694; CHECK-NEXT:    addi r5, r5, GlobSt10@toc@l
1695; CHECK-NEXT:    ldx r4, r4, r3
1696; CHECK-NEXT:    stdx r4, r5, r3
1697; CHECK-NEXT:    blr
1698entry:
1699  %arrayidx = getelementptr inbounds [20 x double], [20 x double]* @GlobLd10, i64 0, i64 %Idx
1700  %0 = load double, double* %arrayidx, align 8
1701  %arrayidx1 = getelementptr inbounds [20 x double], [20 x double]* @GlobSt10, i64 0, i64 %Idx
1702  store double %0, double* %arrayidx1, align 8
1703  ret void
1704}
1705
1706; Function Attrs: nofree norecurse nounwind uwtable willreturn
1707define dso_local void @testGlob11PtrPlus0() {
1708; CHECK-P10-LE-LABEL: testGlob11PtrPlus0:
1709; CHECK-P10-LE:       # %bb.0: # %entry
1710; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd11@PCREL(0), 1
1711; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt11@PCREL(0), 1
1712; CHECK-P10-LE-NEXT:    blr
1713;
1714; CHECK-P10-BE-LABEL: testGlob11PtrPlus0:
1715; CHECK-P10-BE:       # %bb.0: # %entry
1716; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1717; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd11@toc@l
1718; CHECK-P10-BE-NEXT:    lxvx vs0, 0, r3
1719; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1720; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt11@toc@l
1721; CHECK-P10-BE-NEXT:    stxvx vs0, 0, r3
1722; CHECK-P10-BE-NEXT:    blr
1723;
1724; CHECK-P9-LABEL: testGlob11PtrPlus0:
1725; CHECK-P9:       # %bb.0: # %entry
1726; CHECK-P9-NEXT:    addis r3, r2, GlobLd11@toc@ha
1727; CHECK-P9-NEXT:    addi r3, r3, GlobLd11@toc@l
1728; CHECK-P9-NEXT:    lxvx vs0, 0, r3
1729; CHECK-P9-NEXT:    addis r3, r2, GlobSt11@toc@ha
1730; CHECK-P9-NEXT:    addi r3, r3, GlobSt11@toc@l
1731; CHECK-P9-NEXT:    stxvx vs0, 0, r3
1732; CHECK-P9-NEXT:    blr
1733;
1734; CHECK-P8-LE-LABEL: testGlob11PtrPlus0:
1735; CHECK-P8-LE:       # %bb.0: # %entry
1736; CHECK-P8-LE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1737; CHECK-P8-LE-NEXT:    addi r3, r3, GlobLd11@toc@l
1738; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
1739; CHECK-P8-LE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1740; CHECK-P8-LE-NEXT:    addi r3, r3, GlobSt11@toc@l
1741; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
1742; CHECK-P8-LE-NEXT:    blr
1743;
1744; CHECK-P8-BE-LABEL: testGlob11PtrPlus0:
1745; CHECK-P8-BE:       # %bb.0: # %entry
1746; CHECK-P8-BE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1747; CHECK-P8-BE-NEXT:    addi r3, r3, GlobLd11@toc@l
1748; CHECK-P8-BE-NEXT:    lxvw4x vs0, 0, r3
1749; CHECK-P8-BE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1750; CHECK-P8-BE-NEXT:    addi r3, r3, GlobSt11@toc@l
1751; CHECK-P8-BE-NEXT:    stxvw4x vs0, 0, r3
1752; CHECK-P8-BE-NEXT:    blr
1753entry:
1754  %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
1755  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
1756  ret void
1757}
1758
1759; Function Attrs: nofree norecurse nounwind uwtable willreturn
1760define dso_local void @testGlob11PtrPlus3() {
1761; CHECK-P10-LE-LABEL: testGlob11PtrPlus3:
1762; CHECK-P10-LE:       # %bb.0: # %entry
1763; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd11@PCREL+3(0), 1
1764; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt11@PCREL+3(0), 1
1765; CHECK-P10-LE-NEXT:    blr
1766;
1767; CHECK-P10-BE-LABEL: testGlob11PtrPlus3:
1768; CHECK-P10-BE:       # %bb.0: # %entry
1769; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1770; CHECK-P10-BE-NEXT:    li r4, 3
1771; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd11@toc@l
1772; CHECK-P10-BE-NEXT:    lxvx vs0, r3, r4
1773; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1774; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt11@toc@l
1775; CHECK-P10-BE-NEXT:    stxvx vs0, r3, r4
1776; CHECK-P10-BE-NEXT:    blr
1777;
1778; CHECK-P9-LABEL: testGlob11PtrPlus3:
1779; CHECK-P9:       # %bb.0: # %entry
1780; CHECK-P9-NEXT:    addis r3, r2, GlobLd11@toc@ha
1781; CHECK-P9-NEXT:    li r4, 3
1782; CHECK-P9-NEXT:    addi r3, r3, GlobLd11@toc@l
1783; CHECK-P9-NEXT:    lxvx vs0, r3, r4
1784; CHECK-P9-NEXT:    addis r3, r2, GlobSt11@toc@ha
1785; CHECK-P9-NEXT:    addi r3, r3, GlobSt11@toc@l
1786; CHECK-P9-NEXT:    stxvx vs0, r3, r4
1787; CHECK-P9-NEXT:    blr
1788;
1789; CHECK-P8-LE-LABEL: testGlob11PtrPlus3:
1790; CHECK-P8-LE:       # %bb.0: # %entry
1791; CHECK-P8-LE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1792; CHECK-P8-LE-NEXT:    li r4, 3
1793; CHECK-P8-LE-NEXT:    addi r3, r3, GlobLd11@toc@l
1794; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
1795; CHECK-P8-LE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1796; CHECK-P8-LE-NEXT:    addi r3, r3, GlobSt11@toc@l
1797; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1798; CHECK-P8-LE-NEXT:    blr
1799;
1800; CHECK-P8-BE-LABEL: testGlob11PtrPlus3:
1801; CHECK-P8-BE:       # %bb.0: # %entry
1802; CHECK-P8-BE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1803; CHECK-P8-BE-NEXT:    li r4, 3
1804; CHECK-P8-BE-NEXT:    addi r3, r3, GlobLd11@toc@l
1805; CHECK-P8-BE-NEXT:    lxvw4x vs0, r3, r4
1806; CHECK-P8-BE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1807; CHECK-P8-BE-NEXT:    addi r3, r3, GlobSt11@toc@l
1808; CHECK-P8-BE-NEXT:    stxvw4x vs0, r3, r4
1809; CHECK-P8-BE-NEXT:    blr
1810entry:
1811  %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
1812  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
1813  ret void
1814}
1815
1816; Function Attrs: nofree norecurse nounwind uwtable willreturn
1817define dso_local void @testGlob11PtrPlus4() {
1818; CHECK-P10-LE-LABEL: testGlob11PtrPlus4:
1819; CHECK-P10-LE:       # %bb.0: # %entry
1820; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd11@PCREL+4(0), 1
1821; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt11@PCREL+4(0), 1
1822; CHECK-P10-LE-NEXT:    blr
1823;
1824; CHECK-P10-BE-LABEL: testGlob11PtrPlus4:
1825; CHECK-P10-BE:       # %bb.0: # %entry
1826; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1827; CHECK-P10-BE-NEXT:    li r4, 4
1828; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd11@toc@l
1829; CHECK-P10-BE-NEXT:    lxvx vs0, r3, r4
1830; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1831; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt11@toc@l
1832; CHECK-P10-BE-NEXT:    stxvx vs0, r3, r4
1833; CHECK-P10-BE-NEXT:    blr
1834;
1835; CHECK-P9-LABEL: testGlob11PtrPlus4:
1836; CHECK-P9:       # %bb.0: # %entry
1837; CHECK-P9-NEXT:    addis r3, r2, GlobLd11@toc@ha
1838; CHECK-P9-NEXT:    li r4, 4
1839; CHECK-P9-NEXT:    addi r3, r3, GlobLd11@toc@l
1840; CHECK-P9-NEXT:    lxvx vs0, r3, r4
1841; CHECK-P9-NEXT:    addis r3, r2, GlobSt11@toc@ha
1842; CHECK-P9-NEXT:    addi r3, r3, GlobSt11@toc@l
1843; CHECK-P9-NEXT:    stxvx vs0, r3, r4
1844; CHECK-P9-NEXT:    blr
1845;
1846; CHECK-P8-LE-LABEL: testGlob11PtrPlus4:
1847; CHECK-P8-LE:       # %bb.0: # %entry
1848; CHECK-P8-LE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1849; CHECK-P8-LE-NEXT:    li r4, 4
1850; CHECK-P8-LE-NEXT:    addi r3, r3, GlobLd11@toc@l
1851; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
1852; CHECK-P8-LE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1853; CHECK-P8-LE-NEXT:    addi r3, r3, GlobSt11@toc@l
1854; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1855; CHECK-P8-LE-NEXT:    blr
1856;
1857; CHECK-P8-BE-LABEL: testGlob11PtrPlus4:
1858; CHECK-P8-BE:       # %bb.0: # %entry
1859; CHECK-P8-BE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1860; CHECK-P8-BE-NEXT:    li r4, 4
1861; CHECK-P8-BE-NEXT:    addi r3, r3, GlobLd11@toc@l
1862; CHECK-P8-BE-NEXT:    lxvw4x vs0, r3, r4
1863; CHECK-P8-BE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1864; CHECK-P8-BE-NEXT:    addi r3, r3, GlobSt11@toc@l
1865; CHECK-P8-BE-NEXT:    stxvw4x vs0, r3, r4
1866; CHECK-P8-BE-NEXT:    blr
1867entry:
1868  %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
1869  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
1870  ret void
1871}
1872
1873; Function Attrs: nofree norecurse nounwind uwtable willreturn
1874define dso_local void @testGlob11PtrPlus16() {
1875; CHECK-P10-LE-LABEL: testGlob11PtrPlus16:
1876; CHECK-P10-LE:       # %bb.0: # %entry
1877; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd11@PCREL+16(0), 1
1878; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt11@PCREL+16(0), 1
1879; CHECK-P10-LE-NEXT:    blr
1880;
1881; CHECK-P10-BE-LABEL: testGlob11PtrPlus16:
1882; CHECK-P10-BE:       # %bb.0: # %entry
1883; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1884; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd11@toc@l
1885; CHECK-P10-BE-NEXT:    lxv vs0, 16(r3)
1886; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1887; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt11@toc@l
1888; CHECK-P10-BE-NEXT:    stxv vs0, 16(r3)
1889; CHECK-P10-BE-NEXT:    blr
1890;
1891; CHECK-P9-LABEL: testGlob11PtrPlus16:
1892; CHECK-P9:       # %bb.0: # %entry
1893; CHECK-P9-NEXT:    addis r3, r2, GlobLd11@toc@ha
1894; CHECK-P9-NEXT:    addi r3, r3, GlobLd11@toc@l
1895; CHECK-P9-NEXT:    lxv vs0, 16(r3)
1896; CHECK-P9-NEXT:    addis r3, r2, GlobSt11@toc@ha
1897; CHECK-P9-NEXT:    addi r3, r3, GlobSt11@toc@l
1898; CHECK-P9-NEXT:    stxv vs0, 16(r3)
1899; CHECK-P9-NEXT:    blr
1900;
1901; CHECK-P8-LE-LABEL: testGlob11PtrPlus16:
1902; CHECK-P8-LE:       # %bb.0: # %entry
1903; CHECK-P8-LE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1904; CHECK-P8-LE-NEXT:    li r4, 16
1905; CHECK-P8-LE-NEXT:    addi r3, r3, GlobLd11@toc@l
1906; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
1907; CHECK-P8-LE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1908; CHECK-P8-LE-NEXT:    addi r3, r3, GlobSt11@toc@l
1909; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
1910; CHECK-P8-LE-NEXT:    blr
1911;
1912; CHECK-P8-BE-LABEL: testGlob11PtrPlus16:
1913; CHECK-P8-BE:       # %bb.0: # %entry
1914; CHECK-P8-BE-NEXT:    addis r3, r2, GlobLd11@toc@ha
1915; CHECK-P8-BE-NEXT:    li r4, 16
1916; CHECK-P8-BE-NEXT:    addi r3, r3, GlobLd11@toc@l
1917; CHECK-P8-BE-NEXT:    lxvw4x vs0, r3, r4
1918; CHECK-P8-BE-NEXT:    addis r3, r2, GlobSt11@toc@ha
1919; CHECK-P8-BE-NEXT:    addi r3, r3, GlobSt11@toc@l
1920; CHECK-P8-BE-NEXT:    stxvw4x vs0, r3, r4
1921; CHECK-P8-BE-NEXT:    blr
1922entry:
1923  %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
1924  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
1925  ret void
1926}
1927
1928; Function Attrs: nofree norecurse nounwind uwtable willreturn
1929define dso_local void @testGlob11PtrPlusVar(i64 %Idx) {
1930; CHECK-P10-LE-LABEL: testGlob11PtrPlusVar:
1931; CHECK-P10-LE:       # %bb.0: # %entry
1932; CHECK-P10-LE-NEXT:    sldi r3, r3, 4
1933; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd11@PCREL, 1
1934; CHECK-P10-LE-NEXT:    lxvx vs0, r4, r3
1935; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobSt11@PCREL, 1
1936; CHECK-P10-LE-NEXT:    stxvx vs0, r4, r3
1937; CHECK-P10-LE-NEXT:    blr
1938;
1939; CHECK-P10-BE-LABEL: testGlob11PtrPlusVar:
1940; CHECK-P10-BE:       # %bb.0: # %entry
1941; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd11@toc@ha
1942; CHECK-P10-BE-NEXT:    sldi r3, r3, 4
1943; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd11@toc@l
1944; CHECK-P10-BE-NEXT:    lxvx vs0, r4, r3
1945; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt11@toc@ha
1946; CHECK-P10-BE-NEXT:    addi r4, r4, GlobSt11@toc@l
1947; CHECK-P10-BE-NEXT:    stxvx vs0, r4, r3
1948; CHECK-P10-BE-NEXT:    blr
1949;
1950; CHECK-P9-LABEL: testGlob11PtrPlusVar:
1951; CHECK-P9:       # %bb.0: # %entry
1952; CHECK-P9-NEXT:    addis r4, r2, GlobLd11@toc@ha
1953; CHECK-P9-NEXT:    sldi r3, r3, 4
1954; CHECK-P9-NEXT:    addi r4, r4, GlobLd11@toc@l
1955; CHECK-P9-NEXT:    lxvx vs0, r4, r3
1956; CHECK-P9-NEXT:    addis r4, r2, GlobSt11@toc@ha
1957; CHECK-P9-NEXT:    addi r4, r4, GlobSt11@toc@l
1958; CHECK-P9-NEXT:    stxvx vs0, r4, r3
1959; CHECK-P9-NEXT:    blr
1960;
1961; CHECK-P8-LE-LABEL: testGlob11PtrPlusVar:
1962; CHECK-P8-LE:       # %bb.0: # %entry
1963; CHECK-P8-LE-NEXT:    addis r4, r2, GlobLd11@toc@ha
1964; CHECK-P8-LE-NEXT:    sldi r3, r3, 4
1965; CHECK-P8-LE-NEXT:    addi r4, r4, GlobLd11@toc@l
1966; CHECK-P8-LE-NEXT:    lvx v2, r4, r3
1967; CHECK-P8-LE-NEXT:    addis r4, r2, GlobSt11@toc@ha
1968; CHECK-P8-LE-NEXT:    addi r4, r4, GlobSt11@toc@l
1969; CHECK-P8-LE-NEXT:    stvx v2, r4, r3
1970; CHECK-P8-LE-NEXT:    blr
1971;
1972; CHECK-P8-BE-LABEL: testGlob11PtrPlusVar:
1973; CHECK-P8-BE:       # %bb.0: # %entry
1974; CHECK-P8-BE-NEXT:    addis r4, r2, GlobLd11@toc@ha
1975; CHECK-P8-BE-NEXT:    sldi r3, r3, 4
1976; CHECK-P8-BE-NEXT:    addi r4, r4, GlobLd11@toc@l
1977; CHECK-P8-BE-NEXT:    lxvw4x vs0, r4, r3
1978; CHECK-P8-BE-NEXT:    addis r4, r2, GlobSt11@toc@ha
1979; CHECK-P8-BE-NEXT:    addi r4, r4, GlobSt11@toc@l
1980; CHECK-P8-BE-NEXT:    stxvw4x vs0, r4, r3
1981; CHECK-P8-BE-NEXT:    blr
1982entry:
1983  %arrayidx = getelementptr inbounds [20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd11, i64 0, i64 %Idx
1984  %0 = load <16 x i8>, <16 x i8>* %arrayidx, align 16
1985  %arrayidx1 = getelementptr inbounds [20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt11, i64 0, i64 %Idx
1986  store <16 x i8> %0, <16 x i8>* %arrayidx1, align 16
1987  ret void
1988}
1989
1990; Function Attrs: nofree norecurse nounwind uwtable willreturn
1991define dso_local void @testGlob12PtrPlus0() {
1992; CHECK-P10-LE-LABEL: testGlob12PtrPlus0:
1993; CHECK-P10-LE:       # %bb.0: # %entry
1994; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd12@PCREL(0), 1
1995; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt12@PCREL(0), 1
1996; CHECK-P10-LE-NEXT:    blr
1997;
1998; CHECK-P10-BE-LABEL: testGlob12PtrPlus0:
1999; CHECK-P10-BE:       # %bb.0: # %entry
2000; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2001; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd12@toc@l
2002; CHECK-P10-BE-NEXT:    lxvx vs0, 0, r3
2003; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2004; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt12@toc@l
2005; CHECK-P10-BE-NEXT:    stxvx vs0, 0, r3
2006; CHECK-P10-BE-NEXT:    blr
2007;
2008; CHECK-P9-LABEL: testGlob12PtrPlus0:
2009; CHECK-P9:       # %bb.0: # %entry
2010; CHECK-P9-NEXT:    addis r3, r2, GlobLd12@toc@ha
2011; CHECK-P9-NEXT:    addi r3, r3, GlobLd12@toc@l
2012; CHECK-P9-NEXT:    lxvx vs0, 0, r3
2013; CHECK-P9-NEXT:    addis r3, r2, GlobSt12@toc@ha
2014; CHECK-P9-NEXT:    addi r3, r3, GlobSt12@toc@l
2015; CHECK-P9-NEXT:    stxvx vs0, 0, r3
2016; CHECK-P9-NEXT:    blr
2017;
2018; CHECK-P8-LE-LABEL: testGlob12PtrPlus0:
2019; CHECK-P8-LE:       # %bb.0: # %entry
2020; CHECK-P8-LE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2021; CHECK-P8-LE-NEXT:    addi r3, r3, GlobLd12@toc@l
2022; CHECK-P8-LE-NEXT:    lvx v2, 0, r3
2023; CHECK-P8-LE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2024; CHECK-P8-LE-NEXT:    addi r3, r3, GlobSt12@toc@l
2025; CHECK-P8-LE-NEXT:    stvx v2, 0, r3
2026; CHECK-P8-LE-NEXT:    blr
2027;
2028; CHECK-P8-BE-LABEL: testGlob12PtrPlus0:
2029; CHECK-P8-BE:       # %bb.0: # %entry
2030; CHECK-P8-BE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2031; CHECK-P8-BE-NEXT:    addi r3, r3, GlobLd12@toc@l
2032; CHECK-P8-BE-NEXT:    lxvw4x vs0, 0, r3
2033; CHECK-P8-BE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2034; CHECK-P8-BE-NEXT:    addi r3, r3, GlobSt12@toc@l
2035; CHECK-P8-BE-NEXT:    stxvw4x vs0, 0, r3
2036; CHECK-P8-BE-NEXT:    blr
2037entry:
2038  %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
2039  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
2040  ret void
2041}
2042
2043; Function Attrs: nofree norecurse nounwind uwtable willreturn
2044define dso_local void @testGlob12PtrPlus3() {
2045; CHECK-P10-LE-LABEL: testGlob12PtrPlus3:
2046; CHECK-P10-LE:       # %bb.0: # %entry
2047; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd12@PCREL+3(0), 1
2048; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt12@PCREL+3(0), 1
2049; CHECK-P10-LE-NEXT:    blr
2050;
2051; CHECK-P10-BE-LABEL: testGlob12PtrPlus3:
2052; CHECK-P10-BE:       # %bb.0: # %entry
2053; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2054; CHECK-P10-BE-NEXT:    li r4, 3
2055; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd12@toc@l
2056; CHECK-P10-BE-NEXT:    lxvx vs0, r3, r4
2057; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2058; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt12@toc@l
2059; CHECK-P10-BE-NEXT:    stxvx vs0, r3, r4
2060; CHECK-P10-BE-NEXT:    blr
2061;
2062; CHECK-P9-LABEL: testGlob12PtrPlus3:
2063; CHECK-P9:       # %bb.0: # %entry
2064; CHECK-P9-NEXT:    addis r3, r2, GlobLd12@toc@ha
2065; CHECK-P9-NEXT:    li r4, 3
2066; CHECK-P9-NEXT:    addi r3, r3, GlobLd12@toc@l
2067; CHECK-P9-NEXT:    lxvx vs0, r3, r4
2068; CHECK-P9-NEXT:    addis r3, r2, GlobSt12@toc@ha
2069; CHECK-P9-NEXT:    addi r3, r3, GlobSt12@toc@l
2070; CHECK-P9-NEXT:    stxvx vs0, r3, r4
2071; CHECK-P9-NEXT:    blr
2072;
2073; CHECK-P8-LE-LABEL: testGlob12PtrPlus3:
2074; CHECK-P8-LE:       # %bb.0: # %entry
2075; CHECK-P8-LE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2076; CHECK-P8-LE-NEXT:    li r4, 3
2077; CHECK-P8-LE-NEXT:    addi r3, r3, GlobLd12@toc@l
2078; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
2079; CHECK-P8-LE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2080; CHECK-P8-LE-NEXT:    addi r3, r3, GlobSt12@toc@l
2081; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
2082; CHECK-P8-LE-NEXT:    blr
2083;
2084; CHECK-P8-BE-LABEL: testGlob12PtrPlus3:
2085; CHECK-P8-BE:       # %bb.0: # %entry
2086; CHECK-P8-BE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2087; CHECK-P8-BE-NEXT:    li r4, 3
2088; CHECK-P8-BE-NEXT:    addi r3, r3, GlobLd12@toc@l
2089; CHECK-P8-BE-NEXT:    lxvw4x vs0, r3, r4
2090; CHECK-P8-BE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2091; CHECK-P8-BE-NEXT:    addi r3, r3, GlobSt12@toc@l
2092; CHECK-P8-BE-NEXT:    stxvw4x vs0, r3, r4
2093; CHECK-P8-BE-NEXT:    blr
2094entry:
2095  %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
2096  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
2097  ret void
2098}
2099
2100; Function Attrs: nofree norecurse nounwind uwtable willreturn
2101define dso_local void @testGlob12PtrPlus4() {
2102; CHECK-P10-LE-LABEL: testGlob12PtrPlus4:
2103; CHECK-P10-LE:       # %bb.0: # %entry
2104; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd12@PCREL+4(0), 1
2105; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt12@PCREL+4(0), 1
2106; CHECK-P10-LE-NEXT:    blr
2107;
2108; CHECK-P10-BE-LABEL: testGlob12PtrPlus4:
2109; CHECK-P10-BE:       # %bb.0: # %entry
2110; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2111; CHECK-P10-BE-NEXT:    li r4, 4
2112; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd12@toc@l
2113; CHECK-P10-BE-NEXT:    lxvx vs0, r3, r4
2114; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2115; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt12@toc@l
2116; CHECK-P10-BE-NEXT:    stxvx vs0, r3, r4
2117; CHECK-P10-BE-NEXT:    blr
2118;
2119; CHECK-P9-LABEL: testGlob12PtrPlus4:
2120; CHECK-P9:       # %bb.0: # %entry
2121; CHECK-P9-NEXT:    addis r3, r2, GlobLd12@toc@ha
2122; CHECK-P9-NEXT:    li r4, 4
2123; CHECK-P9-NEXT:    addi r3, r3, GlobLd12@toc@l
2124; CHECK-P9-NEXT:    lxvx vs0, r3, r4
2125; CHECK-P9-NEXT:    addis r3, r2, GlobSt12@toc@ha
2126; CHECK-P9-NEXT:    addi r3, r3, GlobSt12@toc@l
2127; CHECK-P9-NEXT:    stxvx vs0, r3, r4
2128; CHECK-P9-NEXT:    blr
2129;
2130; CHECK-P8-LE-LABEL: testGlob12PtrPlus4:
2131; CHECK-P8-LE:       # %bb.0: # %entry
2132; CHECK-P8-LE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2133; CHECK-P8-LE-NEXT:    li r4, 4
2134; CHECK-P8-LE-NEXT:    addi r3, r3, GlobLd12@toc@l
2135; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
2136; CHECK-P8-LE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2137; CHECK-P8-LE-NEXT:    addi r3, r3, GlobSt12@toc@l
2138; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
2139; CHECK-P8-LE-NEXT:    blr
2140;
2141; CHECK-P8-BE-LABEL: testGlob12PtrPlus4:
2142; CHECK-P8-BE:       # %bb.0: # %entry
2143; CHECK-P8-BE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2144; CHECK-P8-BE-NEXT:    li r4, 4
2145; CHECK-P8-BE-NEXT:    addi r3, r3, GlobLd12@toc@l
2146; CHECK-P8-BE-NEXT:    lxvw4x vs0, r3, r4
2147; CHECK-P8-BE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2148; CHECK-P8-BE-NEXT:    addi r3, r3, GlobSt12@toc@l
2149; CHECK-P8-BE-NEXT:    stxvw4x vs0, r3, r4
2150; CHECK-P8-BE-NEXT:    blr
2151entry:
2152  %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
2153  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
2154  ret void
2155}
2156
2157; Function Attrs: nofree norecurse nounwind uwtable willreturn
2158define dso_local void @testGlob12PtrPlus16() {
2159; CHECK-P10-LE-LABEL: testGlob12PtrPlus16:
2160; CHECK-P10-LE:       # %bb.0: # %entry
2161; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd12@PCREL+16(0), 1
2162; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt12@PCREL+16(0), 1
2163; CHECK-P10-LE-NEXT:    blr
2164;
2165; CHECK-P10-BE-LABEL: testGlob12PtrPlus16:
2166; CHECK-P10-BE:       # %bb.0: # %entry
2167; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2168; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd12@toc@l
2169; CHECK-P10-BE-NEXT:    lxv vs0, 16(r3)
2170; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2171; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt12@toc@l
2172; CHECK-P10-BE-NEXT:    stxv vs0, 16(r3)
2173; CHECK-P10-BE-NEXT:    blr
2174;
2175; CHECK-P9-LABEL: testGlob12PtrPlus16:
2176; CHECK-P9:       # %bb.0: # %entry
2177; CHECK-P9-NEXT:    addis r3, r2, GlobLd12@toc@ha
2178; CHECK-P9-NEXT:    addi r3, r3, GlobLd12@toc@l
2179; CHECK-P9-NEXT:    lxv vs0, 16(r3)
2180; CHECK-P9-NEXT:    addis r3, r2, GlobSt12@toc@ha
2181; CHECK-P9-NEXT:    addi r3, r3, GlobSt12@toc@l
2182; CHECK-P9-NEXT:    stxv vs0, 16(r3)
2183; CHECK-P9-NEXT:    blr
2184;
2185; CHECK-P8-LE-LABEL: testGlob12PtrPlus16:
2186; CHECK-P8-LE:       # %bb.0: # %entry
2187; CHECK-P8-LE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2188; CHECK-P8-LE-NEXT:    li r4, 16
2189; CHECK-P8-LE-NEXT:    addi r3, r3, GlobLd12@toc@l
2190; CHECK-P8-LE-NEXT:    lvx v2, r3, r4
2191; CHECK-P8-LE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2192; CHECK-P8-LE-NEXT:    addi r3, r3, GlobSt12@toc@l
2193; CHECK-P8-LE-NEXT:    stvx v2, r3, r4
2194; CHECK-P8-LE-NEXT:    blr
2195;
2196; CHECK-P8-BE-LABEL: testGlob12PtrPlus16:
2197; CHECK-P8-BE:       # %bb.0: # %entry
2198; CHECK-P8-BE-NEXT:    addis r3, r2, GlobLd12@toc@ha
2199; CHECK-P8-BE-NEXT:    li r4, 16
2200; CHECK-P8-BE-NEXT:    addi r3, r3, GlobLd12@toc@l
2201; CHECK-P8-BE-NEXT:    lxvw4x vs0, r3, r4
2202; CHECK-P8-BE-NEXT:    addis r3, r2, GlobSt12@toc@ha
2203; CHECK-P8-BE-NEXT:    addi r3, r3, GlobSt12@toc@l
2204; CHECK-P8-BE-NEXT:    stxvw4x vs0, r3, r4
2205; CHECK-P8-BE-NEXT:    blr
2206entry:
2207  %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
2208  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
2209  ret void
2210}
2211
2212; Function Attrs: nofree norecurse nounwind uwtable willreturn
2213define dso_local void @testGlob12PtrPlusVar(i64 %Idx) {
2214; CHECK-P10-LE-LABEL: testGlob12PtrPlusVar:
2215; CHECK-P10-LE:       # %bb.0: # %entry
2216; CHECK-P10-LE-NEXT:    sldi r3, r3, 4
2217; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd12@PCREL, 1
2218; CHECK-P10-LE-NEXT:    lxvx vs0, r4, r3
2219; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobSt12@PCREL, 1
2220; CHECK-P10-LE-NEXT:    stxvx vs0, r4, r3
2221; CHECK-P10-LE-NEXT:    blr
2222;
2223; CHECK-P10-BE-LABEL: testGlob12PtrPlusVar:
2224; CHECK-P10-BE:       # %bb.0: # %entry
2225; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd12@toc@ha
2226; CHECK-P10-BE-NEXT:    sldi r3, r3, 4
2227; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd12@toc@l
2228; CHECK-P10-BE-NEXT:    lxvx vs0, r4, r3
2229; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt12@toc@ha
2230; CHECK-P10-BE-NEXT:    addi r4, r4, GlobSt12@toc@l
2231; CHECK-P10-BE-NEXT:    stxvx vs0, r4, r3
2232; CHECK-P10-BE-NEXT:    blr
2233;
2234; CHECK-P9-LABEL: testGlob12PtrPlusVar:
2235; CHECK-P9:       # %bb.0: # %entry
2236; CHECK-P9-NEXT:    addis r4, r2, GlobLd12@toc@ha
2237; CHECK-P9-NEXT:    sldi r3, r3, 4
2238; CHECK-P9-NEXT:    addi r4, r4, GlobLd12@toc@l
2239; CHECK-P9-NEXT:    lxvx vs0, r4, r3
2240; CHECK-P9-NEXT:    addis r4, r2, GlobSt12@toc@ha
2241; CHECK-P9-NEXT:    addi r4, r4, GlobSt12@toc@l
2242; CHECK-P9-NEXT:    stxvx vs0, r4, r3
2243; CHECK-P9-NEXT:    blr
2244;
2245; CHECK-P8-LE-LABEL: testGlob12PtrPlusVar:
2246; CHECK-P8-LE:       # %bb.0: # %entry
2247; CHECK-P8-LE-NEXT:    addis r4, r2, GlobLd12@toc@ha
2248; CHECK-P8-LE-NEXT:    sldi r3, r3, 4
2249; CHECK-P8-LE-NEXT:    addi r4, r4, GlobLd12@toc@l
2250; CHECK-P8-LE-NEXT:    lvx v2, r4, r3
2251; CHECK-P8-LE-NEXT:    addis r4, r2, GlobSt12@toc@ha
2252; CHECK-P8-LE-NEXT:    addi r4, r4, GlobSt12@toc@l
2253; CHECK-P8-LE-NEXT:    stvx v2, r4, r3
2254; CHECK-P8-LE-NEXT:    blr
2255;
2256; CHECK-P8-BE-LABEL: testGlob12PtrPlusVar:
2257; CHECK-P8-BE:       # %bb.0: # %entry
2258; CHECK-P8-BE-NEXT:    addis r4, r2, GlobLd12@toc@ha
2259; CHECK-P8-BE-NEXT:    sldi r3, r3, 4
2260; CHECK-P8-BE-NEXT:    addi r4, r4, GlobLd12@toc@l
2261; CHECK-P8-BE-NEXT:    lxvw4x vs0, r4, r3
2262; CHECK-P8-BE-NEXT:    addis r4, r2, GlobSt12@toc@ha
2263; CHECK-P8-BE-NEXT:    addi r4, r4, GlobSt12@toc@l
2264; CHECK-P8-BE-NEXT:    stxvw4x vs0, r4, r3
2265; CHECK-P8-BE-NEXT:    blr
2266entry:
2267  %arrayidx = getelementptr inbounds [20 x <16 x i8>], [20 x <16 x i8>]* @GlobLd12, i64 0, i64 %Idx
2268  %0 = load <16 x i8>, <16 x i8>* %arrayidx, align 16
2269  %arrayidx1 = getelementptr inbounds [20 x <16 x i8>], [20 x <16 x i8>]* @GlobSt12, i64 0, i64 %Idx
2270  store <16 x i8> %0, <16 x i8>* %arrayidx1, align 16
2271  ret void
2272}
2273