[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / vector-ldst.ll
blobd756ad5edf6b9123105e28968a9d6794d3fd827c
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-prefixes=CHECK,CHECK-P10
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-prefixes=CHECK,CHECK-P10
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-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-P8-BE
21 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
22 define dso_local <16 x i8> @ld_0_vector(i64 %ptr) {
23 ; CHECK-LABEL: ld_0_vector:
24 ; CHECK:       # %bb.0: # %entry
25 ; CHECK-NEXT:    lxv v2, 0(r3)
26 ; CHECK-NEXT:    blr
28 ; CHECK-P8-LE-LABEL: ld_0_vector:
29 ; CHECK-P8-LE:       # %bb.0: # %entry
30 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
31 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
32 ; CHECK-P8-LE-NEXT:    blr
34 ; CHECK-P8-BE-LABEL: ld_0_vector:
35 ; CHECK-P8-BE:       # %bb.0: # %entry
36 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
37 ; CHECK-P8-BE-NEXT:    blr
38 entry:
39   %0 = inttoptr i64 %ptr to ptr
40   %1 = load <16 x i8>, ptr %0, align 16
41   ret <16 x i8> %1
44 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
45 define dso_local <16 x i8> @ld_unalign16_vector(ptr nocapture readonly %ptr) {
46 ; CHECK-P10-LABEL: ld_unalign16_vector:
47 ; CHECK-P10:       # %bb.0: # %entry
48 ; CHECK-P10-NEXT:    plxv v2, 1(r3), 0
49 ; CHECK-P10-NEXT:    blr
51 ; CHECK-P9-LABEL: ld_unalign16_vector:
52 ; CHECK-P9:       # %bb.0: # %entry
53 ; CHECK-P9-NEXT:    li r4, 1
54 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
55 ; CHECK-P9-NEXT:    blr
57 ; CHECK-P8-LE-LABEL: ld_unalign16_vector:
58 ; CHECK-P8-LE:       # %bb.0: # %entry
59 ; CHECK-P8-LE-NEXT:    addi r3, r3, 1
60 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
61 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
62 ; CHECK-P8-LE-NEXT:    blr
64 ; CHECK-P8-BE-LABEL: ld_unalign16_vector:
65 ; CHECK-P8-BE:       # %bb.0: # %entry
66 ; CHECK-P8-BE-NEXT:    addi r3, r3, 1
67 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
68 ; CHECK-P8-BE-NEXT:    blr
69 entry:
70   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1
71   %0 = load <16 x i8>, ptr %add.ptr, align 16
72   ret <16 x i8> %0
75 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
76 define dso_local <16 x i8> @ld_align16_vector(ptr nocapture readonly %ptr) {
77 ; CHECK-P10-LABEL: ld_align16_vector:
78 ; CHECK-P10:       # %bb.0: # %entry
79 ; CHECK-P10-NEXT:    plxv v2, 8(r3), 0
80 ; CHECK-P10-NEXT:    blr
82 ; CHECK-P9-LABEL: ld_align16_vector:
83 ; CHECK-P9:       # %bb.0: # %entry
84 ; CHECK-P9-NEXT:    li r4, 8
85 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
86 ; CHECK-P9-NEXT:    blr
88 ; CHECK-P8-LE-LABEL: ld_align16_vector:
89 ; CHECK-P8-LE:       # %bb.0: # %entry
90 ; CHECK-P8-LE-NEXT:    addi r3, r3, 8
91 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
92 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
93 ; CHECK-P8-LE-NEXT:    blr
95 ; CHECK-P8-BE-LABEL: ld_align16_vector:
96 ; CHECK-P8-BE:       # %bb.0: # %entry
97 ; CHECK-P8-BE-NEXT:    addi r3, r3, 8
98 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
99 ; CHECK-P8-BE-NEXT:    blr
100 entry:
101   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
102   %0 = load <16 x i8>, ptr %add.ptr, align 16
103   ret <16 x i8> %0
106 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
107 define dso_local <16 x i8> @ld_unalign32_vector(ptr nocapture readonly %ptr) {
108 ; CHECK-P10-LABEL: ld_unalign32_vector:
109 ; CHECK-P10:       # %bb.0: # %entry
110 ; CHECK-P10-NEXT:    plxv v2, 99999(r3), 0
111 ; CHECK-P10-NEXT:    blr
113 ; CHECK-P9-LABEL: ld_unalign32_vector:
114 ; CHECK-P9:       # %bb.0: # %entry
115 ; CHECK-P9-NEXT:    lis r4, 1
116 ; CHECK-P9-NEXT:    ori r4, r4, 34463
117 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
118 ; CHECK-P9-NEXT:    blr
120 ; CHECK-P8-LE-LABEL: ld_unalign32_vector:
121 ; CHECK-P8-LE:       # %bb.0: # %entry
122 ; CHECK-P8-LE-NEXT:    lis r4, 1
123 ; CHECK-P8-LE-NEXT:    ori r4, r4, 34463
124 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
125 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
126 ; CHECK-P8-LE-NEXT:    blr
128 ; CHECK-P8-BE-LABEL: ld_unalign32_vector:
129 ; CHECK-P8-BE:       # %bb.0: # %entry
130 ; CHECK-P8-BE-NEXT:    lis r4, 1
131 ; CHECK-P8-BE-NEXT:    ori r4, r4, 34463
132 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
133 ; CHECK-P8-BE-NEXT:    blr
134 entry:
135   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999
136   %0 = load <16 x i8>, ptr %add.ptr, align 16
137   ret <16 x i8> %0
140 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
141 define dso_local <16 x i8> @ld_align32_vector(ptr nocapture readonly %ptr) {
142 ; CHECK-P10-LABEL: ld_align32_vector:
143 ; CHECK-P10:       # %bb.0: # %entry
144 ; CHECK-P10-NEXT:    plxv v2, 99999000(r3), 0
145 ; CHECK-P10-NEXT:    blr
147 ; CHECK-P9-LABEL: ld_align32_vector:
148 ; CHECK-P9:       # %bb.0: # %entry
149 ; CHECK-P9-NEXT:    lis r4, 1525
150 ; CHECK-P9-NEXT:    ori r4, r4, 56600
151 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
152 ; CHECK-P9-NEXT:    blr
154 ; CHECK-P8-LE-LABEL: ld_align32_vector:
155 ; CHECK-P8-LE:       # %bb.0: # %entry
156 ; CHECK-P8-LE-NEXT:    lis r4, 1525
157 ; CHECK-P8-LE-NEXT:    ori r4, r4, 56600
158 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
159 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
160 ; CHECK-P8-LE-NEXT:    blr
162 ; CHECK-P8-BE-LABEL: ld_align32_vector:
163 ; CHECK-P8-BE:       # %bb.0: # %entry
164 ; CHECK-P8-BE-NEXT:    lis r4, 1525
165 ; CHECK-P8-BE-NEXT:    ori r4, r4, 56600
166 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
167 ; CHECK-P8-BE-NEXT:    blr
168 entry:
169   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
170   %0 = load <16 x i8>, ptr %add.ptr, align 16
171   ret <16 x i8> %0
174 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
175 define dso_local <16 x i8> @ld_unalign64_vector(ptr nocapture readonly %ptr) {
176 ; CHECK-P10-LABEL: ld_unalign64_vector:
177 ; CHECK-P10:       # %bb.0: # %entry
178 ; CHECK-P10-NEXT:    pli r4, 232
179 ; CHECK-P10-NEXT:    pli r5, 3567587329
180 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
181 ; CHECK-P10-NEXT:    lxvx v2, r3, r5
182 ; CHECK-P10-NEXT:    blr
184 ; CHECK-P9-LABEL: ld_unalign64_vector:
185 ; CHECK-P9:       # %bb.0: # %entry
186 ; CHECK-P9-NEXT:    li r4, 29
187 ; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
188 ; CHECK-P9-NEXT:    oris r4, r4, 54437
189 ; CHECK-P9-NEXT:    ori r4, r4, 4097
190 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
191 ; CHECK-P9-NEXT:    blr
193 ; CHECK-P8-LE-LABEL: ld_unalign64_vector:
194 ; CHECK-P8-LE:       # %bb.0: # %entry
195 ; CHECK-P8-LE-NEXT:    li r4, 29
196 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
197 ; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
198 ; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
199 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
200 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
201 ; CHECK-P8-LE-NEXT:    blr
203 ; CHECK-P8-BE-LABEL: ld_unalign64_vector:
204 ; CHECK-P8-BE:       # %bb.0: # %entry
205 ; CHECK-P8-BE-NEXT:    li r4, 29
206 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
207 ; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
208 ; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
209 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
210 ; CHECK-P8-BE-NEXT:    blr
211 entry:
212   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001
213   %0 = load <16 x i8>, ptr %add.ptr, align 16
214   ret <16 x i8> %0
217 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
218 define dso_local <16 x i8> @ld_align64_vector(ptr nocapture readonly %ptr) {
219 ; CHECK-P10-LABEL: ld_align64_vector:
220 ; CHECK-P10:       # %bb.0: # %entry
221 ; CHECK-P10-NEXT:    pli r4, 244140625
222 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
223 ; CHECK-P10-NEXT:    lxvx v2, r3, r4
224 ; CHECK-P10-NEXT:    blr
226 ; CHECK-P9-LABEL: ld_align64_vector:
227 ; CHECK-P9:       # %bb.0: # %entry
228 ; CHECK-P9-NEXT:    lis r4, 3725
229 ; CHECK-P9-NEXT:    ori r4, r4, 19025
230 ; CHECK-P9-NEXT:    rldic r4, r4, 12, 24
231 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
232 ; CHECK-P9-NEXT:    blr
234 ; CHECK-P8-LE-LABEL: ld_align64_vector:
235 ; CHECK-P8-LE:       # %bb.0: # %entry
236 ; CHECK-P8-LE-NEXT:    lis r4, 3725
237 ; CHECK-P8-LE-NEXT:    ori r4, r4, 19025
238 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 12, 24
239 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
240 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
241 ; CHECK-P8-LE-NEXT:    blr
243 ; CHECK-P8-BE-LABEL: ld_align64_vector:
244 ; CHECK-P8-BE:       # %bb.0: # %entry
245 ; CHECK-P8-BE-NEXT:    lis r4, 3725
246 ; CHECK-P8-BE-NEXT:    ori r4, r4, 19025
247 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 12, 24
248 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
249 ; CHECK-P8-BE-NEXT:    blr
250 entry:
251   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
252   %0 = load <16 x i8>, ptr %add.ptr, align 16
253   ret <16 x i8> %0
256 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
257 define dso_local <16 x i8> @ld_reg_vector(ptr nocapture readonly %ptr, i64 %off) {
258 ; CHECK-LABEL: ld_reg_vector:
259 ; CHECK:       # %bb.0: # %entry
260 ; CHECK-NEXT:    lxvx v2, r3, r4
261 ; CHECK-NEXT:    blr
263 ; CHECK-P8-LE-LABEL: ld_reg_vector:
264 ; CHECK-P8-LE:       # %bb.0: # %entry
265 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
266 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
267 ; CHECK-P8-LE-NEXT:    blr
269 ; CHECK-P8-BE-LABEL: ld_reg_vector:
270 ; CHECK-P8-BE:       # %bb.0: # %entry
271 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
272 ; CHECK-P8-BE-NEXT:    blr
273 entry:
274   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
275   %0 = load <16 x i8>, ptr %add.ptr, align 16
276   ret <16 x i8> %0
279 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
280 define dso_local <16 x i8> @ld_or_vector(i64 %ptr, i8 zeroext %off) {
281 ; CHECK-LABEL: ld_or_vector:
282 ; CHECK:       # %bb.0: # %entry
283 ; CHECK-NEXT:    or r3, r4, r3
284 ; CHECK-NEXT:    lxv v2, 0(r3)
285 ; CHECK-NEXT:    blr
287 ; CHECK-P8-LE-LABEL: ld_or_vector:
288 ; CHECK-P8-LE:       # %bb.0: # %entry
289 ; CHECK-P8-LE-NEXT:    or r3, r4, r3
290 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
291 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
292 ; CHECK-P8-LE-NEXT:    blr
294 ; CHECK-P8-BE-LABEL: ld_or_vector:
295 ; CHECK-P8-BE:       # %bb.0: # %entry
296 ; CHECK-P8-BE-NEXT:    or r3, r4, r3
297 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
298 ; CHECK-P8-BE-NEXT:    blr
299 entry:
300   %conv = zext i8 %off to i64
301   %or = or i64 %conv, %ptr
302   %0 = inttoptr i64 %or to ptr
303   %1 = load <16 x i8>, ptr %0, align 16
304   ret <16 x i8> %1
307 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
308 define dso_local <16 x i8> @ld_or2_vector(i64 %ptr, i8 zeroext %off) {
309 ; CHECK-LABEL: ld_or2_vector:
310 ; CHECK:       # %bb.0: # %entry
311 ; CHECK-NEXT:    rldicr r3, r3, 0, 51
312 ; CHECK-NEXT:    lxvx v2, r3, r4
313 ; CHECK-NEXT:    blr
315 ; CHECK-P8-LE-LABEL: ld_or2_vector:
316 ; CHECK-P8-LE:       # %bb.0: # %entry
317 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
318 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
319 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
320 ; CHECK-P8-LE-NEXT:    blr
322 ; CHECK-P8-BE-LABEL: ld_or2_vector:
323 ; CHECK-P8-BE:       # %bb.0: # %entry
324 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
325 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
326 ; CHECK-P8-BE-NEXT:    blr
327 entry:
328   %and = and i64 %ptr, -4096
329   %conv = zext i8 %off to i64
330   %or = or i64 %and, %conv
331   %0 = inttoptr i64 %or to ptr
332   %1 = load <16 x i8>, ptr %0, align 16
333   ret <16 x i8> %1
336 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
337 define dso_local <16 x i8> @ld_not_disjoint16_vector(i64 %ptr) {
338 ; CHECK-LABEL: ld_not_disjoint16_vector:
339 ; CHECK:       # %bb.0: # %entry
340 ; CHECK-NEXT:    ori r3, r3, 6
341 ; CHECK-NEXT:    lxv v2, 0(r3)
342 ; CHECK-NEXT:    blr
344 ; CHECK-P8-LE-LABEL: ld_not_disjoint16_vector:
345 ; CHECK-P8-LE:       # %bb.0: # %entry
346 ; CHECK-P8-LE-NEXT:    ori r3, r3, 6
347 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
348 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
349 ; CHECK-P8-LE-NEXT:    blr
351 ; CHECK-P8-BE-LABEL: ld_not_disjoint16_vector:
352 ; CHECK-P8-BE:       # %bb.0: # %entry
353 ; CHECK-P8-BE-NEXT:    ori r3, r3, 6
354 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
355 ; CHECK-P8-BE-NEXT:    blr
356 entry:
357   %or = or i64 %ptr, 6
358   %0 = inttoptr i64 %or to ptr
359   %1 = load <16 x i8>, ptr %0, align 16
360   ret <16 x i8> %1
363 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
364 define dso_local <16 x i8> @ld_disjoint_unalign16_vector(i64 %ptr) {
365 ; CHECK-P10-LABEL: ld_disjoint_unalign16_vector:
366 ; CHECK-P10:       # %bb.0: # %entry
367 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
368 ; CHECK-P10-NEXT:    plxv v2, 6(r3), 0
369 ; CHECK-P10-NEXT:    blr
371 ; CHECK-P9-LABEL: ld_disjoint_unalign16_vector:
372 ; CHECK-P9:       # %bb.0: # %entry
373 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 51
374 ; CHECK-P9-NEXT:    li r4, 6
375 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
376 ; CHECK-P9-NEXT:    blr
378 ; CHECK-P8-LE-LABEL: ld_disjoint_unalign16_vector:
379 ; CHECK-P8-LE:       # %bb.0: # %entry
380 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
381 ; CHECK-P8-LE-NEXT:    ori r3, r3, 6
382 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
383 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
384 ; CHECK-P8-LE-NEXT:    blr
386 ; CHECK-P8-BE-LABEL: ld_disjoint_unalign16_vector:
387 ; CHECK-P8-BE:       # %bb.0: # %entry
388 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
389 ; CHECK-P8-BE-NEXT:    ori r3, r3, 6
390 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
391 ; CHECK-P8-BE-NEXT:    blr
392 entry:
393   %and = and i64 %ptr, -4096
394   %or = or i64 %and, 6
395   %0 = inttoptr i64 %or to ptr
396   %1 = load <16 x i8>, ptr %0, align 16
397   ret <16 x i8> %1
400 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
401 define dso_local <16 x i8> @ld_disjoint_align16_vector(i64 %ptr) {
402 ; CHECK-P10-LABEL: ld_disjoint_align16_vector:
403 ; CHECK-P10:       # %bb.0: # %entry
404 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
405 ; CHECK-P10-NEXT:    plxv v2, 24(r3), 0
406 ; CHECK-P10-NEXT:    blr
408 ; CHECK-P9-LABEL: ld_disjoint_align16_vector:
409 ; CHECK-P9:       # %bb.0: # %entry
410 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 51
411 ; CHECK-P9-NEXT:    li r4, 24
412 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
413 ; CHECK-P9-NEXT:    blr
415 ; CHECK-P8-LE-LABEL: ld_disjoint_align16_vector:
416 ; CHECK-P8-LE:       # %bb.0: # %entry
417 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
418 ; CHECK-P8-LE-NEXT:    ori r3, r3, 24
419 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
420 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
421 ; CHECK-P8-LE-NEXT:    blr
423 ; CHECK-P8-BE-LABEL: ld_disjoint_align16_vector:
424 ; CHECK-P8-BE:       # %bb.0: # %entry
425 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
426 ; CHECK-P8-BE-NEXT:    ori r3, r3, 24
427 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
428 ; CHECK-P8-BE-NEXT:    blr
429 entry:
430   %and = and i64 %ptr, -4096
431   %or = or i64 %and, 24
432   %0 = inttoptr i64 %or to ptr
433   %1 = load <16 x i8>, ptr %0, align 16
434   ret <16 x i8> %1
437 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
438 define dso_local <16 x i8> @ld_not_disjoint32_vector(i64 %ptr) {
439 ; CHECK-LABEL: ld_not_disjoint32_vector:
440 ; CHECK:       # %bb.0: # %entry
441 ; CHECK-NEXT:    ori r3, r3, 34463
442 ; CHECK-NEXT:    oris r3, r3, 1
443 ; CHECK-NEXT:    lxv v2, 0(r3)
444 ; CHECK-NEXT:    blr
446 ; CHECK-P8-LE-LABEL: ld_not_disjoint32_vector:
447 ; CHECK-P8-LE:       # %bb.0: # %entry
448 ; CHECK-P8-LE-NEXT:    ori r3, r3, 34463
449 ; CHECK-P8-LE-NEXT:    oris r3, r3, 1
450 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
451 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
452 ; CHECK-P8-LE-NEXT:    blr
454 ; CHECK-P8-BE-LABEL: ld_not_disjoint32_vector:
455 ; CHECK-P8-BE:       # %bb.0: # %entry
456 ; CHECK-P8-BE-NEXT:    ori r3, r3, 34463
457 ; CHECK-P8-BE-NEXT:    oris r3, r3, 1
458 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
459 ; CHECK-P8-BE-NEXT:    blr
460 entry:
461   %or = or i64 %ptr, 99999
462   %0 = inttoptr i64 %or to ptr
463   %1 = load <16 x i8>, ptr %0, align 16
464   ret <16 x i8> %1
467 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
468 define dso_local <16 x i8> @ld_disjoint_unalign32_vector(i64 %ptr) {
469 ; CHECK-P10-LABEL: ld_disjoint_unalign32_vector:
470 ; CHECK-P10:       # %bb.0: # %entry
471 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 43
472 ; CHECK-P10-NEXT:    plxv v2, 99999(r3), 0
473 ; CHECK-P10-NEXT:    blr
475 ; CHECK-P9-LABEL: ld_disjoint_unalign32_vector:
476 ; CHECK-P9:       # %bb.0: # %entry
477 ; CHECK-P9-NEXT:    lis r4, 1
478 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 43
479 ; CHECK-P9-NEXT:    ori r4, r4, 34463
480 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
481 ; CHECK-P9-NEXT:    blr
483 ; CHECK-P8-LE-LABEL: ld_disjoint_unalign32_vector:
484 ; CHECK-P8-LE:       # %bb.0: # %entry
485 ; CHECK-P8-LE-NEXT:    lis r4, 1
486 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 43
487 ; CHECK-P8-LE-NEXT:    ori r4, r4, 34463
488 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
489 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
490 ; CHECK-P8-LE-NEXT:    blr
492 ; CHECK-P8-BE-LABEL: ld_disjoint_unalign32_vector:
493 ; CHECK-P8-BE:       # %bb.0: # %entry
494 ; CHECK-P8-BE-NEXT:    lis r4, 1
495 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 43
496 ; CHECK-P8-BE-NEXT:    ori r4, r4, 34463
497 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
498 ; CHECK-P8-BE-NEXT:    blr
499 entry:
500   %and = and i64 %ptr, -1048576
501   %or = or i64 %and, 99999
502   %0 = inttoptr i64 %or to ptr
503   %1 = load <16 x i8>, ptr %0, align 16
504   ret <16 x i8> %1
507 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
508 define dso_local <16 x i8> @ld_disjoint_align32_vector(i64 %ptr) {
509 ; CHECK-P10-LABEL: ld_disjoint_align32_vector:
510 ; CHECK-P10:       # %bb.0: # %entry
511 ; CHECK-P10-NEXT:    lis r4, -15264
512 ; CHECK-P10-NEXT:    and r3, r3, r4
513 ; CHECK-P10-NEXT:    plxv v2, 999990000(r3), 0
514 ; CHECK-P10-NEXT:    blr
516 ; CHECK-P9-LABEL: ld_disjoint_align32_vector:
517 ; CHECK-P9:       # %bb.0: # %entry
518 ; CHECK-P9-NEXT:    lis r4, -15264
519 ; CHECK-P9-NEXT:    and r3, r3, r4
520 ; CHECK-P9-NEXT:    lis r4, 15258
521 ; CHECK-P9-NEXT:    ori r4, r4, 41712
522 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
523 ; CHECK-P9-NEXT:    blr
525 ; CHECK-P8-LE-LABEL: ld_disjoint_align32_vector:
526 ; CHECK-P8-LE:       # %bb.0: # %entry
527 ; CHECK-P8-LE-NEXT:    lis r4, -15264
528 ; CHECK-P8-LE-NEXT:    and r3, r3, r4
529 ; CHECK-P8-LE-NEXT:    lis r4, 15258
530 ; CHECK-P8-LE-NEXT:    ori r4, r4, 41712
531 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
532 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
533 ; CHECK-P8-LE-NEXT:    blr
535 ; CHECK-P8-BE-LABEL: ld_disjoint_align32_vector:
536 ; CHECK-P8-BE:       # %bb.0: # %entry
537 ; CHECK-P8-BE-NEXT:    lis r4, -15264
538 ; CHECK-P8-BE-NEXT:    and r3, r3, r4
539 ; CHECK-P8-BE-NEXT:    lis r4, 15258
540 ; CHECK-P8-BE-NEXT:    ori r4, r4, 41712
541 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
542 ; CHECK-P8-BE-NEXT:    blr
543 entry:
544   %and = and i64 %ptr, -1000341504
545   %or = or i64 %and, 999990000
546   %0 = inttoptr i64 %or to ptr
547   %1 = load <16 x i8>, ptr %0, align 16
548   ret <16 x i8> %1
551 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
552 define dso_local <16 x i8> @ld_not_disjoint64_vector(i64 %ptr) {
553 ; CHECK-P10-LABEL: ld_not_disjoint64_vector:
554 ; CHECK-P10:       # %bb.0: # %entry
555 ; CHECK-P10-NEXT:    pli r4, 232
556 ; CHECK-P10-NEXT:    pli r5, 3567587329
557 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
558 ; CHECK-P10-NEXT:    or r3, r3, r5
559 ; CHECK-P10-NEXT:    lxv v2, 0(r3)
560 ; CHECK-P10-NEXT:    blr
562 ; CHECK-P9-LABEL: ld_not_disjoint64_vector:
563 ; CHECK-P9:       # %bb.0: # %entry
564 ; CHECK-P9-NEXT:    li r4, 29
565 ; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
566 ; CHECK-P9-NEXT:    oris r4, r4, 54437
567 ; CHECK-P9-NEXT:    ori r4, r4, 4097
568 ; CHECK-P9-NEXT:    or r3, r3, r4
569 ; CHECK-P9-NEXT:    lxv v2, 0(r3)
570 ; CHECK-P9-NEXT:    blr
572 ; CHECK-P8-LE-LABEL: ld_not_disjoint64_vector:
573 ; CHECK-P8-LE:       # %bb.0: # %entry
574 ; CHECK-P8-LE-NEXT:    li r4, 29
575 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
576 ; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
577 ; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
578 ; CHECK-P8-LE-NEXT:    or r3, r3, r4
579 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
580 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
581 ; CHECK-P8-LE-NEXT:    blr
583 ; CHECK-P8-BE-LABEL: ld_not_disjoint64_vector:
584 ; CHECK-P8-BE:       # %bb.0: # %entry
585 ; CHECK-P8-BE-NEXT:    li r4, 29
586 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
587 ; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
588 ; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
589 ; CHECK-P8-BE-NEXT:    or r3, r3, r4
590 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
591 ; CHECK-P8-BE-NEXT:    blr
592 entry:
593   %or = or i64 %ptr, 1000000000001
594   %0 = inttoptr i64 %or to ptr
595   %1 = load <16 x i8>, ptr %0, align 16
596   ret <16 x i8> %1
599 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
600 define dso_local <16 x i8> @ld_disjoint_unalign64_vector(i64 %ptr) {
601 ; CHECK-P10-LABEL: ld_disjoint_unalign64_vector:
602 ; CHECK-P10:       # %bb.0: # %entry
603 ; CHECK-P10-NEXT:    pli r4, 232
604 ; CHECK-P10-NEXT:    pli r5, 3567587329
605 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
606 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
607 ; CHECK-P10-NEXT:    lxvx v2, r3, r5
608 ; CHECK-P10-NEXT:    blr
610 ; CHECK-P9-LABEL: ld_disjoint_unalign64_vector:
611 ; CHECK-P9:       # %bb.0: # %entry
612 ; CHECK-P9-NEXT:    li r4, 29
613 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
614 ; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
615 ; CHECK-P9-NEXT:    oris r4, r4, 54437
616 ; CHECK-P9-NEXT:    ori r4, r4, 4097
617 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
618 ; CHECK-P9-NEXT:    blr
620 ; CHECK-P8-LE-LABEL: ld_disjoint_unalign64_vector:
621 ; CHECK-P8-LE:       # %bb.0: # %entry
622 ; CHECK-P8-LE-NEXT:    li r4, 29
623 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 23
624 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
625 ; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
626 ; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
627 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
628 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
629 ; CHECK-P8-LE-NEXT:    blr
631 ; CHECK-P8-BE-LABEL: ld_disjoint_unalign64_vector:
632 ; CHECK-P8-BE:       # %bb.0: # %entry
633 ; CHECK-P8-BE-NEXT:    li r4, 29
634 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 23
635 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
636 ; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
637 ; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
638 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
639 ; CHECK-P8-BE-NEXT:    blr
640 entry:
641   %and = and i64 %ptr, -1099511627776
642   %or = or i64 %and, 1000000000001
643   %0 = inttoptr i64 %or to ptr
644   %1 = load <16 x i8>, ptr %0, align 16
645   ret <16 x i8> %1
648 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
649 define dso_local <16 x i8> @ld_disjoint_align64_vector(i64 %ptr) {
650 ; CHECK-P10-LABEL: ld_disjoint_align64_vector:
651 ; CHECK-P10:       # %bb.0: # %entry
652 ; CHECK-P10-NEXT:    pli r4, 244140625
653 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
654 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
655 ; CHECK-P10-NEXT:    lxvx v2, r3, r4
656 ; CHECK-P10-NEXT:    blr
658 ; CHECK-P9-LABEL: ld_disjoint_align64_vector:
659 ; CHECK-P9:       # %bb.0: # %entry
660 ; CHECK-P9-NEXT:    lis r4, 3725
661 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
662 ; CHECK-P9-NEXT:    ori r4, r4, 19025
663 ; CHECK-P9-NEXT:    rldic r4, r4, 12, 24
664 ; CHECK-P9-NEXT:    lxvx v2, r3, r4
665 ; CHECK-P9-NEXT:    blr
667 ; CHECK-P8-LE-LABEL: ld_disjoint_align64_vector:
668 ; CHECK-P8-LE:       # %bb.0: # %entry
669 ; CHECK-P8-LE-NEXT:    lis r4, 3725
670 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 23
671 ; CHECK-P8-LE-NEXT:    ori r4, r4, 19025
672 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 12, 24
673 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, r3, r4
674 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
675 ; CHECK-P8-LE-NEXT:    blr
677 ; CHECK-P8-BE-LABEL: ld_disjoint_align64_vector:
678 ; CHECK-P8-BE:       # %bb.0: # %entry
679 ; CHECK-P8-BE-NEXT:    lis r4, 3725
680 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 23
681 ; CHECK-P8-BE-NEXT:    ori r4, r4, 19025
682 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 12, 24
683 ; CHECK-P8-BE-NEXT:    lxvw4x v2, r3, r4
684 ; CHECK-P8-BE-NEXT:    blr
685 entry:
686   %and = and i64 %ptr, -1099511627776
687   %or = or i64 %and, 1000000000000
688   %0 = inttoptr i64 %or to ptr
689   %1 = load <16 x i8>, ptr %0, align 4096
690   ret <16 x i8> %1
693 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
694 define dso_local <16 x i8> @ld_cst_unalign16_vector() {
695 ; CHECK-LABEL: ld_cst_unalign16_vector:
696 ; CHECK:       # %bb.0: # %entry
697 ; CHECK-NEXT:    li r3, 255
698 ; CHECK-NEXT:    lxv v2, 0(r3)
699 ; CHECK-NEXT:    blr
701 ; CHECK-P8-LE-LABEL: ld_cst_unalign16_vector:
702 ; CHECK-P8-LE:       # %bb.0: # %entry
703 ; CHECK-P8-LE-NEXT:    li r3, 255
704 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
705 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
706 ; CHECK-P8-LE-NEXT:    blr
708 ; CHECK-P8-BE-LABEL: ld_cst_unalign16_vector:
709 ; CHECK-P8-BE:       # %bb.0: # %entry
710 ; CHECK-P8-BE-NEXT:    li r3, 255
711 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
712 ; CHECK-P8-BE-NEXT:    blr
713 entry:
714   %0 = load <16 x i8>, ptr inttoptr (i64 255 to ptr), align 16
715   ret <16 x i8> %0
718 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
719 define dso_local <16 x i8> @ld_cst_align16_vector() {
720 ; CHECK-LABEL: ld_cst_align16_vector:
721 ; CHECK:       # %bb.0: # %entry
722 ; CHECK-NEXT:    lxv v2, 4080(0)
723 ; CHECK-NEXT:    blr
725 ; CHECK-P8-LE-LABEL: ld_cst_align16_vector:
726 ; CHECK-P8-LE:       # %bb.0: # %entry
727 ; CHECK-P8-LE-NEXT:    li r3, 4080
728 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
729 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
730 ; CHECK-P8-LE-NEXT:    blr
732 ; CHECK-P8-BE-LABEL: ld_cst_align16_vector:
733 ; CHECK-P8-BE:       # %bb.0: # %entry
734 ; CHECK-P8-BE-NEXT:    li r3, 4080
735 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
736 ; CHECK-P8-BE-NEXT:    blr
737 entry:
738   %0 = load <16 x i8>, ptr inttoptr (i64 4080 to ptr), align 16
739   ret <16 x i8> %0
742 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
743 define dso_local <16 x i8> @ld_cst_unalign32_vector() {
744 ; CHECK-P10-LABEL: ld_cst_unalign32_vector:
745 ; CHECK-P10:       # %bb.0: # %entry
746 ; CHECK-P10-NEXT:    pli r3, 99999
747 ; CHECK-P10-NEXT:    lxv v2, 0(r3)
748 ; CHECK-P10-NEXT:    blr
750 ; CHECK-P9-LABEL: ld_cst_unalign32_vector:
751 ; CHECK-P9:       # %bb.0: # %entry
752 ; CHECK-P9-NEXT:    lis r3, 1
753 ; CHECK-P9-NEXT:    ori r3, r3, 34463
754 ; CHECK-P9-NEXT:    lxv v2, 0(r3)
755 ; CHECK-P9-NEXT:    blr
757 ; CHECK-P8-LE-LABEL: ld_cst_unalign32_vector:
758 ; CHECK-P8-LE:       # %bb.0: # %entry
759 ; CHECK-P8-LE-NEXT:    lis r3, 1
760 ; CHECK-P8-LE-NEXT:    ori r3, r3, 34463
761 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
762 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
763 ; CHECK-P8-LE-NEXT:    blr
765 ; CHECK-P8-BE-LABEL: ld_cst_unalign32_vector:
766 ; CHECK-P8-BE:       # %bb.0: # %entry
767 ; CHECK-P8-BE-NEXT:    lis r3, 1
768 ; CHECK-P8-BE-NEXT:    ori r3, r3, 34463
769 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
770 ; CHECK-P8-BE-NEXT:    blr
771 entry:
772   %0 = load <16 x i8>, ptr inttoptr (i64 99999 to ptr), align 16
773   ret <16 x i8> %0
776 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
777 define dso_local <16 x i8> @ld_cst_align32_vector() {
778 ; CHECK-P10-LABEL: ld_cst_align32_vector:
779 ; CHECK-P10:       # %bb.0: # %entry
780 ; CHECK-P10-NEXT:    pli r3, 9999900
781 ; CHECK-P10-NEXT:    lxv v2, 0(r3)
782 ; CHECK-P10-NEXT:    blr
784 ; CHECK-P9-LABEL: ld_cst_align32_vector:
785 ; CHECK-P9:       # %bb.0: # %entry
786 ; CHECK-P9-NEXT:    lis r3, 152
787 ; CHECK-P9-NEXT:    ori r3, r3, 38428
788 ; CHECK-P9-NEXT:    lxv v2, 0(r3)
789 ; CHECK-P9-NEXT:    blr
791 ; CHECK-P8-LE-LABEL: ld_cst_align32_vector:
792 ; CHECK-P8-LE:       # %bb.0: # %entry
793 ; CHECK-P8-LE-NEXT:    lis r3, 152
794 ; CHECK-P8-LE-NEXT:    ori r3, r3, 38428
795 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
796 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
797 ; CHECK-P8-LE-NEXT:    blr
799 ; CHECK-P8-BE-LABEL: ld_cst_align32_vector:
800 ; CHECK-P8-BE:       # %bb.0: # %entry
801 ; CHECK-P8-BE-NEXT:    lis r3, 152
802 ; CHECK-P8-BE-NEXT:    ori r3, r3, 38428
803 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
804 ; CHECK-P8-BE-NEXT:    blr
805 entry:
806   %0 = load <16 x i8>, ptr inttoptr (i64 9999900 to ptr), align 16
807   ret <16 x i8> %0
810 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
811 define dso_local <16 x i8> @ld_cst_unalign64_vector() {
812 ; CHECK-P10-LABEL: ld_cst_unalign64_vector:
813 ; CHECK-P10:       # %bb.0: # %entry
814 ; CHECK-P10-NEXT:    pli r3, 232
815 ; CHECK-P10-NEXT:    pli r4, 3567587329
816 ; CHECK-P10-NEXT:    rldimi r4, r3, 32, 0
817 ; CHECK-P10-NEXT:    lxv v2, 0(r4)
818 ; CHECK-P10-NEXT:    blr
820 ; CHECK-P9-LABEL: ld_cst_unalign64_vector:
821 ; CHECK-P9:       # %bb.0: # %entry
822 ; CHECK-P9-NEXT:    li r3, 29
823 ; CHECK-P9-NEXT:    rldic r3, r3, 35, 24
824 ; CHECK-P9-NEXT:    oris r3, r3, 54437
825 ; CHECK-P9-NEXT:    ori r3, r3, 4097
826 ; CHECK-P9-NEXT:    lxv v2, 0(r3)
827 ; CHECK-P9-NEXT:    blr
829 ; CHECK-P8-LE-LABEL: ld_cst_unalign64_vector:
830 ; CHECK-P8-LE:       # %bb.0: # %entry
831 ; CHECK-P8-LE-NEXT:    li r3, 29
832 ; CHECK-P8-LE-NEXT:    rldic r3, r3, 35, 24
833 ; CHECK-P8-LE-NEXT:    oris r3, r3, 54437
834 ; CHECK-P8-LE-NEXT:    ori r3, r3, 4097
835 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
836 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
837 ; CHECK-P8-LE-NEXT:    blr
839 ; CHECK-P8-BE-LABEL: ld_cst_unalign64_vector:
840 ; CHECK-P8-BE:       # %bb.0: # %entry
841 ; CHECK-P8-BE-NEXT:    li r3, 29
842 ; CHECK-P8-BE-NEXT:    rldic r3, r3, 35, 24
843 ; CHECK-P8-BE-NEXT:    oris r3, r3, 54437
844 ; CHECK-P8-BE-NEXT:    ori r3, r3, 4097
845 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
846 ; CHECK-P8-BE-NEXT:    blr
847 entry:
848   %0 = load <16 x i8>, ptr inttoptr (i64 1000000000001 to ptr), align 16
849   ret <16 x i8> %0
852 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
853 define dso_local <16 x i8> @ld_cst_align64_vector() {
854 ; CHECK-P10-LABEL: ld_cst_align64_vector:
855 ; CHECK-P10:       # %bb.0: # %entry
856 ; CHECK-P10-NEXT:    pli r3, 244140625
857 ; CHECK-P10-NEXT:    rldic r3, r3, 12, 24
858 ; CHECK-P10-NEXT:    lxv v2, 0(r3)
859 ; CHECK-P10-NEXT:    blr
861 ; CHECK-P9-LABEL: ld_cst_align64_vector:
862 ; CHECK-P9:       # %bb.0: # %entry
863 ; CHECK-P9-NEXT:    lis r3, 3725
864 ; CHECK-P9-NEXT:    ori r3, r3, 19025
865 ; CHECK-P9-NEXT:    rldic r3, r3, 12, 24
866 ; CHECK-P9-NEXT:    lxv v2, 0(r3)
867 ; CHECK-P9-NEXT:    blr
869 ; CHECK-P8-LE-LABEL: ld_cst_align64_vector:
870 ; CHECK-P8-LE:       # %bb.0: # %entry
871 ; CHECK-P8-LE-NEXT:    lis r3, 3725
872 ; CHECK-P8-LE-NEXT:    ori r3, r3, 19025
873 ; CHECK-P8-LE-NEXT:    rldic r3, r3, 12, 24
874 ; CHECK-P8-LE-NEXT:    lxvd2x vs0, 0, r3
875 ; CHECK-P8-LE-NEXT:    xxswapd v2, vs0
876 ; CHECK-P8-LE-NEXT:    blr
878 ; CHECK-P8-BE-LABEL: ld_cst_align64_vector:
879 ; CHECK-P8-BE:       # %bb.0: # %entry
880 ; CHECK-P8-BE-NEXT:    lis r3, 3725
881 ; CHECK-P8-BE-NEXT:    ori r3, r3, 19025
882 ; CHECK-P8-BE-NEXT:    rldic r3, r3, 12, 24
883 ; CHECK-P8-BE-NEXT:    lxvw4x v2, 0, r3
884 ; CHECK-P8-BE-NEXT:    blr
885 entry:
886   %0 = load <16 x i8>, ptr inttoptr (i64 1000000000000 to ptr), align 4096
887   ret <16 x i8> %0
890 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
891 define dso_local void @st_0_vector(i64 %ptr, <16 x i8> %str) {
892 ; CHECK-LABEL: st_0_vector:
893 ; CHECK:       # %bb.0: # %entry
894 ; CHECK-NEXT:    stxv v2, 0(r3)
895 ; CHECK-NEXT:    blr
897 ; CHECK-P8-LE-LABEL: st_0_vector:
898 ; CHECK-P8-LE:       # %bb.0: # %entry
899 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
900 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
901 ; CHECK-P8-LE-NEXT:    blr
903 ; CHECK-P8-BE-LABEL: st_0_vector:
904 ; CHECK-P8-BE:       # %bb.0: # %entry
905 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
906 ; CHECK-P8-BE-NEXT:    blr
907 entry:
908   %0 = inttoptr i64 %ptr to ptr
909   store <16 x i8> %str, ptr %0, align 16
910   ret void
913 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
914 define dso_local void @st_unalign16_vector(ptr nocapture %ptr, <16 x i8> %str) {
915 ; CHECK-P10-LABEL: st_unalign16_vector:
916 ; CHECK-P10:       # %bb.0: # %entry
917 ; CHECK-P10-NEXT:    pstxv v2, 1(r3), 0
918 ; CHECK-P10-NEXT:    blr
920 ; CHECK-P9-LABEL: st_unalign16_vector:
921 ; CHECK-P9:       # %bb.0: # %entry
922 ; CHECK-P9-NEXT:    li r4, 1
923 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
924 ; CHECK-P9-NEXT:    blr
926 ; CHECK-P8-LE-LABEL: st_unalign16_vector:
927 ; CHECK-P8-LE:       # %bb.0: # %entry
928 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
929 ; CHECK-P8-LE-NEXT:    addi r3, r3, 1
930 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
931 ; CHECK-P8-LE-NEXT:    blr
933 ; CHECK-P8-BE-LABEL: st_unalign16_vector:
934 ; CHECK-P8-BE:       # %bb.0: # %entry
935 ; CHECK-P8-BE-NEXT:    addi r3, r3, 1
936 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
937 ; CHECK-P8-BE-NEXT:    blr
938 entry:
939   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1
940   store <16 x i8> %str, ptr %add.ptr, align 16
941   ret void
944 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
945 define dso_local void @st_align16_vector(ptr nocapture %ptr, <16 x i8> %str) {
946 ; CHECK-P10-LABEL: st_align16_vector:
947 ; CHECK-P10:       # %bb.0: # %entry
948 ; CHECK-P10-NEXT:    pstxv v2, 8(r3), 0
949 ; CHECK-P10-NEXT:    blr
951 ; CHECK-P9-LABEL: st_align16_vector:
952 ; CHECK-P9:       # %bb.0: # %entry
953 ; CHECK-P9-NEXT:    li r4, 8
954 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
955 ; CHECK-P9-NEXT:    blr
957 ; CHECK-P8-LE-LABEL: st_align16_vector:
958 ; CHECK-P8-LE:       # %bb.0: # %entry
959 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
960 ; CHECK-P8-LE-NEXT:    addi r3, r3, 8
961 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
962 ; CHECK-P8-LE-NEXT:    blr
964 ; CHECK-P8-BE-LABEL: st_align16_vector:
965 ; CHECK-P8-BE:       # %bb.0: # %entry
966 ; CHECK-P8-BE-NEXT:    addi r3, r3, 8
967 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
968 ; CHECK-P8-BE-NEXT:    blr
969 entry:
970   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
971   store <16 x i8> %str, ptr %add.ptr, align 16
972   ret void
975 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
976 define dso_local void @st_unalign32_vector(ptr nocapture %ptr, <16 x i8> %str) {
977 ; CHECK-P10-LABEL: st_unalign32_vector:
978 ; CHECK-P10:       # %bb.0: # %entry
979 ; CHECK-P10-NEXT:    pstxv v2, 99999(r3), 0
980 ; CHECK-P10-NEXT:    blr
982 ; CHECK-P9-LABEL: st_unalign32_vector:
983 ; CHECK-P9:       # %bb.0: # %entry
984 ; CHECK-P9-NEXT:    lis r4, 1
985 ; CHECK-P9-NEXT:    ori r4, r4, 34463
986 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
987 ; CHECK-P9-NEXT:    blr
989 ; CHECK-P8-LE-LABEL: st_unalign32_vector:
990 ; CHECK-P8-LE:       # %bb.0: # %entry
991 ; CHECK-P8-LE-NEXT:    lis r4, 1
992 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
993 ; CHECK-P8-LE-NEXT:    ori r4, r4, 34463
994 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
995 ; CHECK-P8-LE-NEXT:    blr
997 ; CHECK-P8-BE-LABEL: st_unalign32_vector:
998 ; CHECK-P8-BE:       # %bb.0: # %entry
999 ; CHECK-P8-BE-NEXT:    lis r4, 1
1000 ; CHECK-P8-BE-NEXT:    ori r4, r4, 34463
1001 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1002 ; CHECK-P8-BE-NEXT:    blr
1003 entry:
1004   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999
1005   store <16 x i8> %str, ptr %add.ptr, align 16
1006   ret void
1009 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1010 define dso_local void @st_align32_vector(ptr nocapture %ptr, <16 x i8> %str) {
1011 ; CHECK-P10-LABEL: st_align32_vector:
1012 ; CHECK-P10:       # %bb.0: # %entry
1013 ; CHECK-P10-NEXT:    pstxv v2, 99999000(r3), 0
1014 ; CHECK-P10-NEXT:    blr
1016 ; CHECK-P9-LABEL: st_align32_vector:
1017 ; CHECK-P9:       # %bb.0: # %entry
1018 ; CHECK-P9-NEXT:    lis r4, 1525
1019 ; CHECK-P9-NEXT:    ori r4, r4, 56600
1020 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
1021 ; CHECK-P9-NEXT:    blr
1023 ; CHECK-P8-LE-LABEL: st_align32_vector:
1024 ; CHECK-P8-LE:       # %bb.0: # %entry
1025 ; CHECK-P8-LE-NEXT:    lis r4, 1525
1026 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1027 ; CHECK-P8-LE-NEXT:    ori r4, r4, 56600
1028 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
1029 ; CHECK-P8-LE-NEXT:    blr
1031 ; CHECK-P8-BE-LABEL: st_align32_vector:
1032 ; CHECK-P8-BE:       # %bb.0: # %entry
1033 ; CHECK-P8-BE-NEXT:    lis r4, 1525
1034 ; CHECK-P8-BE-NEXT:    ori r4, r4, 56600
1035 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1036 ; CHECK-P8-BE-NEXT:    blr
1037 entry:
1038   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
1039   store <16 x i8> %str, ptr %add.ptr, align 16
1040   ret void
1043 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1044 define dso_local void @st_unalign64_vector(ptr nocapture %ptr, <16 x i8> %str) {
1045 ; CHECK-P10-LABEL: st_unalign64_vector:
1046 ; CHECK-P10:       # %bb.0: # %entry
1047 ; CHECK-P10-NEXT:    pli r4, 232
1048 ; CHECK-P10-NEXT:    pli r5, 3567587329
1049 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
1050 ; CHECK-P10-NEXT:    stxvx v2, r3, r5
1051 ; CHECK-P10-NEXT:    blr
1053 ; CHECK-P9-LABEL: st_unalign64_vector:
1054 ; CHECK-P9:       # %bb.0: # %entry
1055 ; CHECK-P9-NEXT:    li r4, 29
1056 ; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
1057 ; CHECK-P9-NEXT:    oris r4, r4, 54437
1058 ; CHECK-P9-NEXT:    ori r4, r4, 4097
1059 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
1060 ; CHECK-P9-NEXT:    blr
1062 ; CHECK-P8-LE-LABEL: st_unalign64_vector:
1063 ; CHECK-P8-LE:       # %bb.0: # %entry
1064 ; CHECK-P8-LE-NEXT:    li r4, 29
1065 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1066 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
1067 ; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
1068 ; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
1069 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
1070 ; CHECK-P8-LE-NEXT:    blr
1072 ; CHECK-P8-BE-LABEL: st_unalign64_vector:
1073 ; CHECK-P8-BE:       # %bb.0: # %entry
1074 ; CHECK-P8-BE-NEXT:    li r4, 29
1075 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
1076 ; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
1077 ; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
1078 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1079 ; CHECK-P8-BE-NEXT:    blr
1080 entry:
1081   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001
1082   store <16 x i8> %str, ptr %add.ptr, align 16
1083   ret void
1086 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1087 define dso_local void @st_align64_vector(ptr nocapture %ptr, <16 x i8> %str) {
1088 ; CHECK-P10-LABEL: st_align64_vector:
1089 ; CHECK-P10:       # %bb.0: # %entry
1090 ; CHECK-P10-NEXT:    pli r4, 244140625
1091 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
1092 ; CHECK-P10-NEXT:    stxvx v2, r3, r4
1093 ; CHECK-P10-NEXT:    blr
1095 ; CHECK-P9-LABEL: st_align64_vector:
1096 ; CHECK-P9:       # %bb.0: # %entry
1097 ; CHECK-P9-NEXT:    lis r4, 3725
1098 ; CHECK-P9-NEXT:    ori r4, r4, 19025
1099 ; CHECK-P9-NEXT:    rldic r4, r4, 12, 24
1100 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
1101 ; CHECK-P9-NEXT:    blr
1103 ; CHECK-P8-LE-LABEL: st_align64_vector:
1104 ; CHECK-P8-LE:       # %bb.0: # %entry
1105 ; CHECK-P8-LE-NEXT:    lis r4, 3725
1106 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1107 ; CHECK-P8-LE-NEXT:    ori r4, r4, 19025
1108 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 12, 24
1109 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
1110 ; CHECK-P8-LE-NEXT:    blr
1112 ; CHECK-P8-BE-LABEL: st_align64_vector:
1113 ; CHECK-P8-BE:       # %bb.0: # %entry
1114 ; CHECK-P8-BE-NEXT:    lis r4, 3725
1115 ; CHECK-P8-BE-NEXT:    ori r4, r4, 19025
1116 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 12, 24
1117 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1118 ; CHECK-P8-BE-NEXT:    blr
1119 entry:
1120   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
1121   store <16 x i8> %str, ptr %add.ptr, align 16
1122   ret void
1125 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1126 define dso_local void @st_reg_vector(ptr nocapture %ptr, i64 %off, <16 x i8> %str) {
1127 ; CHECK-LABEL: st_reg_vector:
1128 ; CHECK:       # %bb.0: # %entry
1129 ; CHECK-NEXT:    stxvx v2, r3, r4
1130 ; CHECK-NEXT:    blr
1132 ; CHECK-P8-LE-LABEL: st_reg_vector:
1133 ; CHECK-P8-LE:       # %bb.0: # %entry
1134 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1135 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
1136 ; CHECK-P8-LE-NEXT:    blr
1138 ; CHECK-P8-BE-LABEL: st_reg_vector:
1139 ; CHECK-P8-BE:       # %bb.0: # %entry
1140 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1141 ; CHECK-P8-BE-NEXT:    blr
1142 entry:
1143   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
1144   store <16 x i8> %str, ptr %add.ptr, align 16
1145   ret void
1148 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1149 define dso_local void @st_or1_vector(i64 %ptr, i8 zeroext %off, <16 x i8> %str) {
1150 ; CHECK-LABEL: st_or1_vector:
1151 ; CHECK:       # %bb.0: # %entry
1152 ; CHECK-NEXT:    or r3, r4, r3
1153 ; CHECK-NEXT:    stxv v2, 0(r3)
1154 ; CHECK-NEXT:    blr
1156 ; CHECK-P8-LE-LABEL: st_or1_vector:
1157 ; CHECK-P8-LE:       # %bb.0: # %entry
1158 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1159 ; CHECK-P8-LE-NEXT:    or r3, r4, r3
1160 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1161 ; CHECK-P8-LE-NEXT:    blr
1163 ; CHECK-P8-BE-LABEL: st_or1_vector:
1164 ; CHECK-P8-BE:       # %bb.0: # %entry
1165 ; CHECK-P8-BE-NEXT:    or r3, r4, r3
1166 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1167 ; CHECK-P8-BE-NEXT:    blr
1168 entry:
1169   %conv = zext i8 %off to i64
1170   %or = or i64 %conv, %ptr
1171   %0 = inttoptr i64 %or to ptr
1172   store <16 x i8> %str, ptr %0, align 16
1173   ret void
1176 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1177 define dso_local void @st_or2_vector(i64 %ptr, i8 zeroext %off, <16 x i8> %str) {
1178 ; CHECK-LABEL: st_or2_vector:
1179 ; CHECK:       # %bb.0: # %entry
1180 ; CHECK-NEXT:    rldicr r3, r3, 0, 51
1181 ; CHECK-NEXT:    stxvx v2, r3, r4
1182 ; CHECK-NEXT:    blr
1184 ; CHECK-P8-LE-LABEL: st_or2_vector:
1185 ; CHECK-P8-LE:       # %bb.0: # %entry
1186 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1187 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
1188 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
1189 ; CHECK-P8-LE-NEXT:    blr
1191 ; CHECK-P8-BE-LABEL: st_or2_vector:
1192 ; CHECK-P8-BE:       # %bb.0: # %entry
1193 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
1194 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1195 ; CHECK-P8-BE-NEXT:    blr
1196 entry:
1197   %and = and i64 %ptr, -4096
1198   %conv = zext i8 %off to i64
1199   %or = or i64 %and, %conv
1200   %0 = inttoptr i64 %or to ptr
1201   store <16 x i8> %str, ptr %0, align 16
1202   ret void
1205 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1206 define dso_local void @st_not_disjoint16_vector(i64 %ptr, <16 x i8> %str) {
1207 ; CHECK-LABEL: st_not_disjoint16_vector:
1208 ; CHECK:       # %bb.0: # %entry
1209 ; CHECK-NEXT:    ori r3, r3, 6
1210 ; CHECK-NEXT:    stxv v2, 0(r3)
1211 ; CHECK-NEXT:    blr
1213 ; CHECK-P8-LE-LABEL: st_not_disjoint16_vector:
1214 ; CHECK-P8-LE:       # %bb.0: # %entry
1215 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1216 ; CHECK-P8-LE-NEXT:    ori r3, r3, 6
1217 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1218 ; CHECK-P8-LE-NEXT:    blr
1220 ; CHECK-P8-BE-LABEL: st_not_disjoint16_vector:
1221 ; CHECK-P8-BE:       # %bb.0: # %entry
1222 ; CHECK-P8-BE-NEXT:    ori r3, r3, 6
1223 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1224 ; CHECK-P8-BE-NEXT:    blr
1225 entry:
1226   %or = or i64 %ptr, 6
1227   %0 = inttoptr i64 %or to ptr
1228   store <16 x i8> %str, ptr %0, align 16
1229   ret void
1232 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1233 define dso_local void @st_disjoint_unalign16_vector(i64 %ptr, <16 x i8> %str) {
1234 ; CHECK-P10-LABEL: st_disjoint_unalign16_vector:
1235 ; CHECK-P10:       # %bb.0: # %entry
1236 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
1237 ; CHECK-P10-NEXT:    pstxv v2, 6(r3), 0
1238 ; CHECK-P10-NEXT:    blr
1240 ; CHECK-P9-LABEL: st_disjoint_unalign16_vector:
1241 ; CHECK-P9:       # %bb.0: # %entry
1242 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 51
1243 ; CHECK-P9-NEXT:    li r4, 6
1244 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
1245 ; CHECK-P9-NEXT:    blr
1247 ; CHECK-P8-LE-LABEL: st_disjoint_unalign16_vector:
1248 ; CHECK-P8-LE:       # %bb.0: # %entry
1249 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
1250 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1251 ; CHECK-P8-LE-NEXT:    ori r3, r3, 6
1252 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1253 ; CHECK-P8-LE-NEXT:    blr
1255 ; CHECK-P8-BE-LABEL: st_disjoint_unalign16_vector:
1256 ; CHECK-P8-BE:       # %bb.0: # %entry
1257 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
1258 ; CHECK-P8-BE-NEXT:    ori r3, r3, 6
1259 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1260 ; CHECK-P8-BE-NEXT:    blr
1261 entry:
1262   %and = and i64 %ptr, -4096
1263   %or = or i64 %and, 6
1264   %0 = inttoptr i64 %or to ptr
1265   store <16 x i8> %str, ptr %0, align 16
1266   ret void
1269 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1270 define dso_local void @st_disjoint_align16_vector(i64 %ptr, <16 x i8> %str) {
1271 ; CHECK-P10-LABEL: st_disjoint_align16_vector:
1272 ; CHECK-P10:       # %bb.0: # %entry
1273 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
1274 ; CHECK-P10-NEXT:    pstxv v2, 24(r3), 0
1275 ; CHECK-P10-NEXT:    blr
1277 ; CHECK-P9-LABEL: st_disjoint_align16_vector:
1278 ; CHECK-P9:       # %bb.0: # %entry
1279 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 51
1280 ; CHECK-P9-NEXT:    li r4, 24
1281 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
1282 ; CHECK-P9-NEXT:    blr
1284 ; CHECK-P8-LE-LABEL: st_disjoint_align16_vector:
1285 ; CHECK-P8-LE:       # %bb.0: # %entry
1286 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 51
1287 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1288 ; CHECK-P8-LE-NEXT:    ori r3, r3, 24
1289 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1290 ; CHECK-P8-LE-NEXT:    blr
1292 ; CHECK-P8-BE-LABEL: st_disjoint_align16_vector:
1293 ; CHECK-P8-BE:       # %bb.0: # %entry
1294 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 51
1295 ; CHECK-P8-BE-NEXT:    ori r3, r3, 24
1296 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1297 ; CHECK-P8-BE-NEXT:    blr
1298 entry:
1299   %and = and i64 %ptr, -4096
1300   %or = or i64 %and, 24
1301   %0 = inttoptr i64 %or to ptr
1302   store <16 x i8> %str, ptr %0, align 16
1303   ret void
1306 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1307 define dso_local void @st_not_disjoint32_vector(i64 %ptr, <16 x i8> %str) {
1308 ; CHECK-LABEL: st_not_disjoint32_vector:
1309 ; CHECK:       # %bb.0: # %entry
1310 ; CHECK-NEXT:    ori r3, r3, 34463
1311 ; CHECK-NEXT:    oris r3, r3, 1
1312 ; CHECK-NEXT:    stxv v2, 0(r3)
1313 ; CHECK-NEXT:    blr
1315 ; CHECK-P8-LE-LABEL: st_not_disjoint32_vector:
1316 ; CHECK-P8-LE:       # %bb.0: # %entry
1317 ; CHECK-P8-LE-NEXT:    ori r3, r3, 34463
1318 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1319 ; CHECK-P8-LE-NEXT:    oris r3, r3, 1
1320 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1321 ; CHECK-P8-LE-NEXT:    blr
1323 ; CHECK-P8-BE-LABEL: st_not_disjoint32_vector:
1324 ; CHECK-P8-BE:       # %bb.0: # %entry
1325 ; CHECK-P8-BE-NEXT:    ori r3, r3, 34463
1326 ; CHECK-P8-BE-NEXT:    oris r3, r3, 1
1327 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1328 ; CHECK-P8-BE-NEXT:    blr
1329 entry:
1330   %or = or i64 %ptr, 99999
1331   %0 = inttoptr i64 %or to ptr
1332   store <16 x i8> %str, ptr %0, align 16
1333   ret void
1336 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1337 define dso_local void @st_disjoint_unalign32_vector(i64 %ptr, <16 x i8> %str) {
1338 ; CHECK-P10-LABEL: st_disjoint_unalign32_vector:
1339 ; CHECK-P10:       # %bb.0: # %entry
1340 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 43
1341 ; CHECK-P10-NEXT:    pstxv v2, 99999(r3), 0
1342 ; CHECK-P10-NEXT:    blr
1344 ; CHECK-P9-LABEL: st_disjoint_unalign32_vector:
1345 ; CHECK-P9:       # %bb.0: # %entry
1346 ; CHECK-P9-NEXT:    lis r4, 1
1347 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 43
1348 ; CHECK-P9-NEXT:    ori r4, r4, 34463
1349 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
1350 ; CHECK-P9-NEXT:    blr
1352 ; CHECK-P8-LE-LABEL: st_disjoint_unalign32_vector:
1353 ; CHECK-P8-LE:       # %bb.0: # %entry
1354 ; CHECK-P8-LE-NEXT:    lis r4, 1
1355 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1356 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 43
1357 ; CHECK-P8-LE-NEXT:    ori r4, r4, 34463
1358 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
1359 ; CHECK-P8-LE-NEXT:    blr
1361 ; CHECK-P8-BE-LABEL: st_disjoint_unalign32_vector:
1362 ; CHECK-P8-BE:       # %bb.0: # %entry
1363 ; CHECK-P8-BE-NEXT:    lis r4, 1
1364 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 43
1365 ; CHECK-P8-BE-NEXT:    ori r4, r4, 34463
1366 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1367 ; CHECK-P8-BE-NEXT:    blr
1368 entry:
1369   %and = and i64 %ptr, -1048576
1370   %or = or i64 %and, 99999
1371   %0 = inttoptr i64 %or to ptr
1372   store <16 x i8> %str, ptr %0, align 16
1373   ret void
1376 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1377 define dso_local void @st_disjoint_align32_vector(i64 %ptr, <16 x i8> %str) {
1378 ; CHECK-P10-LABEL: st_disjoint_align32_vector:
1379 ; CHECK-P10:       # %bb.0: # %entry
1380 ; CHECK-P10-NEXT:    lis r4, -15264
1381 ; CHECK-P10-NEXT:    and r3, r3, r4
1382 ; CHECK-P10-NEXT:    pstxv v2, 999990000(r3), 0
1383 ; CHECK-P10-NEXT:    blr
1385 ; CHECK-P9-LABEL: st_disjoint_align32_vector:
1386 ; CHECK-P9:       # %bb.0: # %entry
1387 ; CHECK-P9-NEXT:    lis r4, -15264
1388 ; CHECK-P9-NEXT:    and r3, r3, r4
1389 ; CHECK-P9-NEXT:    lis r4, 15258
1390 ; CHECK-P9-NEXT:    ori r4, r4, 41712
1391 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
1392 ; CHECK-P9-NEXT:    blr
1394 ; CHECK-P8-LE-LABEL: st_disjoint_align32_vector:
1395 ; CHECK-P8-LE:       # %bb.0: # %entry
1396 ; CHECK-P8-LE-NEXT:    lis r4, -15264
1397 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1398 ; CHECK-P8-LE-NEXT:    and r3, r3, r4
1399 ; CHECK-P8-LE-NEXT:    lis r4, 15258
1400 ; CHECK-P8-LE-NEXT:    ori r4, r4, 41712
1401 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
1402 ; CHECK-P8-LE-NEXT:    blr
1404 ; CHECK-P8-BE-LABEL: st_disjoint_align32_vector:
1405 ; CHECK-P8-BE:       # %bb.0: # %entry
1406 ; CHECK-P8-BE-NEXT:    lis r4, -15264
1407 ; CHECK-P8-BE-NEXT:    and r3, r3, r4
1408 ; CHECK-P8-BE-NEXT:    lis r4, 15258
1409 ; CHECK-P8-BE-NEXT:    ori r4, r4, 41712
1410 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1411 ; CHECK-P8-BE-NEXT:    blr
1412 entry:
1413   %and = and i64 %ptr, -1000341504
1414   %or = or i64 %and, 999990000
1415   %0 = inttoptr i64 %or to ptr
1416   store <16 x i8> %str, ptr %0, align 16
1417   ret void
1420 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1421 define dso_local void @st_not_disjoint64_vector(i64 %ptr, <16 x i8> %str) {
1422 ; CHECK-P10-LABEL: st_not_disjoint64_vector:
1423 ; CHECK-P10:       # %bb.0: # %entry
1424 ; CHECK-P10-NEXT:    pli r4, 232
1425 ; CHECK-P10-NEXT:    pli r5, 3567587329
1426 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
1427 ; CHECK-P10-NEXT:    or r3, r3, r5
1428 ; CHECK-P10-NEXT:    stxv v2, 0(r3)
1429 ; CHECK-P10-NEXT:    blr
1431 ; CHECK-P9-LABEL: st_not_disjoint64_vector:
1432 ; CHECK-P9:       # %bb.0: # %entry
1433 ; CHECK-P9-NEXT:    li r4, 29
1434 ; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
1435 ; CHECK-P9-NEXT:    oris r4, r4, 54437
1436 ; CHECK-P9-NEXT:    ori r4, r4, 4097
1437 ; CHECK-P9-NEXT:    or r3, r3, r4
1438 ; CHECK-P9-NEXT:    stxv v2, 0(r3)
1439 ; CHECK-P9-NEXT:    blr
1441 ; CHECK-P8-LE-LABEL: st_not_disjoint64_vector:
1442 ; CHECK-P8-LE:       # %bb.0: # %entry
1443 ; CHECK-P8-LE-NEXT:    li r4, 29
1444 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1445 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
1446 ; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
1447 ; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
1448 ; CHECK-P8-LE-NEXT:    or r3, r3, r4
1449 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1450 ; CHECK-P8-LE-NEXT:    blr
1452 ; CHECK-P8-BE-LABEL: st_not_disjoint64_vector:
1453 ; CHECK-P8-BE:       # %bb.0: # %entry
1454 ; CHECK-P8-BE-NEXT:    li r4, 29
1455 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
1456 ; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
1457 ; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
1458 ; CHECK-P8-BE-NEXT:    or r3, r3, r4
1459 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1460 ; CHECK-P8-BE-NEXT:    blr
1461 entry:
1462   %or = or i64 %ptr, 1000000000001
1463   %0 = inttoptr i64 %or to ptr
1464   store <16 x i8> %str, ptr %0, align 16
1465   ret void
1468 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1469 define dso_local void @st_disjoint_unalign64_vector(i64 %ptr, <16 x i8> %str) {
1470 ; CHECK-P10-LABEL: st_disjoint_unalign64_vector:
1471 ; CHECK-P10:       # %bb.0: # %entry
1472 ; CHECK-P10-NEXT:    pli r4, 232
1473 ; CHECK-P10-NEXT:    pli r5, 3567587329
1474 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
1475 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
1476 ; CHECK-P10-NEXT:    stxvx v2, r3, r5
1477 ; CHECK-P10-NEXT:    blr
1479 ; CHECK-P9-LABEL: st_disjoint_unalign64_vector:
1480 ; CHECK-P9:       # %bb.0: # %entry
1481 ; CHECK-P9-NEXT:    li r4, 29
1482 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
1483 ; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
1484 ; CHECK-P9-NEXT:    oris r4, r4, 54437
1485 ; CHECK-P9-NEXT:    ori r4, r4, 4097
1486 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
1487 ; CHECK-P9-NEXT:    blr
1489 ; CHECK-P8-LE-LABEL: st_disjoint_unalign64_vector:
1490 ; CHECK-P8-LE:       # %bb.0: # %entry
1491 ; CHECK-P8-LE-NEXT:    li r4, 29
1492 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1493 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 23
1494 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 35, 24
1495 ; CHECK-P8-LE-NEXT:    oris r4, r4, 54437
1496 ; CHECK-P8-LE-NEXT:    ori r4, r4, 4097
1497 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
1498 ; CHECK-P8-LE-NEXT:    blr
1500 ; CHECK-P8-BE-LABEL: st_disjoint_unalign64_vector:
1501 ; CHECK-P8-BE:       # %bb.0: # %entry
1502 ; CHECK-P8-BE-NEXT:    li r4, 29
1503 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 23
1504 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 35, 24
1505 ; CHECK-P8-BE-NEXT:    oris r4, r4, 54437
1506 ; CHECK-P8-BE-NEXT:    ori r4, r4, 4097
1507 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1508 ; CHECK-P8-BE-NEXT:    blr
1509 entry:
1510   %and = and i64 %ptr, -1099511627776
1511   %or = or i64 %and, 1000000000001
1512   %0 = inttoptr i64 %or to ptr
1513   store <16 x i8> %str, ptr %0, align 16
1514   ret void
1517 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1518 define dso_local void @st_disjoint_align64_vector(i64 %ptr, <16 x i8> %str) {
1519 ; CHECK-P10-LABEL: st_disjoint_align64_vector:
1520 ; CHECK-P10:       # %bb.0: # %entry
1521 ; CHECK-P10-NEXT:    pli r4, 244140625
1522 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
1523 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
1524 ; CHECK-P10-NEXT:    stxvx v2, r3, r4
1525 ; CHECK-P10-NEXT:    blr
1527 ; CHECK-P9-LABEL: st_disjoint_align64_vector:
1528 ; CHECK-P9:       # %bb.0: # %entry
1529 ; CHECK-P9-NEXT:    lis r4, 3725
1530 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
1531 ; CHECK-P9-NEXT:    ori r4, r4, 19025
1532 ; CHECK-P9-NEXT:    rldic r4, r4, 12, 24
1533 ; CHECK-P9-NEXT:    stxvx v2, r3, r4
1534 ; CHECK-P9-NEXT:    blr
1536 ; CHECK-P8-LE-LABEL: st_disjoint_align64_vector:
1537 ; CHECK-P8-LE:       # %bb.0: # %entry
1538 ; CHECK-P8-LE-NEXT:    lis r4, 3725
1539 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1540 ; CHECK-P8-LE-NEXT:    rldicr r3, r3, 0, 23
1541 ; CHECK-P8-LE-NEXT:    ori r4, r4, 19025
1542 ; CHECK-P8-LE-NEXT:    rldic r4, r4, 12, 24
1543 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, r3, r4
1544 ; CHECK-P8-LE-NEXT:    blr
1546 ; CHECK-P8-BE-LABEL: st_disjoint_align64_vector:
1547 ; CHECK-P8-BE:       # %bb.0: # %entry
1548 ; CHECK-P8-BE-NEXT:    lis r4, 3725
1549 ; CHECK-P8-BE-NEXT:    rldicr r3, r3, 0, 23
1550 ; CHECK-P8-BE-NEXT:    ori r4, r4, 19025
1551 ; CHECK-P8-BE-NEXT:    rldic r4, r4, 12, 24
1552 ; CHECK-P8-BE-NEXT:    stxvw4x v2, r3, r4
1553 ; CHECK-P8-BE-NEXT:    blr
1554 entry:
1555   %and = and i64 %ptr, -1099511627776
1556   %or = or i64 %and, 1000000000000
1557   %0 = inttoptr i64 %or to ptr
1558   store <16 x i8> %str, ptr %0, align 4096
1559   ret void
1562 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1563 define dso_local void @st_cst_unalign16_vector(<16 x i8> %str) {
1564 ; CHECK-LABEL: st_cst_unalign16_vector:
1565 ; CHECK:       # %bb.0: # %entry
1566 ; CHECK-NEXT:    li r3, 255
1567 ; CHECK-NEXT:    stxv v2, 0(r3)
1568 ; CHECK-NEXT:    blr
1570 ; CHECK-P8-LE-LABEL: st_cst_unalign16_vector:
1571 ; CHECK-P8-LE:       # %bb.0: # %entry
1572 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1573 ; CHECK-P8-LE-NEXT:    li r3, 255
1574 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1575 ; CHECK-P8-LE-NEXT:    blr
1577 ; CHECK-P8-BE-LABEL: st_cst_unalign16_vector:
1578 ; CHECK-P8-BE:       # %bb.0: # %entry
1579 ; CHECK-P8-BE-NEXT:    li r3, 255
1580 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1581 ; CHECK-P8-BE-NEXT:    blr
1582 entry:
1583   store <16 x i8> %str, ptr inttoptr (i64 255 to ptr), align 16
1584   ret void
1587 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1588 define dso_local void @st_cst_align16_vector(<16 x i8> %str) {
1589 ; CHECK-LABEL: st_cst_align16_vector:
1590 ; CHECK:       # %bb.0: # %entry
1591 ; CHECK-NEXT:    stxv v2, 4080(0)
1592 ; CHECK-NEXT:    blr
1594 ; CHECK-P8-LE-LABEL: st_cst_align16_vector:
1595 ; CHECK-P8-LE:       # %bb.0: # %entry
1596 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1597 ; CHECK-P8-LE-NEXT:    li r3, 4080
1598 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1599 ; CHECK-P8-LE-NEXT:    blr
1601 ; CHECK-P8-BE-LABEL: st_cst_align16_vector:
1602 ; CHECK-P8-BE:       # %bb.0: # %entry
1603 ; CHECK-P8-BE-NEXT:    li r3, 4080
1604 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1605 ; CHECK-P8-BE-NEXT:    blr
1606 entry:
1607   store <16 x i8> %str, ptr inttoptr (i64 4080 to ptr), align 16
1608   ret void
1611 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1612 define dso_local void @st_cst_unalign32_vector(<16 x i8> %str) {
1613 ; CHECK-P10-LABEL: st_cst_unalign32_vector:
1614 ; CHECK-P10:       # %bb.0: # %entry
1615 ; CHECK-P10-NEXT:    pli r3, 99999
1616 ; CHECK-P10-NEXT:    stxv v2, 0(r3)
1617 ; CHECK-P10-NEXT:    blr
1619 ; CHECK-P9-LABEL: st_cst_unalign32_vector:
1620 ; CHECK-P9:       # %bb.0: # %entry
1621 ; CHECK-P9-NEXT:    lis r3, 1
1622 ; CHECK-P9-NEXT:    ori r3, r3, 34463
1623 ; CHECK-P9-NEXT:    stxv v2, 0(r3)
1624 ; CHECK-P9-NEXT:    blr
1626 ; CHECK-P8-LE-LABEL: st_cst_unalign32_vector:
1627 ; CHECK-P8-LE:       # %bb.0: # %entry
1628 ; CHECK-P8-LE-NEXT:    lis r3, 1
1629 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1630 ; CHECK-P8-LE-NEXT:    ori r3, r3, 34463
1631 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1632 ; CHECK-P8-LE-NEXT:    blr
1634 ; CHECK-P8-BE-LABEL: st_cst_unalign32_vector:
1635 ; CHECK-P8-BE:       # %bb.0: # %entry
1636 ; CHECK-P8-BE-NEXT:    lis r3, 1
1637 ; CHECK-P8-BE-NEXT:    ori r3, r3, 34463
1638 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1639 ; CHECK-P8-BE-NEXT:    blr
1640 entry:
1641   store <16 x i8> %str, ptr inttoptr (i64 99999 to ptr), align 16
1642   ret void
1645 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1646 define dso_local void @st_cst_align32_vector(<16 x i8> %str) {
1647 ; CHECK-P10-LABEL: st_cst_align32_vector:
1648 ; CHECK-P10:       # %bb.0: # %entry
1649 ; CHECK-P10-NEXT:    pli r3, 9999900
1650 ; CHECK-P10-NEXT:    stxv v2, 0(r3)
1651 ; CHECK-P10-NEXT:    blr
1653 ; CHECK-P9-LABEL: st_cst_align32_vector:
1654 ; CHECK-P9:       # %bb.0: # %entry
1655 ; CHECK-P9-NEXT:    lis r3, 152
1656 ; CHECK-P9-NEXT:    ori r3, r3, 38428
1657 ; CHECK-P9-NEXT:    stxv v2, 0(r3)
1658 ; CHECK-P9-NEXT:    blr
1660 ; CHECK-P8-LE-LABEL: st_cst_align32_vector:
1661 ; CHECK-P8-LE:       # %bb.0: # %entry
1662 ; CHECK-P8-LE-NEXT:    lis r3, 152
1663 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1664 ; CHECK-P8-LE-NEXT:    ori r3, r3, 38428
1665 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1666 ; CHECK-P8-LE-NEXT:    blr
1668 ; CHECK-P8-BE-LABEL: st_cst_align32_vector:
1669 ; CHECK-P8-BE:       # %bb.0: # %entry
1670 ; CHECK-P8-BE-NEXT:    lis r3, 152
1671 ; CHECK-P8-BE-NEXT:    ori r3, r3, 38428
1672 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1673 ; CHECK-P8-BE-NEXT:    blr
1674 entry:
1675   store <16 x i8> %str, ptr inttoptr (i64 9999900 to ptr), align 16
1676   ret void
1679 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1680 define dso_local void @st_cst_unalign64_vector(<16 x i8> %str) {
1681 ; CHECK-P10-LABEL: st_cst_unalign64_vector:
1682 ; CHECK-P10:       # %bb.0: # %entry
1683 ; CHECK-P10-NEXT:    pli r3, 232
1684 ; CHECK-P10-NEXT:    pli r4, 3567587329
1685 ; CHECK-P10-NEXT:    rldimi r4, r3, 32, 0
1686 ; CHECK-P10-NEXT:    stxv v2, 0(r4)
1687 ; CHECK-P10-NEXT:    blr
1689 ; CHECK-P9-LABEL: st_cst_unalign64_vector:
1690 ; CHECK-P9:       # %bb.0: # %entry
1691 ; CHECK-P9-NEXT:    li r3, 29
1692 ; CHECK-P9-NEXT:    rldic r3, r3, 35, 24
1693 ; CHECK-P9-NEXT:    oris r3, r3, 54437
1694 ; CHECK-P9-NEXT:    ori r3, r3, 4097
1695 ; CHECK-P9-NEXT:    stxv v2, 0(r3)
1696 ; CHECK-P9-NEXT:    blr
1698 ; CHECK-P8-LE-LABEL: st_cst_unalign64_vector:
1699 ; CHECK-P8-LE:       # %bb.0: # %entry
1700 ; CHECK-P8-LE-NEXT:    li r3, 29
1701 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1702 ; CHECK-P8-LE-NEXT:    rldic r3, r3, 35, 24
1703 ; CHECK-P8-LE-NEXT:    oris r3, r3, 54437
1704 ; CHECK-P8-LE-NEXT:    ori r3, r3, 4097
1705 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1706 ; CHECK-P8-LE-NEXT:    blr
1708 ; CHECK-P8-BE-LABEL: st_cst_unalign64_vector:
1709 ; CHECK-P8-BE:       # %bb.0: # %entry
1710 ; CHECK-P8-BE-NEXT:    li r3, 29
1711 ; CHECK-P8-BE-NEXT:    rldic r3, r3, 35, 24
1712 ; CHECK-P8-BE-NEXT:    oris r3, r3, 54437
1713 ; CHECK-P8-BE-NEXT:    ori r3, r3, 4097
1714 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1715 ; CHECK-P8-BE-NEXT:    blr
1716 entry:
1717   store <16 x i8> %str, ptr inttoptr (i64 1000000000001 to ptr), align 16
1718   ret void
1721 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1722 define dso_local void @st_cst_align64_vector(<16 x i8> %str) {
1723 ; CHECK-P10-LABEL: st_cst_align64_vector:
1724 ; CHECK-P10:       # %bb.0: # %entry
1725 ; CHECK-P10-NEXT:    pli r3, 244140625
1726 ; CHECK-P10-NEXT:    rldic r3, r3, 12, 24
1727 ; CHECK-P10-NEXT:    stxv v2, 0(r3)
1728 ; CHECK-P10-NEXT:    blr
1730 ; CHECK-P9-LABEL: st_cst_align64_vector:
1731 ; CHECK-P9:       # %bb.0: # %entry
1732 ; CHECK-P9-NEXT:    lis r3, 3725
1733 ; CHECK-P9-NEXT:    ori r3, r3, 19025
1734 ; CHECK-P9-NEXT:    rldic r3, r3, 12, 24
1735 ; CHECK-P9-NEXT:    stxv v2, 0(r3)
1736 ; CHECK-P9-NEXT:    blr
1738 ; CHECK-P8-LE-LABEL: st_cst_align64_vector:
1739 ; CHECK-P8-LE:       # %bb.0: # %entry
1740 ; CHECK-P8-LE-NEXT:    lis r3, 3725
1741 ; CHECK-P8-LE-NEXT:    xxswapd vs0, v2
1742 ; CHECK-P8-LE-NEXT:    ori r3, r3, 19025
1743 ; CHECK-P8-LE-NEXT:    rldic r3, r3, 12, 24
1744 ; CHECK-P8-LE-NEXT:    stxvd2x vs0, 0, r3
1745 ; CHECK-P8-LE-NEXT:    blr
1747 ; CHECK-P8-BE-LABEL: st_cst_align64_vector:
1748 ; CHECK-P8-BE:       # %bb.0: # %entry
1749 ; CHECK-P8-BE-NEXT:    lis r3, 3725
1750 ; CHECK-P8-BE-NEXT:    ori r3, r3, 19025
1751 ; CHECK-P8-BE-NEXT:    rldic r3, r3, 12, 24
1752 ; CHECK-P8-BE-NEXT:    stxvw4x v2, 0, r3
1753 ; CHECK-P8-BE-NEXT:    blr
1754 entry:
1755   store <16 x i8> %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096
1756   ret void