[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / PowerPC / int128_ldst.ll
blobcfc41627e7970daccc78fb070fc13bc5cc218b57
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-PREP10,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-PREP10,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-PREP10,CHECK-P8
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-PREP10,CHECK-P8
21 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
22 define dso_local i128 @ld_0___int128___int128(i64 %ptr) {
23 ; CHECK-LABEL: ld_0___int128___int128:
24 ; CHECK:       # %bb.0: # %entry
25 ; CHECK-NEXT:    ld r5, 0(r3)
26 ; CHECK-NEXT:    ld r4, 8(r3)
27 ; CHECK-NEXT:    mr r3, r5
28 ; CHECK-NEXT:    blr
29 entry:
30   %0 = inttoptr i64 %ptr to i128*
31   %1 = load i128, i128* %0, align 16
32   ret i128 %1
35 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
36 define dso_local i128 @ld_unalign16___int128___int128(i8* nocapture readonly %ptr) {
37 ; CHECK-P10-LABEL: ld_unalign16___int128___int128:
38 ; CHECK-P10:       # %bb.0: # %entry
39 ; CHECK-P10-NEXT:    li r4, 1
40 ; CHECK-P10-NEXT:    ldx r5, r3, r4
41 ; CHECK-P10-NEXT:    li r4, 9
42 ; CHECK-P10-NEXT:    ldx r4, r3, r4
43 ; CHECK-P10-NEXT:    mr r3, r5
44 ; CHECK-P10-NEXT:    blr
46 ; CHECK-P9-LABEL: ld_unalign16___int128___int128:
47 ; CHECK-P9:       # %bb.0: # %entry
48 ; CHECK-P9-NEXT:    li r4, 1
49 ; CHECK-P9-NEXT:    ldx r5, r3, r4
50 ; CHECK-P9-NEXT:    li r4, 9
51 ; CHECK-P9-NEXT:    ldx r4, r3, r4
52 ; CHECK-P9-NEXT:    mr r3, r5
53 ; CHECK-P9-NEXT:    blr
55 ; CHECK-P8-LABEL: ld_unalign16___int128___int128:
56 ; CHECK-P8:       # %bb.0: # %entry
57 ; CHECK-P8-NEXT:    li r4, 1
58 ; CHECK-P8-NEXT:    li r6, 9
59 ; CHECK-P8-NEXT:    ldx r5, r3, r4
60 ; CHECK-P8-NEXT:    ldx r4, r3, r6
61 ; CHECK-P8-NEXT:    mr r3, r5
62 ; CHECK-P8-NEXT:    blr
63 entry:
64   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1
65   %0 = bitcast i8* %add.ptr to i128*
66   %1 = load i128, i128* %0, align 16
67   ret i128 %1
70 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
71 define dso_local i128 @ld_align16___int128___int128(i8* nocapture readonly %ptr) {
72 ; CHECK-LABEL: ld_align16___int128___int128:
73 ; CHECK:       # %bb.0: # %entry
74 ; CHECK-NEXT:    ld r5, 8(r3)
75 ; CHECK-NEXT:    ld r4, 16(r3)
76 ; CHECK-NEXT:    mr r3, r5
77 ; CHECK-NEXT:    blr
78 entry:
79   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8
80   %0 = bitcast i8* %add.ptr to i128*
81   %1 = load i128, i128* %0, align 16
82   ret i128 %1
85 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
86 define dso_local i128 @ld_unalign32___int128___int128(i8* nocapture readonly %ptr) {
87 ; CHECK-P10-LABEL: ld_unalign32___int128___int128:
88 ; CHECK-P10:       # %bb.0: # %entry
89 ; CHECK-P10-NEXT:    pli r4, 99999
90 ; CHECK-P10-NEXT:    ldux r5, r3, r4
91 ; CHECK-P10-NEXT:    ld r4, 8(r3)
92 ; CHECK-P10-NEXT:    mr r3, r5
93 ; CHECK-P10-NEXT:    blr
95 ; CHECK-PREP10-LABEL: ld_unalign32___int128___int128:
96 ; CHECK-PREP10:       # %bb.0: # %entry
97 ; CHECK-PREP10-NEXT:    lis r4, 1
98 ; CHECK-PREP10-NEXT:    ori r4, r4, 34463
99 ; CHECK-PREP10-NEXT:    ldux r5, r3, r4
100 ; CHECK-PREP10-NEXT:    ld r4, 8(r3)
101 ; CHECK-PREP10-NEXT:    mr r3, r5
102 ; CHECK-PREP10-NEXT:    blr
103 entry:
104   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999
105   %0 = bitcast i8* %add.ptr to i128*
106   %1 = load i128, i128* %0, align 16
107   ret i128 %1
110 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
111 define dso_local i128 @ld_align32___int128___int128(i8* nocapture readonly %ptr) {
112 ; CHECK-P10-LABEL: ld_align32___int128___int128:
113 ; CHECK-P10:       # %bb.0: # %entry
114 ; CHECK-P10-NEXT:    pli r4, 99999000
115 ; CHECK-P10-NEXT:    ldux r5, r3, r4
116 ; CHECK-P10-NEXT:    ld r4, 8(r3)
117 ; CHECK-P10-NEXT:    mr r3, r5
118 ; CHECK-P10-NEXT:    blr
120 ; CHECK-PREP10-LABEL: ld_align32___int128___int128:
121 ; CHECK-PREP10:       # %bb.0: # %entry
122 ; CHECK-PREP10-NEXT:    lis r4, 1525
123 ; CHECK-PREP10-NEXT:    ori r4, r4, 56600
124 ; CHECK-PREP10-NEXT:    ldux r5, r3, r4
125 ; CHECK-PREP10-NEXT:    ld r4, 8(r3)
126 ; CHECK-PREP10-NEXT:    mr r3, r5
127 ; CHECK-PREP10-NEXT:    blr
128 entry:
129   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000
130   %0 = bitcast i8* %add.ptr to i128*
131   %1 = load i128, i128* %0, align 16
132   ret i128 %1
135 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
136 define dso_local i128 @ld_unalign64___int128___int128(i8* nocapture readonly %ptr) {
137 ; CHECK-P10-LABEL: ld_unalign64___int128___int128:
138 ; CHECK-P10:       # %bb.0: # %entry
139 ; CHECK-P10-NEXT:    pli r4, 232
140 ; CHECK-P10-NEXT:    pli r5, 3567587329
141 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
142 ; CHECK-P10-NEXT:    ldux r5, r3, r5
143 ; CHECK-P10-NEXT:    ld r4, 8(r3)
144 ; CHECK-P10-NEXT:    mr r3, r5
145 ; CHECK-P10-NEXT:    blr
147 ; CHECK-PREP10-LABEL: ld_unalign64___int128___int128:
148 ; CHECK-PREP10:       # %bb.0: # %entry
149 ; CHECK-PREP10-NEXT:    li r4, 29
150 ; CHECK-PREP10-NEXT:    rldic r4, r4, 35, 24
151 ; CHECK-PREP10-NEXT:    oris r4, r4, 54437
152 ; CHECK-PREP10-NEXT:    ori r4, r4, 4097
153 ; CHECK-PREP10-NEXT:    ldux r5, r3, r4
154 ; CHECK-PREP10-NEXT:    ld r4, 8(r3)
155 ; CHECK-PREP10-NEXT:    mr r3, r5
156 ; CHECK-PREP10-NEXT:    blr
157 entry:
158   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000001
159   %0 = bitcast i8* %add.ptr to i128*
160   %1 = load i128, i128* %0, align 16
161   ret i128 %1
164 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
165 define dso_local i128 @ld_align64___int128___int128(i8* nocapture readonly %ptr) {
166 ; CHECK-P10-LABEL: ld_align64___int128___int128:
167 ; CHECK-P10:       # %bb.0: # %entry
168 ; CHECK-P10-NEXT:    pli r4, 244140625
169 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
170 ; CHECK-P10-NEXT:    ldux r5, r3, r4
171 ; CHECK-P10-NEXT:    ld r4, 8(r3)
172 ; CHECK-P10-NEXT:    mr r3, r5
173 ; CHECK-P10-NEXT:    blr
175 ; CHECK-PREP10-LABEL: ld_align64___int128___int128:
176 ; CHECK-PREP10:       # %bb.0: # %entry
177 ; CHECK-PREP10-NEXT:    lis r4, 3725
178 ; CHECK-PREP10-NEXT:    ori r4, r4, 19025
179 ; CHECK-PREP10-NEXT:    rldic r4, r4, 12, 24
180 ; CHECK-PREP10-NEXT:    ldux r5, r3, r4
181 ; CHECK-PREP10-NEXT:    ld r4, 8(r3)
182 ; CHECK-PREP10-NEXT:    mr r3, r5
183 ; CHECK-PREP10-NEXT:    blr
184 entry:
185   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000
186   %0 = bitcast i8* %add.ptr to i128*
187   %1 = load i128, i128* %0, align 16
188   ret i128 %1
191 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
192 define dso_local i128 @ld_reg___int128___int128(i8* nocapture readonly %ptr, i64 %off) {
193 ; CHECK-LABEL: ld_reg___int128___int128:
194 ; CHECK:       # %bb.0: # %entry
195 ; CHECK-NEXT:    ldux r5, r3, r4
196 ; CHECK-NEXT:    ld r4, 8(r3)
197 ; CHECK-NEXT:    mr r3, r5
198 ; CHECK-NEXT:    blr
199 entry:
200   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off
201   %0 = bitcast i8* %add.ptr to i128*
202   %1 = load i128, i128* %0, align 16
203   ret i128 %1
206 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
207 define dso_local i128 @ld_or___int128___int128(i64 %ptr, i8 zeroext %off) {
208 ; CHECK-LABEL: ld_or___int128___int128:
209 ; CHECK:       # %bb.0: # %entry
210 ; CHECK-NEXT:    or r4, r4, r3
211 ; CHECK-NEXT:    ld r3, 0(r4)
212 ; CHECK-NEXT:    ld r4, 8(r4)
213 ; CHECK-NEXT:    blr
214 entry:
215   %conv = zext i8 %off to i64
216   %or = or i64 %conv, %ptr
217   %0 = inttoptr i64 %or to i128*
218   %1 = load i128, i128* %0, align 16
219   ret i128 %1
222 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
223 define dso_local i128 @ld_or2___int128___int128(i64 %ptr, i8 zeroext %off) {
224 ; CHECK-LABEL: ld_or2___int128___int128:
225 ; CHECK:       # %bb.0: # %entry
226 ; CHECK-NEXT:    rldicr r5, r3, 0, 51
227 ; CHECK-NEXT:    rotldi r6, r3, 52
228 ; CHECK-NEXT:    ldx r3, r5, r4
229 ; CHECK-NEXT:    rldimi r4, r6, 12, 0
230 ; CHECK-NEXT:    ld r4, 8(r4)
231 ; CHECK-NEXT:    blr
232 entry:
233   %and = and i64 %ptr, -4096
234   %conv = zext i8 %off to i64
235   %or = or i64 %and, %conv
236   %0 = inttoptr i64 %or to i128*
237   %1 = load i128, i128* %0, align 16
238   ret i128 %1
241 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
242 define dso_local i128 @ld_not_disjoint16___int128___int128(i64 %ptr) {
243 ; CHECK-LABEL: ld_not_disjoint16___int128___int128:
244 ; CHECK:       # %bb.0: # %entry
245 ; CHECK-NEXT:    ori r4, r3, 6
246 ; CHECK-NEXT:    ld r3, 0(r4)
247 ; CHECK-NEXT:    ld r4, 8(r4)
248 ; CHECK-NEXT:    blr
249 entry:
250   %or = or i64 %ptr, 6
251   %0 = inttoptr i64 %or to i128*
252   %1 = load i128, i128* %0, align 16
253   ret i128 %1
256 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
257 define dso_local i128 @ld_disjoint_unalign16___int128___int128(i64 %ptr) {
258 ; CHECK-P10-LABEL: ld_disjoint_unalign16___int128___int128:
259 ; CHECK-P10:       # %bb.0: # %entry
260 ; CHECK-P10-NEXT:    rldicr r4, r3, 0, 51
261 ; CHECK-P10-NEXT:    li r3, 6
262 ; CHECK-P10-NEXT:    li r5, 14
263 ; CHECK-P10-NEXT:    ldx r3, r4, r3
264 ; CHECK-P10-NEXT:    ldx r4, r4, r5
265 ; CHECK-P10-NEXT:    blr
267 ; CHECK-P9-LABEL: ld_disjoint_unalign16___int128___int128:
268 ; CHECK-P9:       # %bb.0: # %entry
269 ; CHECK-P9-NEXT:    rldicr r4, r3, 0, 51
270 ; CHECK-P9-NEXT:    li r3, 6
271 ; CHECK-P9-NEXT:    li r5, 14
272 ; CHECK-P9-NEXT:    ldx r3, r4, r3
273 ; CHECK-P9-NEXT:    ldx r4, r4, r5
274 ; CHECK-P9-NEXT:    blr
276 ; CHECK-P8-LABEL: ld_disjoint_unalign16___int128___int128:
277 ; CHECK-P8:       # %bb.0: # %entry
278 ; CHECK-P8-NEXT:    li r4, 6
279 ; CHECK-P8-NEXT:    rldicr r5, r3, 0, 51
280 ; CHECK-P8-NEXT:    li r6, 14
281 ; CHECK-P8-NEXT:    ldx r3, r5, r4
282 ; CHECK-P8-NEXT:    ldx r4, r5, r6
283 ; CHECK-P8-NEXT:    blr
284 entry:
285   %and = and i64 %ptr, -4096
286   %or = or i64 %and, 6
287   %0 = inttoptr i64 %or to i128*
288   %1 = load i128, i128* %0, align 16
289   ret i128 %1
292 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
293 define dso_local i128 @ld_disjoint_align16___int128___int128(i64 %ptr) {
294 ; CHECK-LABEL: ld_disjoint_align16___int128___int128:
295 ; CHECK:       # %bb.0: # %entry
296 ; CHECK-NEXT:    rldicr r4, r3, 0, 51
297 ; CHECK-NEXT:    ld r3, 24(r4)
298 ; CHECK-NEXT:    ld r4, 32(r4)
299 ; CHECK-NEXT:    blr
300 entry:
301   %and = and i64 %ptr, -4096
302   %or = or i64 %and, 24
303   %0 = inttoptr i64 %or to i128*
304   %1 = load i128, i128* %0, align 16
305   ret i128 %1
308 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
309 define dso_local i128 @ld_not_disjoint32___int128___int128(i64 %ptr) {
310 ; CHECK-LABEL: ld_not_disjoint32___int128___int128:
311 ; CHECK:       # %bb.0: # %entry
312 ; CHECK-NEXT:    ori r3, r3, 34463
313 ; CHECK-NEXT:    oris r4, r3, 1
314 ; CHECK-NEXT:    ld r3, 0(r4)
315 ; CHECK-NEXT:    ld r4, 8(r4)
316 ; CHECK-NEXT:    blr
317 entry:
318   %or = or i64 %ptr, 99999
319   %0 = inttoptr i64 %or to i128*
320   %1 = load i128, i128* %0, align 16
321   ret i128 %1
324 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
325 define dso_local i128 @ld_disjoint_unalign32___int128___int128(i64 %ptr) {
326 ; CHECK-P10-LABEL: ld_disjoint_unalign32___int128___int128:
327 ; CHECK-P10:       # %bb.0: # %entry
328 ; CHECK-P10-NEXT:    rldicr r4, r3, 0, 43
329 ; CHECK-P10-NEXT:    pli r3, 99999
330 ; CHECK-P10-NEXT:    pli r5, 100007
331 ; CHECK-P10-NEXT:    ldx r3, r4, r3
332 ; CHECK-P10-NEXT:    ldx r4, r4, r5
333 ; CHECK-P10-NEXT:    blr
335 ; CHECK-P9-LABEL: ld_disjoint_unalign32___int128___int128:
336 ; CHECK-P9:       # %bb.0: # %entry
337 ; CHECK-P9-NEXT:    lis r5, 1
338 ; CHECK-P9-NEXT:    rldicr r4, r3, 0, 43
339 ; CHECK-P9-NEXT:    ori r3, r5, 34463
340 ; CHECK-P9-NEXT:    ori r5, r5, 34471
341 ; CHECK-P9-NEXT:    ldx r3, r4, r3
342 ; CHECK-P9-NEXT:    ldx r4, r4, r5
343 ; CHECK-P9-NEXT:    blr
345 ; CHECK-P8-LABEL: ld_disjoint_unalign32___int128___int128:
346 ; CHECK-P8:       # %bb.0: # %entry
347 ; CHECK-P8-NEXT:    lis r4, 1
348 ; CHECK-P8-NEXT:    rldicr r5, r3, 0, 43
349 ; CHECK-P8-NEXT:    ori r3, r4, 34463
350 ; CHECK-P8-NEXT:    ori r4, r4, 34471
351 ; CHECK-P8-NEXT:    ldx r3, r5, r3
352 ; CHECK-P8-NEXT:    ldx r4, r5, r4
353 ; CHECK-P8-NEXT:    blr
354 entry:
355   %and = and i64 %ptr, -1048576
356   %or = or i64 %and, 99999
357   %0 = inttoptr i64 %or to i128*
358   %1 = load i128, i128* %0, align 16
359   ret i128 %1
362 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
363 define dso_local i128 @ld_disjoint_align32___int128___int128(i64 %ptr) {
364 ; CHECK-P10-LABEL: ld_disjoint_align32___int128___int128:
365 ; CHECK-P10:       # %bb.0: # %entry
366 ; CHECK-P10-NEXT:    lis r4, -15264
367 ; CHECK-P10-NEXT:    pli r5, 999990008
368 ; CHECK-P10-NEXT:    and r4, r3, r4
369 ; CHECK-P10-NEXT:    pli r3, 999990000
370 ; CHECK-P10-NEXT:    ldx r3, r4, r3
371 ; CHECK-P10-NEXT:    ldx r4, r4, r5
372 ; CHECK-P10-NEXT:    blr
374 ; CHECK-PREP10-LABEL: ld_disjoint_align32___int128___int128:
375 ; CHECK-PREP10:       # %bb.0: # %entry
376 ; CHECK-PREP10-NEXT:    lis r4, -15264
377 ; CHECK-PREP10-NEXT:    lis r5, 15258
378 ; CHECK-PREP10-NEXT:    and r4, r3, r4
379 ; CHECK-PREP10-NEXT:    ori r3, r5, 41712
380 ; CHECK-PREP10-NEXT:    ori r5, r5, 41720
381 ; CHECK-PREP10-NEXT:    ldx r3, r4, r3
382 ; CHECK-PREP10-NEXT:    ldx r4, r4, r5
383 ; CHECK-PREP10-NEXT:    blr
384 entry:
385   %and = and i64 %ptr, -1000341504
386   %or = or i64 %and, 999990000
387   %0 = inttoptr i64 %or to i128*
388   %1 = load i128, i128* %0, align 16
389   ret i128 %1
392 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
393 define dso_local i128 @ld_not_disjoint64___int128___int128(i64 %ptr) {
394 ; CHECK-P10-LABEL: ld_not_disjoint64___int128___int128:
395 ; CHECK-P10:       # %bb.0: # %entry
396 ; CHECK-P10-NEXT:    pli r4, 232
397 ; CHECK-P10-NEXT:    pli r5, 3567587329
398 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
399 ; CHECK-P10-NEXT:    or r4, r3, r5
400 ; CHECK-P10-NEXT:    ld r3, 0(r4)
401 ; CHECK-P10-NEXT:    ld r4, 8(r4)
402 ; CHECK-P10-NEXT:    blr
404 ; CHECK-PREP10-LABEL: ld_not_disjoint64___int128___int128:
405 ; CHECK-PREP10:       # %bb.0: # %entry
406 ; CHECK-PREP10-NEXT:    li r4, 29
407 ; CHECK-PREP10-NEXT:    rldic r4, r4, 35, 24
408 ; CHECK-PREP10-NEXT:    oris r4, r4, 54437
409 ; CHECK-PREP10-NEXT:    ori r4, r4, 4097
410 ; CHECK-PREP10-NEXT:    or r4, r3, r4
411 ; CHECK-PREP10-NEXT:    ld r3, 0(r4)
412 ; CHECK-PREP10-NEXT:    ld r4, 8(r4)
413 ; CHECK-PREP10-NEXT:    blr
414 entry:
415   %or = or i64 %ptr, 1000000000001
416   %0 = inttoptr i64 %or to i128*
417   %1 = load i128, i128* %0, align 16
418   ret i128 %1
421 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
422 define dso_local i128 @ld_disjoint_unalign64___int128___int128(i64 %ptr) {
423 ; CHECK-P10-LABEL: ld_disjoint_unalign64___int128___int128:
424 ; CHECK-P10:       # %bb.0: # %entry
425 ; CHECK-P10-NEXT:    rldicr r4, r3, 0, 23
426 ; CHECK-P10-NEXT:    pli r5, 232
427 ; CHECK-P10-NEXT:    pli r3, 3567587329
428 ; CHECK-P10-NEXT:    pli r6, 3567587337
429 ; CHECK-P10-NEXT:    rldimi r3, r5, 32, 0
430 ; CHECK-P10-NEXT:    rldimi r6, r5, 32, 0
431 ; CHECK-P10-NEXT:    ldx r3, r4, r3
432 ; CHECK-P10-NEXT:    ldx r4, r4, r6
433 ; CHECK-P10-NEXT:    blr
435 ; CHECK-P9-LABEL: ld_disjoint_unalign64___int128___int128:
436 ; CHECK-P9:       # %bb.0: # %entry
437 ; CHECK-P9-NEXT:    rldicr r4, r3, 0, 23
438 ; CHECK-P9-NEXT:    li r3, 29
439 ; CHECK-P9-NEXT:    rldic r3, r3, 35, 24
440 ; CHECK-P9-NEXT:    oris r5, r3, 54437
441 ; CHECK-P9-NEXT:    ori r3, r5, 4097
442 ; CHECK-P9-NEXT:    ori r5, r5, 4105
443 ; CHECK-P9-NEXT:    ldx r3, r4, r3
444 ; CHECK-P9-NEXT:    ldx r4, r4, r5
445 ; CHECK-P9-NEXT:    blr
447 ; CHECK-P8-LABEL: ld_disjoint_unalign64___int128___int128:
448 ; CHECK-P8:       # %bb.0: # %entry
449 ; CHECK-P8-NEXT:    li r4, 29
450 ; CHECK-P8-NEXT:    rldicr r5, r3, 0, 23
451 ; CHECK-P8-NEXT:    rldic r4, r4, 35, 24
452 ; CHECK-P8-NEXT:    oris r3, r4, 54437
453 ; CHECK-P8-NEXT:    ori r4, r3, 4097
454 ; CHECK-P8-NEXT:    ori r6, r3, 4105
455 ; CHECK-P8-NEXT:    ldx r3, r5, r4
456 ; CHECK-P8-NEXT:    ldx r4, r5, r6
457 ; CHECK-P8-NEXT:    blr
458 entry:
459   %and = and i64 %ptr, -1099511627776
460   %or = or i64 %and, 1000000000001
461   %0 = inttoptr i64 %or to i128*
462   %1 = load i128, i128* %0, align 16
463   ret i128 %1
466 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
467 define dso_local i128 @ld_disjoint_align64___int128___int128(i64 %ptr) {
468 ; CHECK-P10-LABEL: ld_disjoint_align64___int128___int128:
469 ; CHECK-P10:       # %bb.0: # %entry
470 ; CHECK-P10-NEXT:    rldicr r4, r3, 0, 23
471 ; CHECK-P10-NEXT:    pli r3, 244140625
472 ; CHECK-P10-NEXT:    pli r5, 232
473 ; CHECK-P10-NEXT:    pli r6, 3567587336
474 ; CHECK-P10-NEXT:    rldic r3, r3, 12, 24
475 ; CHECK-P10-NEXT:    rldimi r6, r5, 32, 0
476 ; CHECK-P10-NEXT:    ldx r3, r4, r3
477 ; CHECK-P10-NEXT:    ldx r4, r4, r6
478 ; CHECK-P10-NEXT:    blr
480 ; CHECK-P9-LABEL: ld_disjoint_align64___int128___int128:
481 ; CHECK-P9:       # %bb.0: # %entry
482 ; CHECK-P9-NEXT:    li r5, 29
483 ; CHECK-P9-NEXT:    rldicr r4, r3, 0, 23
484 ; CHECK-P9-NEXT:    lis r3, 3725
485 ; CHECK-P9-NEXT:    rldic r5, r5, 35, 24
486 ; CHECK-P9-NEXT:    ori r3, r3, 19025
487 ; CHECK-P9-NEXT:    oris r5, r5, 54437
488 ; CHECK-P9-NEXT:    rldic r3, r3, 12, 24
489 ; CHECK-P9-NEXT:    ori r5, r5, 4104
490 ; CHECK-P9-NEXT:    ldx r3, r4, r3
491 ; CHECK-P9-NEXT:    ldx r4, r4, r5
492 ; CHECK-P9-NEXT:    blr
494 ; CHECK-P8-LABEL: ld_disjoint_align64___int128___int128:
495 ; CHECK-P8:       # %bb.0: # %entry
496 ; CHECK-P8-NEXT:    li r4, 29
497 ; CHECK-P8-NEXT:    rldicr r5, r3, 0, 23
498 ; CHECK-P8-NEXT:    lis r3, 3725
499 ; CHECK-P8-NEXT:    rldic r4, r4, 35, 24
500 ; CHECK-P8-NEXT:    ori r3, r3, 19025
501 ; CHECK-P8-NEXT:    oris r4, r4, 54437
502 ; CHECK-P8-NEXT:    rldic r3, r3, 12, 24
503 ; CHECK-P8-NEXT:    ori r4, r4, 4104
504 ; CHECK-P8-NEXT:    ldx r3, r5, r3
505 ; CHECK-P8-NEXT:    ldx r4, r5, r4
506 ; CHECK-P8-NEXT:    blr
507 entry:
508   %and = and i64 %ptr, -1099511627776
509   %or = or i64 %and, 1000000000000
510   %0 = inttoptr i64 %or to i128*
511   %1 = load i128, i128* %0, align 4096
512   ret i128 %1
515 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
516 define dso_local i128 @ld_cst_unalign16___int128___int128() {
517 ; CHECK-LABEL: ld_cst_unalign16___int128___int128:
518 ; CHECK:       # %bb.0: # %entry
519 ; CHECK-NEXT:    li r3, 255
520 ; CHECK-NEXT:    li r4, 263
521 ; CHECK-NEXT:    ld r3, 0(r3)
522 ; CHECK-NEXT:    ld r4, 0(r4)
523 ; CHECK-NEXT:    blr
524 entry:
525   %0 = load i128, i128* inttoptr (i64 255 to i128*), align 16
526   ret i128 %0
529 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
530 define dso_local i128 @ld_cst_align16___int128___int128() {
531 ; CHECK-LABEL: ld_cst_align16___int128___int128:
532 ; CHECK:       # %bb.0: # %entry
533 ; CHECK-NEXT:    ld r3, 4080(0)
534 ; CHECK-NEXT:    ld r4, 4088(0)
535 ; CHECK-NEXT:    blr
536 entry:
537   %0 = load i128, i128* inttoptr (i64 4080 to i128*), align 16
538   ret i128 %0
541 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
542 define dso_local i128 @ld_cst_unalign32___int128___int128() {
543 ; CHECK-P10-LABEL: ld_cst_unalign32___int128___int128:
544 ; CHECK-P10:       # %bb.0: # %entry
545 ; CHECK-P10-NEXT:    pli r3, 99999
546 ; CHECK-P10-NEXT:    pli r4, 100007
547 ; CHECK-P10-NEXT:    ld r3, 0(r3)
548 ; CHECK-P10-NEXT:    ld r4, 0(r4)
549 ; CHECK-P10-NEXT:    blr
551 ; CHECK-P9-LABEL: ld_cst_unalign32___int128___int128:
552 ; CHECK-P9:       # %bb.0: # %entry
553 ; CHECK-P9-NEXT:    lis r4, 1
554 ; CHECK-P9-NEXT:    ori r3, r4, 34463
555 ; CHECK-P9-NEXT:    ori r4, r4, 34471
556 ; CHECK-P9-NEXT:    ld r3, 0(r3)
557 ; CHECK-P9-NEXT:    ld r4, 0(r4)
558 ; CHECK-P9-NEXT:    blr
560 ; CHECK-P8-LABEL: ld_cst_unalign32___int128___int128:
561 ; CHECK-P8:       # %bb.0: # %entry
562 ; CHECK-P8-NEXT:    lis r3, 1
563 ; CHECK-P8-NEXT:    ori r4, r3, 34463
564 ; CHECK-P8-NEXT:    ori r5, r3, 34471
565 ; CHECK-P8-NEXT:    ld r3, 0(r4)
566 ; CHECK-P8-NEXT:    ld r4, 0(r5)
567 ; CHECK-P8-NEXT:    blr
568 entry:
569   %0 = load i128, i128* inttoptr (i64 99999 to i128*), align 16
570   ret i128 %0
573 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
574 define dso_local i128 @ld_cst_align32___int128___int128() {
575 ; CHECK-LABEL: ld_cst_align32___int128___int128:
576 ; CHECK:       # %bb.0: # %entry
577 ; CHECK-NEXT:    lis r4, 153
578 ; CHECK-NEXT:    ld r3, -27108(r4)
579 ; CHECK-NEXT:    ld r4, -27100(r4)
580 ; CHECK-NEXT:    blr
581 entry:
582   %0 = load i128, i128* inttoptr (i64 9999900 to i128*), align 16
583   ret i128 %0
586 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
587 define dso_local i128 @ld_cst_unalign64___int128___int128() {
588 ; CHECK-P10-LABEL: ld_cst_unalign64___int128___int128:
589 ; CHECK-P10:       # %bb.0: # %entry
590 ; CHECK-P10-NEXT:    pli r4, 232
591 ; CHECK-P10-NEXT:    pli r3, 3567587329
592 ; CHECK-P10-NEXT:    pli r5, 3567587337
593 ; CHECK-P10-NEXT:    rldimi r3, r4, 32, 0
594 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
595 ; CHECK-P10-NEXT:    ld r3, 0(r3)
596 ; CHECK-P10-NEXT:    ld r4, 0(r5)
597 ; CHECK-P10-NEXT:    blr
599 ; CHECK-P9-LABEL: ld_cst_unalign64___int128___int128:
600 ; CHECK-P9:       # %bb.0: # %entry
601 ; CHECK-P9-NEXT:    li r3, 29
602 ; CHECK-P9-NEXT:    rldic r3, r3, 35, 24
603 ; CHECK-P9-NEXT:    oris r4, r3, 54437
604 ; CHECK-P9-NEXT:    ori r3, r4, 4097
605 ; CHECK-P9-NEXT:    ori r4, r4, 4105
606 ; CHECK-P9-NEXT:    ld r3, 0(r3)
607 ; CHECK-P9-NEXT:    ld r4, 0(r4)
608 ; CHECK-P9-NEXT:    blr
610 ; CHECK-P8-LABEL: ld_cst_unalign64___int128___int128:
611 ; CHECK-P8:       # %bb.0: # %entry
612 ; CHECK-P8-NEXT:    li r3, 29
613 ; CHECK-P8-NEXT:    rldic r3, r3, 35, 24
614 ; CHECK-P8-NEXT:    oris r3, r3, 54437
615 ; CHECK-P8-NEXT:    ori r4, r3, 4097
616 ; CHECK-P8-NEXT:    ori r5, r3, 4105
617 ; CHECK-P8-NEXT:    ld r3, 0(r4)
618 ; CHECK-P8-NEXT:    ld r4, 0(r5)
619 ; CHECK-P8-NEXT:    blr
620 entry:
621   %0 = load i128, i128* inttoptr (i64 1000000000001 to i128*), align 16
622   ret i128 %0
625 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
626 define dso_local i128 @ld_cst_align64___int128___int128() {
627 ; CHECK-P10-LABEL: ld_cst_align64___int128___int128:
628 ; CHECK-P10:       # %bb.0: # %entry
629 ; CHECK-P10-NEXT:    pli r3, 232
630 ; CHECK-P10-NEXT:    pli r4, 3567587336
631 ; CHECK-P10-NEXT:    rldimi r4, r3, 32, 0
632 ; CHECK-P10-NEXT:    pli r3, 244140625
633 ; CHECK-P10-NEXT:    rldic r3, r3, 12, 24
634 ; CHECK-P10-NEXT:    ld r4, 0(r4)
635 ; CHECK-P10-NEXT:    ld r3, 0(r3)
636 ; CHECK-P10-NEXT:    blr
638 ; CHECK-P9-LABEL: ld_cst_align64___int128___int128:
639 ; CHECK-P9:       # %bb.0: # %entry
640 ; CHECK-P9-NEXT:    li r4, 29
641 ; CHECK-P9-NEXT:    lis r3, 3725
642 ; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
643 ; CHECK-P9-NEXT:    ori r3, r3, 19025
644 ; CHECK-P9-NEXT:    oris r4, r4, 54437
645 ; CHECK-P9-NEXT:    rldic r3, r3, 12, 24
646 ; CHECK-P9-NEXT:    ori r4, r4, 4104
647 ; CHECK-P9-NEXT:    ld r3, 0(r3)
648 ; CHECK-P9-NEXT:    ld r4, 0(r4)
649 ; CHECK-P9-NEXT:    blr
651 ; CHECK-P8-LABEL: ld_cst_align64___int128___int128:
652 ; CHECK-P8:       # %bb.0: # %entry
653 ; CHECK-P8-NEXT:    li r3, 29
654 ; CHECK-P8-NEXT:    lis r4, 3725
655 ; CHECK-P8-NEXT:    rldic r3, r3, 35, 24
656 ; CHECK-P8-NEXT:    ori r4, r4, 19025
657 ; CHECK-P8-NEXT:    oris r3, r3, 54437
658 ; CHECK-P8-NEXT:    rldic r4, r4, 12, 24
659 ; CHECK-P8-NEXT:    ori r5, r3, 4104
660 ; CHECK-P8-NEXT:    ld r3, 0(r4)
661 ; CHECK-P8-NEXT:    ld r4, 0(r5)
662 ; CHECK-P8-NEXT:    blr
663 entry:
664   %0 = load i128, i128* inttoptr (i64 1000000000000 to i128*), align 4096
665   ret i128 %0
668 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
669 define dso_local void @st_0__int128___int128(i64 %ptr, i128 %str) {
670 ; CHECK-LABEL: st_0__int128___int128:
671 ; CHECK:       # %bb.0: # %entry
672 ; CHECK-NEXT:    std r5, 8(r3)
673 ; CHECK-NEXT:    std r4, 0(r3)
674 ; CHECK-NEXT:    blr
675 entry:
676   %0 = inttoptr i64 %ptr to i128*
677   store i128 %str, i128* %0, align 16
678   ret void
681 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
682 define dso_local void @st_unalign16__int128___int128(i8* nocapture %ptr, i128 %str) {
683 ; CHECK-P10-LABEL: st_unalign16__int128___int128:
684 ; CHECK-P10:       # %bb.0: # %entry
685 ; CHECK-P10-NEXT:    li r6, 9
686 ; CHECK-P10-NEXT:    stdx r5, r3, r6
687 ; CHECK-P10-NEXT:    li r5, 1
688 ; CHECK-P10-NEXT:    stdx r4, r3, r5
689 ; CHECK-P10-NEXT:    blr
691 ; CHECK-P9-LABEL: st_unalign16__int128___int128:
692 ; CHECK-P9:       # %bb.0: # %entry
693 ; CHECK-P9-NEXT:    li r6, 9
694 ; CHECK-P9-NEXT:    stdx r5, r3, r6
695 ; CHECK-P9-NEXT:    li r5, 1
696 ; CHECK-P9-NEXT:    stdx r4, r3, r5
697 ; CHECK-P9-NEXT:    blr
699 ; CHECK-P8-LABEL: st_unalign16__int128___int128:
700 ; CHECK-P8:       # %bb.0: # %entry
701 ; CHECK-P8-NEXT:    li r6, 9
702 ; CHECK-P8-NEXT:    li r7, 1
703 ; CHECK-P8-NEXT:    stdx r5, r3, r6
704 ; CHECK-P8-NEXT:    stdx r4, r3, r7
705 ; CHECK-P8-NEXT:    blr
706 entry:
707   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1
708   %0 = bitcast i8* %add.ptr to i128*
709   store i128 %str, i128* %0, align 16
710   ret void
713 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
714 define dso_local void @st_align16__int128___int128(i8* nocapture %ptr, i128 %str) {
715 ; CHECK-LABEL: st_align16__int128___int128:
716 ; CHECK:       # %bb.0: # %entry
717 ; CHECK-NEXT:    std r5, 16(r3)
718 ; CHECK-NEXT:    std r4, 8(r3)
719 ; CHECK-NEXT:    blr
720 entry:
721   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8
722   %0 = bitcast i8* %add.ptr to i128*
723   store i128 %str, i128* %0, align 16
724   ret void
727 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
728 define dso_local void @st_unalign32__int128___int128(i8* nocapture %ptr, i128 %str) {
729 ; CHECK-P10-LABEL: st_unalign32__int128___int128:
730 ; CHECK-P10:       # %bb.0: # %entry
731 ; CHECK-P10-NEXT:    pli r6, 99999
732 ; CHECK-P10-NEXT:    stdux r4, r3, r6
733 ; CHECK-P10-NEXT:    std r5, 8(r3)
734 ; CHECK-P10-NEXT:    blr
736 ; CHECK-PREP10-LABEL: st_unalign32__int128___int128:
737 ; CHECK-PREP10:       # %bb.0: # %entry
738 ; CHECK-PREP10-NEXT:    lis r6, 1
739 ; CHECK-PREP10-NEXT:    ori r6, r6, 34463
740 ; CHECK-PREP10-NEXT:    stdux r4, r3, r6
741 ; CHECK-PREP10-NEXT:    std r5, 8(r3)
742 ; CHECK-PREP10-NEXT:    blr
743 entry:
744   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999
745   %0 = bitcast i8* %add.ptr to i128*
746   store i128 %str, i128* %0, align 16
747   ret void
750 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
751 define dso_local void @st_align32__int128___int128(i8* nocapture %ptr, i128 %str) {
752 ; CHECK-P10-LABEL: st_align32__int128___int128:
753 ; CHECK-P10:       # %bb.0: # %entry
754 ; CHECK-P10-NEXT:    pli r6, 99999000
755 ; CHECK-P10-NEXT:    stdux r4, r3, r6
756 ; CHECK-P10-NEXT:    std r5, 8(r3)
757 ; CHECK-P10-NEXT:    blr
759 ; CHECK-PREP10-LABEL: st_align32__int128___int128:
760 ; CHECK-PREP10:       # %bb.0: # %entry
761 ; CHECK-PREP10-NEXT:    lis r6, 1525
762 ; CHECK-PREP10-NEXT:    ori r6, r6, 56600
763 ; CHECK-PREP10-NEXT:    stdux r4, r3, r6
764 ; CHECK-PREP10-NEXT:    std r5, 8(r3)
765 ; CHECK-PREP10-NEXT:    blr
766 entry:
767   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000
768   %0 = bitcast i8* %add.ptr to i128*
769   store i128 %str, i128* %0, align 16
770   ret void
773 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
774 define dso_local void @st_unalign64__int128___int128(i8* nocapture %ptr, i128 %str) {
775 ; CHECK-P10-LABEL: st_unalign64__int128___int128:
776 ; CHECK-P10:       # %bb.0: # %entry
777 ; CHECK-P10-NEXT:    pli r6, 232
778 ; CHECK-P10-NEXT:    pli r7, 3567587329
779 ; CHECK-P10-NEXT:    rldimi r7, r6, 32, 0
780 ; CHECK-P10-NEXT:    stdux r4, r3, r7
781 ; CHECK-P10-NEXT:    std r5, 8(r3)
782 ; CHECK-P10-NEXT:    blr
784 ; CHECK-PREP10-LABEL: st_unalign64__int128___int128:
785 ; CHECK-PREP10:       # %bb.0: # %entry
786 ; CHECK-PREP10-NEXT:    li r6, 29
787 ; CHECK-PREP10-NEXT:    rldic r6, r6, 35, 24
788 ; CHECK-PREP10-NEXT:    oris r6, r6, 54437
789 ; CHECK-PREP10-NEXT:    ori r6, r6, 4097
790 ; CHECK-PREP10-NEXT:    stdux r4, r3, r6
791 ; CHECK-PREP10-NEXT:    std r5, 8(r3)
792 ; CHECK-PREP10-NEXT:    blr
793 entry:
794   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000001
795   %0 = bitcast i8* %add.ptr to i128*
796   store i128 %str, i128* %0, align 16
797   ret void
800 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
801 define dso_local void @st_align64__int128___int128(i8* nocapture %ptr, i128 %str) {
802 ; CHECK-P10-LABEL: st_align64__int128___int128:
803 ; CHECK-P10:       # %bb.0: # %entry
804 ; CHECK-P10-NEXT:    pli r6, 244140625
805 ; CHECK-P10-NEXT:    rldic r6, r6, 12, 24
806 ; CHECK-P10-NEXT:    stdux r4, r3, r6
807 ; CHECK-P10-NEXT:    std r5, 8(r3)
808 ; CHECK-P10-NEXT:    blr
810 ; CHECK-PREP10-LABEL: st_align64__int128___int128:
811 ; CHECK-PREP10:       # %bb.0: # %entry
812 ; CHECK-PREP10-NEXT:    lis r6, 3725
813 ; CHECK-PREP10-NEXT:    ori r6, r6, 19025
814 ; CHECK-PREP10-NEXT:    rldic r6, r6, 12, 24
815 ; CHECK-PREP10-NEXT:    stdux r4, r3, r6
816 ; CHECK-PREP10-NEXT:    std r5, 8(r3)
817 ; CHECK-PREP10-NEXT:    blr
818 entry:
819   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000
820   %0 = bitcast i8* %add.ptr to i128*
821   store i128 %str, i128* %0, align 16
822   ret void
825 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
826 define dso_local void @st_reg__int128___int128(i8* nocapture %ptr, i64 %off, i128 %str) {
827 ; CHECK-LABEL: st_reg__int128___int128:
828 ; CHECK:       # %bb.0: # %entry
829 ; CHECK-NEXT:    stdux r5, r3, r4
830 ; CHECK-NEXT:    std r6, 8(r3)
831 ; CHECK-NEXT:    blr
832 entry:
833   %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off
834   %0 = bitcast i8* %add.ptr to i128*
835   store i128 %str, i128* %0, align 16
836   ret void
839 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
840 define dso_local void @st_or1__int128___int128(i64 %ptr, i8 zeroext %off, i128 %str) {
841 ; CHECK-LABEL: st_or1__int128___int128:
842 ; CHECK:       # %bb.0: # %entry
843 ; CHECK-NEXT:    or r3, r4, r3
844 ; CHECK-NEXT:    std r6, 8(r3)
845 ; CHECK-NEXT:    std r5, 0(r3)
846 ; CHECK-NEXT:    blr
847 entry:
848   %conv = zext i8 %off to i64
849   %or = or i64 %conv, %ptr
850   %0 = inttoptr i64 %or to i128*
851   store i128 %str, i128* %0, align 16
852   ret void
855 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
856 define dso_local void @st_or2__int128___int128(i64 %ptr, i8 zeroext %off, i128 %str) {
857 ; CHECK-LABEL: st_or2__int128___int128:
858 ; CHECK:       # %bb.0: # %entry
859 ; CHECK-NEXT:    rldicr r7, r3, 0, 51
860 ; CHECK-NEXT:    rotldi r3, r3, 52
861 ; CHECK-NEXT:    stdx r5, r7, r4
862 ; CHECK-NEXT:    rldimi r4, r3, 12, 0
863 ; CHECK-NEXT:    std r6, 8(r4)
864 ; CHECK-NEXT:    blr
865 entry:
866   %and = and i64 %ptr, -4096
867   %conv = zext i8 %off to i64
868   %or = or i64 %and, %conv
869   %0 = inttoptr i64 %or to i128*
870   store i128 %str, i128* %0, align 16
871   ret void
874 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
875 define dso_local void @st_not_disjoint16__int128___int128(i64 %ptr, i128 %str) {
876 ; CHECK-LABEL: st_not_disjoint16__int128___int128:
877 ; CHECK:       # %bb.0: # %entry
878 ; CHECK-NEXT:    ori r3, r3, 6
879 ; CHECK-NEXT:    std r5, 8(r3)
880 ; CHECK-NEXT:    std r4, 0(r3)
881 ; CHECK-NEXT:    blr
882 entry:
883   %or = or i64 %ptr, 6
884   %0 = inttoptr i64 %or to i128*
885   store i128 %str, i128* %0, align 16
886   ret void
889 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
890 define dso_local void @st_disjoint_unalign16__int128___int128(i64 %ptr, i128 %str) {
891 ; CHECK-P10-LABEL: st_disjoint_unalign16__int128___int128:
892 ; CHECK-P10:       # %bb.0: # %entry
893 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
894 ; CHECK-P10-NEXT:    li r6, 14
895 ; CHECK-P10-NEXT:    stdx r5, r3, r6
896 ; CHECK-P10-NEXT:    li r5, 6
897 ; CHECK-P10-NEXT:    stdx r4, r3, r5
898 ; CHECK-P10-NEXT:    blr
900 ; CHECK-P9-LABEL: st_disjoint_unalign16__int128___int128:
901 ; CHECK-P9:       # %bb.0: # %entry
902 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 51
903 ; CHECK-P9-NEXT:    li r6, 14
904 ; CHECK-P9-NEXT:    stdx r5, r3, r6
905 ; CHECK-P9-NEXT:    li r5, 6
906 ; CHECK-P9-NEXT:    stdx r4, r3, r5
907 ; CHECK-P9-NEXT:    blr
909 ; CHECK-P8-LABEL: st_disjoint_unalign16__int128___int128:
910 ; CHECK-P8:       # %bb.0: # %entry
911 ; CHECK-P8-NEXT:    li r6, 14
912 ; CHECK-P8-NEXT:    rldicr r3, r3, 0, 51
913 ; CHECK-P8-NEXT:    li r7, 6
914 ; CHECK-P8-NEXT:    stdx r5, r3, r6
915 ; CHECK-P8-NEXT:    stdx r4, r3, r7
916 ; CHECK-P8-NEXT:    blr
917 entry:
918   %and = and i64 %ptr, -4096
919   %or = or i64 %and, 6
920   %0 = inttoptr i64 %or to i128*
921   store i128 %str, i128* %0, align 16
922   ret void
925 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
926 define dso_local void @st_disjoint_align16__int128___int128(i64 %ptr, i128 %str) {
927 ; CHECK-LABEL: st_disjoint_align16__int128___int128:
928 ; CHECK:       # %bb.0: # %entry
929 ; CHECK-NEXT:    rldicr r3, r3, 0, 51
930 ; CHECK-NEXT:    std r5, 32(r3)
931 ; CHECK-NEXT:    std r4, 24(r3)
932 ; CHECK-NEXT:    blr
933 entry:
934   %and = and i64 %ptr, -4096
935   %or = or i64 %and, 24
936   %0 = inttoptr i64 %or to i128*
937   store i128 %str, i128* %0, align 16
938   ret void
941 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
942 define dso_local void @st_not_disjoint32__int128___int128(i64 %ptr, i128 %str) {
943 ; CHECK-LABEL: st_not_disjoint32__int128___int128:
944 ; CHECK:       # %bb.0: # %entry
945 ; CHECK-NEXT:    ori r3, r3, 34463
946 ; CHECK-NEXT:    oris r3, r3, 1
947 ; CHECK-NEXT:    std r5, 8(r3)
948 ; CHECK-NEXT:    std r4, 0(r3)
949 ; CHECK-NEXT:    blr
950 entry:
951   %or = or i64 %ptr, 99999
952   %0 = inttoptr i64 %or to i128*
953   store i128 %str, i128* %0, align 16
954   ret void
957 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
958 define dso_local void @st_disjoint_unalign32__int128___int128(i64 %ptr, i128 %str) {
959 ; CHECK-P10-LABEL: st_disjoint_unalign32__int128___int128:
960 ; CHECK-P10:       # %bb.0: # %entry
961 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 43
962 ; CHECK-P10-NEXT:    pli r6, 100007
963 ; CHECK-P10-NEXT:    stdx r5, r3, r6
964 ; CHECK-P10-NEXT:    pli r5, 99999
965 ; CHECK-P10-NEXT:    stdx r4, r3, r5
966 ; CHECK-P10-NEXT:    blr
968 ; CHECK-P9-LABEL: st_disjoint_unalign32__int128___int128:
969 ; CHECK-P9:       # %bb.0: # %entry
970 ; CHECK-P9-NEXT:    lis r6, 1
971 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 43
972 ; CHECK-P9-NEXT:    ori r7, r6, 34471
973 ; CHECK-P9-NEXT:    stdx r5, r3, r7
974 ; CHECK-P9-NEXT:    ori r5, r6, 34463
975 ; CHECK-P9-NEXT:    stdx r4, r3, r5
976 ; CHECK-P9-NEXT:    blr
978 ; CHECK-P8-LABEL: st_disjoint_unalign32__int128___int128:
979 ; CHECK-P8:       # %bb.0: # %entry
980 ; CHECK-P8-NEXT:    lis r6, 1
981 ; CHECK-P8-NEXT:    rldicr r3, r3, 0, 43
982 ; CHECK-P8-NEXT:    ori r7, r6, 34471
983 ; CHECK-P8-NEXT:    ori r6, r6, 34463
984 ; CHECK-P8-NEXT:    stdx r5, r3, r7
985 ; CHECK-P8-NEXT:    stdx r4, r3, r6
986 ; CHECK-P8-NEXT:    blr
987 entry:
988   %and = and i64 %ptr, -1048576
989   %or = or i64 %and, 99999
990   %0 = inttoptr i64 %or to i128*
991   store i128 %str, i128* %0, align 16
992   ret void
995 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
996 define dso_local void @st_disjoint_align32__int128___int128(i64 %ptr, i128 %str) {
997 ; CHECK-P10-LABEL: st_disjoint_align32__int128___int128:
998 ; CHECK-P10:       # %bb.0: # %entry
999 ; CHECK-P10-NEXT:    lis r6, -15264
1000 ; CHECK-P10-NEXT:    and r3, r3, r6
1001 ; CHECK-P10-NEXT:    pli r6, 999990008
1002 ; CHECK-P10-NEXT:    stdx r5, r3, r6
1003 ; CHECK-P10-NEXT:    pli r5, 999990000
1004 ; CHECK-P10-NEXT:    stdx r4, r3, r5
1005 ; CHECK-P10-NEXT:    blr
1007 ; CHECK-P9-LABEL: st_disjoint_align32__int128___int128:
1008 ; CHECK-P9:       # %bb.0: # %entry
1009 ; CHECK-P9-NEXT:    lis r6, -15264
1010 ; CHECK-P9-NEXT:    and r3, r3, r6
1011 ; CHECK-P9-NEXT:    lis r6, 15258
1012 ; CHECK-P9-NEXT:    ori r7, r6, 41720
1013 ; CHECK-P9-NEXT:    stdx r5, r3, r7
1014 ; CHECK-P9-NEXT:    ori r5, r6, 41712
1015 ; CHECK-P9-NEXT:    stdx r4, r3, r5
1016 ; CHECK-P9-NEXT:    blr
1018 ; CHECK-P8-LABEL: st_disjoint_align32__int128___int128:
1019 ; CHECK-P8:       # %bb.0: # %entry
1020 ; CHECK-P8-NEXT:    lis r6, -15264
1021 ; CHECK-P8-NEXT:    lis r7, 15258
1022 ; CHECK-P8-NEXT:    and r3, r3, r6
1023 ; CHECK-P8-NEXT:    ori r6, r7, 41720
1024 ; CHECK-P8-NEXT:    ori r7, r7, 41712
1025 ; CHECK-P8-NEXT:    stdx r5, r3, r6
1026 ; CHECK-P8-NEXT:    stdx r4, r3, r7
1027 ; CHECK-P8-NEXT:    blr
1028 entry:
1029   %and = and i64 %ptr, -1000341504
1030   %or = or i64 %and, 999990000
1031   %0 = inttoptr i64 %or to i128*
1032   store i128 %str, i128* %0, align 16
1033   ret void
1036 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1037 define dso_local void @st_not_disjoint64__int128___int128(i64 %ptr, i128 %str) {
1038 ; CHECK-P10-LABEL: st_not_disjoint64__int128___int128:
1039 ; CHECK-P10:       # %bb.0: # %entry
1040 ; CHECK-P10-NEXT:    pli r6, 232
1041 ; CHECK-P10-NEXT:    pli r7, 3567587329
1042 ; CHECK-P10-NEXT:    rldimi r7, r6, 32, 0
1043 ; CHECK-P10-NEXT:    or r3, r3, r7
1044 ; CHECK-P10-NEXT:    std r5, 8(r3)
1045 ; CHECK-P10-NEXT:    std r4, 0(r3)
1046 ; CHECK-P10-NEXT:    blr
1048 ; CHECK-PREP10-LABEL: st_not_disjoint64__int128___int128:
1049 ; CHECK-PREP10:       # %bb.0: # %entry
1050 ; CHECK-PREP10-NEXT:    li r6, 29
1051 ; CHECK-PREP10-NEXT:    rldic r6, r6, 35, 24
1052 ; CHECK-PREP10-NEXT:    oris r6, r6, 54437
1053 ; CHECK-PREP10-NEXT:    ori r6, r6, 4097
1054 ; CHECK-PREP10-NEXT:    or r3, r3, r6
1055 ; CHECK-PREP10-NEXT:    std r5, 8(r3)
1056 ; CHECK-PREP10-NEXT:    std r4, 0(r3)
1057 ; CHECK-PREP10-NEXT:    blr
1058 entry:
1059   %or = or i64 %ptr, 1000000000001
1060   %0 = inttoptr i64 %or to i128*
1061   store i128 %str, i128* %0, align 16
1062   ret void
1065 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1066 define dso_local void @st_disjoint_unalign64__int128___int128(i64 %ptr, i128 %str) {
1067 ; CHECK-P10-LABEL: st_disjoint_unalign64__int128___int128:
1068 ; CHECK-P10:       # %bb.0: # %entry
1069 ; CHECK-P10-NEXT:    pli r6, 232
1070 ; CHECK-P10-NEXT:    pli r7, 3567587337
1071 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
1072 ; CHECK-P10-NEXT:    rldimi r7, r6, 32, 0
1073 ; CHECK-P10-NEXT:    stdx r5, r3, r7
1074 ; CHECK-P10-NEXT:    pli r5, 3567587329
1075 ; CHECK-P10-NEXT:    rldimi r5, r6, 32, 0
1076 ; CHECK-P10-NEXT:    stdx r4, r3, r5
1077 ; CHECK-P10-NEXT:    blr
1079 ; CHECK-P9-LABEL: st_disjoint_unalign64__int128___int128:
1080 ; CHECK-P9:       # %bb.0: # %entry
1081 ; CHECK-P9-NEXT:    li r6, 29
1082 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
1083 ; CHECK-P9-NEXT:    rldic r6, r6, 35, 24
1084 ; CHECK-P9-NEXT:    oris r6, r6, 54437
1085 ; CHECK-P9-NEXT:    ori r7, r6, 4105
1086 ; CHECK-P9-NEXT:    stdx r5, r3, r7
1087 ; CHECK-P9-NEXT:    ori r5, r6, 4097
1088 ; CHECK-P9-NEXT:    stdx r4, r3, r5
1089 ; CHECK-P9-NEXT:    blr
1091 ; CHECK-P8-LABEL: st_disjoint_unalign64__int128___int128:
1092 ; CHECK-P8:       # %bb.0: # %entry
1093 ; CHECK-P8-NEXT:    li r6, 29
1094 ; CHECK-P8-NEXT:    rldicr r3, r3, 0, 23
1095 ; CHECK-P8-NEXT:    rldic r6, r6, 35, 24
1096 ; CHECK-P8-NEXT:    oris r6, r6, 54437
1097 ; CHECK-P8-NEXT:    ori r7, r6, 4105
1098 ; CHECK-P8-NEXT:    ori r6, r6, 4097
1099 ; CHECK-P8-NEXT:    stdx r5, r3, r7
1100 ; CHECK-P8-NEXT:    stdx r4, r3, r6
1101 ; CHECK-P8-NEXT:    blr
1102 entry:
1103   %and = and i64 %ptr, -1099511627776
1104   %or = or i64 %and, 1000000000001
1105   %0 = inttoptr i64 %or to i128*
1106   store i128 %str, i128* %0, align 16
1107   ret void
1110 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1111 define dso_local void @st_disjoint_align64__int128___int128(i64 %ptr, i128 %str) {
1112 ; CHECK-P10-LABEL: st_disjoint_align64__int128___int128:
1113 ; CHECK-P10:       # %bb.0: # %entry
1114 ; CHECK-P10-NEXT:    pli r6, 232
1115 ; CHECK-P10-NEXT:    pli r7, 3567587336
1116 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
1117 ; CHECK-P10-NEXT:    rldimi r7, r6, 32, 0
1118 ; CHECK-P10-NEXT:    stdx r5, r3, r7
1119 ; CHECK-P10-NEXT:    pli r5, 244140625
1120 ; CHECK-P10-NEXT:    rldic r5, r5, 12, 24
1121 ; CHECK-P10-NEXT:    stdx r4, r3, r5
1122 ; CHECK-P10-NEXT:    blr
1124 ; CHECK-P9-LABEL: st_disjoint_align64__int128___int128:
1125 ; CHECK-P9:       # %bb.0: # %entry
1126 ; CHECK-P9-NEXT:    lis r6, 3725
1127 ; CHECK-P9-NEXT:    rldicr r3, r3, 0, 23
1128 ; CHECK-P9-NEXT:    ori r6, r6, 19025
1129 ; CHECK-P9-NEXT:    rldic r6, r6, 12, 24
1130 ; CHECK-P9-NEXT:    stdx r4, r3, r6
1131 ; CHECK-P9-NEXT:    li r4, 29
1132 ; CHECK-P9-NEXT:    rldic r4, r4, 35, 24
1133 ; CHECK-P9-NEXT:    oris r4, r4, 54437
1134 ; CHECK-P9-NEXT:    ori r4, r4, 4104
1135 ; CHECK-P9-NEXT:    stdx r5, r3, r4
1136 ; CHECK-P9-NEXT:    blr
1138 ; CHECK-P8-LABEL: st_disjoint_align64__int128___int128:
1139 ; CHECK-P8:       # %bb.0: # %entry
1140 ; CHECK-P8-NEXT:    li r6, 29
1141 ; CHECK-P8-NEXT:    lis r7, 3725
1142 ; CHECK-P8-NEXT:    rldic r6, r6, 35, 24
1143 ; CHECK-P8-NEXT:    ori r7, r7, 19025
1144 ; CHECK-P8-NEXT:    oris r6, r6, 54437
1145 ; CHECK-P8-NEXT:    rldicr r3, r3, 0, 23
1146 ; CHECK-P8-NEXT:    rldic r7, r7, 12, 24
1147 ; CHECK-P8-NEXT:    ori r6, r6, 4104
1148 ; CHECK-P8-NEXT:    stdx r4, r3, r7
1149 ; CHECK-P8-NEXT:    stdx r5, r3, r6
1150 ; CHECK-P8-NEXT:    blr
1151 entry:
1152   %and = and i64 %ptr, -1099511627776
1153   %or = or i64 %and, 1000000000000
1154   %0 = inttoptr i64 %or to i128*
1155   store i128 %str, i128* %0, align 4096
1156   ret void
1159 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1160 define dso_local void @st_cst_unalign16__int128___int128(i128 %str) {
1161 ; CHECK-P10-LABEL: st_cst_unalign16__int128___int128:
1162 ; CHECK-P10:       # %bb.0: # %entry
1163 ; CHECK-P10-NEXT:    li r5, 263
1164 ; CHECK-P10-NEXT:    std r4, 0(r5)
1165 ; CHECK-P10-NEXT:    li r4, 255
1166 ; CHECK-P10-NEXT:    std r3, 0(r4)
1167 ; CHECK-P10-NEXT:    blr
1169 ; CHECK-P9-LABEL: st_cst_unalign16__int128___int128:
1170 ; CHECK-P9:       # %bb.0: # %entry
1171 ; CHECK-P9-NEXT:    li r5, 263
1172 ; CHECK-P9-NEXT:    std r4, 0(r5)
1173 ; CHECK-P9-NEXT:    li r4, 255
1174 ; CHECK-P9-NEXT:    std r3, 0(r4)
1175 ; CHECK-P9-NEXT:    blr
1177 ; CHECK-P8-LABEL: st_cst_unalign16__int128___int128:
1178 ; CHECK-P8:       # %bb.0: # %entry
1179 ; CHECK-P8-NEXT:    li r5, 263
1180 ; CHECK-P8-NEXT:    li r6, 255
1181 ; CHECK-P8-NEXT:    std r4, 0(r5)
1182 ; CHECK-P8-NEXT:    std r3, 0(r6)
1183 ; CHECK-P8-NEXT:    blr
1184 entry:
1185   store i128 %str, i128* inttoptr (i64 255 to i128*), align 16
1186   ret void
1189 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1190 define dso_local void @st_cst_align16__int128___int128(i128 %str) {
1191 ; CHECK-LABEL: st_cst_align16__int128___int128:
1192 ; CHECK:       # %bb.0: # %entry
1193 ; CHECK-NEXT:    std r4, 4088(0)
1194 ; CHECK-NEXT:    std r3, 4080(0)
1195 ; CHECK-NEXT:    blr
1196 entry:
1197   store i128 %str, i128* inttoptr (i64 4080 to i128*), align 16
1198   ret void
1201 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1202 define dso_local void @st_cst_unalign32__int128___int128(i128 %str) {
1203 ; CHECK-P10-LABEL: st_cst_unalign32__int128___int128:
1204 ; CHECK-P10:       # %bb.0: # %entry
1205 ; CHECK-P10-NEXT:    pli r5, 100007
1206 ; CHECK-P10-NEXT:    std r4, 0(r5)
1207 ; CHECK-P10-NEXT:    pli r4, 99999
1208 ; CHECK-P10-NEXT:    std r3, 0(r4)
1209 ; CHECK-P10-NEXT:    blr
1211 ; CHECK-P9-LABEL: st_cst_unalign32__int128___int128:
1212 ; CHECK-P9:       # %bb.0: # %entry
1213 ; CHECK-P9-NEXT:    lis r5, 1
1214 ; CHECK-P9-NEXT:    ori r6, r5, 34471
1215 ; CHECK-P9-NEXT:    std r4, 0(r6)
1216 ; CHECK-P9-NEXT:    ori r4, r5, 34463
1217 ; CHECK-P9-NEXT:    std r3, 0(r4)
1218 ; CHECK-P9-NEXT:    blr
1220 ; CHECK-P8-LABEL: st_cst_unalign32__int128___int128:
1221 ; CHECK-P8:       # %bb.0: # %entry
1222 ; CHECK-P8-NEXT:    lis r5, 1
1223 ; CHECK-P8-NEXT:    ori r6, r5, 34471
1224 ; CHECK-P8-NEXT:    ori r5, r5, 34463
1225 ; CHECK-P8-NEXT:    std r4, 0(r6)
1226 ; CHECK-P8-NEXT:    std r3, 0(r5)
1227 ; CHECK-P8-NEXT:    blr
1228 entry:
1229   store i128 %str, i128* inttoptr (i64 99999 to i128*), align 16
1230   ret void
1233 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1234 define dso_local void @st_cst_align32__int128___int128(i128 %str) {
1235 ; CHECK-LABEL: st_cst_align32__int128___int128:
1236 ; CHECK:       # %bb.0: # %entry
1237 ; CHECK-NEXT:    lis r5, 153
1238 ; CHECK-NEXT:    std r4, -27100(r5)
1239 ; CHECK-NEXT:    std r3, -27108(r5)
1240 ; CHECK-NEXT:    blr
1241 entry:
1242   store i128 %str, i128* inttoptr (i64 9999900 to i128*), align 16
1243   ret void
1246 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1247 define dso_local void @st_cst_unalign64__int128___int128(i128 %str) {
1248 ; CHECK-P10-LABEL: st_cst_unalign64__int128___int128:
1249 ; CHECK-P10:       # %bb.0: # %entry
1250 ; CHECK-P10-NEXT:    pli r5, 232
1251 ; CHECK-P10-NEXT:    pli r6, 3567587337
1252 ; CHECK-P10-NEXT:    rldimi r6, r5, 32, 0
1253 ; CHECK-P10-NEXT:    std r4, 0(r6)
1254 ; CHECK-P10-NEXT:    pli r4, 3567587329
1255 ; CHECK-P10-NEXT:    rldimi r4, r5, 32, 0
1256 ; CHECK-P10-NEXT:    std r3, 0(r4)
1257 ; CHECK-P10-NEXT:    blr
1259 ; CHECK-P9-LABEL: st_cst_unalign64__int128___int128:
1260 ; CHECK-P9:       # %bb.0: # %entry
1261 ; CHECK-P9-NEXT:    li r5, 29
1262 ; CHECK-P9-NEXT:    rldic r5, r5, 35, 24
1263 ; CHECK-P9-NEXT:    oris r5, r5, 54437
1264 ; CHECK-P9-NEXT:    ori r6, r5, 4105
1265 ; CHECK-P9-NEXT:    std r4, 0(r6)
1266 ; CHECK-P9-NEXT:    ori r4, r5, 4097
1267 ; CHECK-P9-NEXT:    std r3, 0(r4)
1268 ; CHECK-P9-NEXT:    blr
1270 ; CHECK-P8-LABEL: st_cst_unalign64__int128___int128:
1271 ; CHECK-P8:       # %bb.0: # %entry
1272 ; CHECK-P8-NEXT:    li r5, 29
1273 ; CHECK-P8-NEXT:    rldic r5, r5, 35, 24
1274 ; CHECK-P8-NEXT:    oris r5, r5, 54437
1275 ; CHECK-P8-NEXT:    ori r6, r5, 4105
1276 ; CHECK-P8-NEXT:    ori r5, r5, 4097
1277 ; CHECK-P8-NEXT:    std r4, 0(r6)
1278 ; CHECK-P8-NEXT:    std r3, 0(r5)
1279 ; CHECK-P8-NEXT:    blr
1280 entry:
1281   store i128 %str, i128* inttoptr (i64 1000000000001 to i128*), align 16
1282   ret void
1285 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1286 define dso_local void @st_cst_align64__int128___int128(i128 %str) {
1287 ; CHECK-P10-LABEL: st_cst_align64__int128___int128:
1288 ; CHECK-P10:       # %bb.0: # %entry
1289 ; CHECK-P10-NEXT:    pli r5, 232
1290 ; CHECK-P10-NEXT:    pli r6, 3567587336
1291 ; CHECK-P10-NEXT:    rldimi r6, r5, 32, 0
1292 ; CHECK-P10-NEXT:    std r4, 0(r6)
1293 ; CHECK-P10-NEXT:    pli r4, 244140625
1294 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
1295 ; CHECK-P10-NEXT:    std r3, 0(r4)
1296 ; CHECK-P10-NEXT:    blr
1298 ; CHECK-P9-LABEL: st_cst_align64__int128___int128:
1299 ; CHECK-P9:       # %bb.0: # %entry
1300 ; CHECK-P9-NEXT:    lis r5, 3725
1301 ; CHECK-P9-NEXT:    ori r5, r5, 19025
1302 ; CHECK-P9-NEXT:    rldic r5, r5, 12, 24
1303 ; CHECK-P9-NEXT:    std r3, 0(r5)
1304 ; CHECK-P9-NEXT:    li r3, 29
1305 ; CHECK-P9-NEXT:    rldic r3, r3, 35, 24
1306 ; CHECK-P9-NEXT:    oris r3, r3, 54437
1307 ; CHECK-P9-NEXT:    ori r3, r3, 4104
1308 ; CHECK-P9-NEXT:    std r4, 0(r3)
1309 ; CHECK-P9-NEXT:    blr
1311 ; CHECK-P8-LABEL: st_cst_align64__int128___int128:
1312 ; CHECK-P8:       # %bb.0: # %entry
1313 ; CHECK-P8-NEXT:    li r5, 29
1314 ; CHECK-P8-NEXT:    lis r6, 3725
1315 ; CHECK-P8-NEXT:    rldic r5, r5, 35, 24
1316 ; CHECK-P8-NEXT:    ori r6, r6, 19025
1317 ; CHECK-P8-NEXT:    oris r5, r5, 54437
1318 ; CHECK-P8-NEXT:    rldic r6, r6, 12, 24
1319 ; CHECK-P8-NEXT:    ori r5, r5, 4104
1320 ; CHECK-P8-NEXT:    std r3, 0(r6)
1321 ; CHECK-P8-NEXT:    std r4, 0(r5)
1322 ; CHECK-P8-NEXT:    blr
1323 entry:
1324   store i128 %str, i128* inttoptr (i64 1000000000000 to i128*), align 4096
1325   ret void