1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
4 ; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10
5 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
7 ; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10
8 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
10 ; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10
11 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
13 ; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10
14 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
16 ; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10
17 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
19 ; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10
20 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff \
22 ; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10
24 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
25 define dso_local i128 @ld_0___int128___int128(i64 %ptr) {
26 ; CHECK-LABEL: ld_0___int128___int128:
27 ; CHECK: # %bb.0: # %entry
28 ; CHECK-NEXT: ld 5, 0(3)
29 ; CHECK-NEXT: ld 4, 8(3)
33 %0 = inttoptr i64 %ptr to ptr
34 %1 = load i128, ptr %0, align 16
38 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
39 define dso_local i128 @ld_unalign16___int128___int128(ptr nocapture readonly %ptr) {
40 ; CHECK-P10-LABEL: ld_unalign16___int128___int128:
41 ; CHECK-P10: # %bb.0: # %entry
42 ; CHECK-P10-NEXT: pld 5, 1(3), 0
43 ; CHECK-P10-NEXT: pld 4, 9(3), 0
44 ; CHECK-P10-NEXT: mr 3, 5
47 ; CHECK-PREP10-LABEL: ld_unalign16___int128___int128:
48 ; CHECK-PREP10: # %bb.0: # %entry
49 ; CHECK-PREP10-NEXT: li 4, 1
50 ; CHECK-PREP10-NEXT: ldx 5, 3, 4
51 ; CHECK-PREP10-NEXT: li 4, 9
52 ; CHECK-PREP10-NEXT: ldx 4, 3, 4
53 ; CHECK-PREP10-NEXT: mr 3, 5
54 ; CHECK-PREP10-NEXT: blr
56 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1
57 %0 = load i128, ptr %add.ptr, align 16
61 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
62 define dso_local i128 @ld_align16___int128___int128(ptr nocapture readonly %ptr) {
63 ; CHECK-LABEL: ld_align16___int128___int128:
64 ; CHECK: # %bb.0: # %entry
65 ; CHECK-NEXT: ld 5, 8(3)
66 ; CHECK-NEXT: ld 4, 16(3)
70 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
71 %0 = load i128, ptr %add.ptr, align 16
75 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
76 define dso_local i128 @ld_unalign32___int128___int128(ptr nocapture readonly %ptr) {
77 ; CHECK-P10-LABEL: ld_unalign32___int128___int128:
78 ; CHECK-P10: # %bb.0: # %entry
79 ; CHECK-P10-NEXT: pli 4, 99999
80 ; CHECK-P10-NEXT: ldux 5, 3, 4
81 ; CHECK-P10-NEXT: ld 4, 8(3)
82 ; CHECK-P10-NEXT: mr 3, 5
85 ; CHECK-PREP10-LABEL: ld_unalign32___int128___int128:
86 ; CHECK-PREP10: # %bb.0: # %entry
87 ; CHECK-PREP10-NEXT: lis 4, 1
88 ; CHECK-PREP10-NEXT: ori 4, 4, 34463
89 ; CHECK-PREP10-NEXT: ldux 5, 3, 4
90 ; CHECK-PREP10-NEXT: ld 4, 8(3)
91 ; CHECK-PREP10-NEXT: mr 3, 5
92 ; CHECK-PREP10-NEXT: blr
94 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999
95 %0 = load i128, ptr %add.ptr, align 16
99 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
100 define dso_local i128 @ld_align32___int128___int128(ptr nocapture readonly %ptr) {
101 ; CHECK-P10-LABEL: ld_align32___int128___int128:
102 ; CHECK-P10: # %bb.0: # %entry
103 ; CHECK-P10-NEXT: pli 4, 99999000
104 ; CHECK-P10-NEXT: ldux 5, 3, 4
105 ; CHECK-P10-NEXT: ld 4, 8(3)
106 ; CHECK-P10-NEXT: mr 3, 5
107 ; CHECK-P10-NEXT: blr
109 ; CHECK-PREP10-LABEL: ld_align32___int128___int128:
110 ; CHECK-PREP10: # %bb.0: # %entry
111 ; CHECK-PREP10-NEXT: lis 4, 1525
112 ; CHECK-PREP10-NEXT: ori 4, 4, 56600
113 ; CHECK-PREP10-NEXT: ldux 5, 3, 4
114 ; CHECK-PREP10-NEXT: ld 4, 8(3)
115 ; CHECK-PREP10-NEXT: mr 3, 5
116 ; CHECK-PREP10-NEXT: blr
118 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
119 %0 = load i128, ptr %add.ptr, align 16
123 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
124 define dso_local i128 @ld_unalign64___int128___int128(ptr nocapture readonly %ptr) {
125 ; CHECK-P10-LABEL: ld_unalign64___int128___int128:
126 ; CHECK-P10: # %bb.0: # %entry
127 ; CHECK-P10-NEXT: pli 4, 232
128 ; CHECK-P10-NEXT: pli 5, 3567587329
129 ; CHECK-P10-NEXT: rldimi 5, 4, 32, 0
130 ; CHECK-P10-NEXT: ldux 5, 3, 5
131 ; CHECK-P10-NEXT: ld 4, 8(3)
132 ; CHECK-P10-NEXT: mr 3, 5
133 ; CHECK-P10-NEXT: blr
135 ; CHECK-PREP10-LABEL: ld_unalign64___int128___int128:
136 ; CHECK-PREP10: # %bb.0: # %entry
137 ; CHECK-PREP10-NEXT: li 4, 29
138 ; CHECK-PREP10-NEXT: rldic 4, 4, 35, 24
139 ; CHECK-PREP10-NEXT: oris 4, 4, 54437
140 ; CHECK-PREP10-NEXT: ori 4, 4, 4097
141 ; CHECK-PREP10-NEXT: ldux 5, 3, 4
142 ; CHECK-PREP10-NEXT: ld 4, 8(3)
143 ; CHECK-PREP10-NEXT: mr 3, 5
144 ; CHECK-PREP10-NEXT: blr
146 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001
147 %0 = load i128, ptr %add.ptr, align 16
151 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
152 define dso_local i128 @ld_align64___int128___int128(ptr nocapture readonly %ptr) {
153 ; CHECK-P10-LABEL: ld_align64___int128___int128:
154 ; CHECK-P10: # %bb.0: # %entry
155 ; CHECK-P10-NEXT: pli 4, 244140625
156 ; CHECK-P10-NEXT: rldic 4, 4, 12, 24
157 ; CHECK-P10-NEXT: ldux 5, 3, 4
158 ; CHECK-P10-NEXT: ld 4, 8(3)
159 ; CHECK-P10-NEXT: mr 3, 5
160 ; CHECK-P10-NEXT: blr
162 ; CHECK-PREP10-LABEL: ld_align64___int128___int128:
163 ; CHECK-PREP10: # %bb.0: # %entry
164 ; CHECK-PREP10-NEXT: lis 4, 3725
165 ; CHECK-PREP10-NEXT: ori 4, 4, 19025
166 ; CHECK-PREP10-NEXT: rldic 4, 4, 12, 24
167 ; CHECK-PREP10-NEXT: ldux 5, 3, 4
168 ; CHECK-PREP10-NEXT: ld 4, 8(3)
169 ; CHECK-PREP10-NEXT: mr 3, 5
170 ; CHECK-PREP10-NEXT: blr
172 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
173 %0 = load i128, ptr %add.ptr, align 16
177 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
178 define dso_local i128 @ld_reg___int128___int128(ptr nocapture readonly %ptr, i64 %off) {
179 ; CHECK-LABEL: ld_reg___int128___int128:
180 ; CHECK: # %bb.0: # %entry
181 ; CHECK-NEXT: ldux 5, 3, 4
182 ; CHECK-NEXT: ld 4, 8(3)
183 ; CHECK-NEXT: mr 3, 5
186 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
187 %0 = load i128, ptr %add.ptr, align 16
191 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
192 define dso_local i128 @ld_or___int128___int128(i64 %ptr, i8 zeroext %off) {
193 ; CHECK-LABEL: ld_or___int128___int128:
194 ; CHECK: # %bb.0: # %entry
195 ; CHECK-NEXT: or 4, 4, 3
196 ; CHECK-NEXT: ld 3, 0(4)
197 ; CHECK-NEXT: ld 4, 8(4)
200 %conv = zext i8 %off to i64
201 %or = or i64 %conv, %ptr
202 %0 = inttoptr i64 %or to ptr
203 %1 = load i128, ptr %0, align 16
207 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
208 define dso_local i128 @ld_or2___int128___int128(i64 %ptr, i8 zeroext %off) {
209 ; CHECK-LABEL: ld_or2___int128___int128:
210 ; CHECK: # %bb.0: # %entry
211 ; CHECK-NEXT: rldicr 5, 3, 0, 51
212 ; CHECK-NEXT: rotldi 6, 3, 52
213 ; CHECK-NEXT: ldx 3, 5, 4
214 ; CHECK-NEXT: rldimi 4, 6, 12, 0
215 ; CHECK-NEXT: ld 4, 8(4)
218 %and = and i64 %ptr, -4096
219 %conv = zext i8 %off to i64
220 %or = or i64 %and, %conv
221 %0 = inttoptr i64 %or to ptr
222 %1 = load i128, ptr %0, align 16
226 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
227 define dso_local i128 @ld_not_disjoint16___int128___int128(i64 %ptr) {
228 ; CHECK-LABEL: ld_not_disjoint16___int128___int128:
229 ; CHECK: # %bb.0: # %entry
230 ; CHECK-NEXT: ori 4, 3, 6
231 ; CHECK-NEXT: ld 3, 0(4)
232 ; CHECK-NEXT: ld 4, 8(4)
236 %0 = inttoptr i64 %or to ptr
237 %1 = load i128, ptr %0, align 16
241 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
242 define dso_local i128 @ld_disjoint_unalign16___int128___int128(i64 %ptr) {
243 ; CHECK-P10-LABEL: ld_disjoint_unalign16___int128___int128:
244 ; CHECK-P10: # %bb.0: # %entry
245 ; CHECK-P10-NEXT: rldicr 4, 3, 0, 51
246 ; CHECK-P10-NEXT: pld 3, 6(4), 0
247 ; CHECK-P10-NEXT: pld 4, 14(4), 0
248 ; CHECK-P10-NEXT: blr
250 ; CHECK-PREP10-LABEL: ld_disjoint_unalign16___int128___int128:
251 ; CHECK-PREP10: # %bb.0: # %entry
252 ; CHECK-PREP10-NEXT: rldicr 4, 3, 0, 51
253 ; CHECK-PREP10-NEXT: li 3, 6
254 ; CHECK-PREP10-NEXT: li 5, 14
255 ; CHECK-PREP10-NEXT: ldx 3, 4, 3
256 ; CHECK-PREP10-NEXT: ldx 4, 4, 5
257 ; CHECK-PREP10-NEXT: blr
259 %and = and i64 %ptr, -4096
261 %0 = inttoptr i64 %or to ptr
262 %1 = load i128, ptr %0, align 16
266 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
267 define dso_local i128 @ld_disjoint_align16___int128___int128(i64 %ptr) {
268 ; CHECK-LABEL: ld_disjoint_align16___int128___int128:
269 ; CHECK: # %bb.0: # %entry
270 ; CHECK-NEXT: rldicr 4, 3, 0, 51
271 ; CHECK-NEXT: ld 3, 24(4)
272 ; CHECK-NEXT: ld 4, 32(4)
275 %and = and i64 %ptr, -4096
276 %or = or i64 %and, 24
277 %0 = inttoptr i64 %or to ptr
278 %1 = load i128, ptr %0, align 16
282 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
283 define dso_local i128 @ld_not_disjoint32___int128___int128(i64 %ptr) {
284 ; CHECK-LABEL: ld_not_disjoint32___int128___int128:
285 ; CHECK: # %bb.0: # %entry
286 ; CHECK-NEXT: ori 3, 3, 34463
287 ; CHECK-NEXT: oris 4, 3, 1
288 ; CHECK-NEXT: ld 3, 0(4)
289 ; CHECK-NEXT: ld 4, 8(4)
292 %or = or i64 %ptr, 99999
293 %0 = inttoptr i64 %or to ptr
294 %1 = load i128, ptr %0, align 16
298 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
299 define dso_local i128 @ld_disjoint_unalign32___int128___int128(i64 %ptr) {
300 ; CHECK-P10-LABEL: ld_disjoint_unalign32___int128___int128:
301 ; CHECK-P10: # %bb.0: # %entry
302 ; CHECK-P10-NEXT: rldicr 4, 3, 0, 43
303 ; CHECK-P10-NEXT: pld 3, 99999(4), 0
304 ; CHECK-P10-NEXT: pld 4, 100007(4), 0
305 ; CHECK-P10-NEXT: blr
307 ; CHECK-PREP10-LABEL: ld_disjoint_unalign32___int128___int128:
308 ; CHECK-PREP10: # %bb.0: # %entry
309 ; CHECK-PREP10-NEXT: lis 5, 1
310 ; CHECK-PREP10-NEXT: rldicr 4, 3, 0, 43
311 ; CHECK-PREP10-NEXT: ori 3, 5, 34463
312 ; CHECK-PREP10-NEXT: ori 5, 5, 34471
313 ; CHECK-PREP10-NEXT: ldx 3, 4, 3
314 ; CHECK-PREP10-NEXT: ldx 4, 4, 5
315 ; CHECK-PREP10-NEXT: blr
317 %and = and i64 %ptr, -1048576
318 %or = or i64 %and, 99999
319 %0 = inttoptr i64 %or to ptr
320 %1 = load i128, ptr %0, align 16
324 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
325 define dso_local i128 @ld_disjoint_align32___int128___int128(i64 %ptr) {
326 ; CHECK-P10-LABEL: ld_disjoint_align32___int128___int128:
327 ; CHECK-P10: # %bb.0: # %entry
328 ; CHECK-P10-NEXT: lis 4, -15264
329 ; CHECK-P10-NEXT: and 4, 3, 4
330 ; CHECK-P10-NEXT: pld 3, 999990000(4), 0
331 ; CHECK-P10-NEXT: pld 4, 999990008(4), 0
332 ; CHECK-P10-NEXT: blr
334 ; CHECK-PREP10-LABEL: ld_disjoint_align32___int128___int128:
335 ; CHECK-PREP10: # %bb.0: # %entry
336 ; CHECK-PREP10-NEXT: lis 4, -15264
337 ; CHECK-PREP10-NEXT: lis 5, 15258
338 ; CHECK-PREP10-NEXT: and 4, 3, 4
339 ; CHECK-PREP10-NEXT: ori 3, 5, 41712
340 ; CHECK-PREP10-NEXT: ori 5, 5, 41720
341 ; CHECK-PREP10-NEXT: ldx 3, 4, 3
342 ; CHECK-PREP10-NEXT: ldx 4, 4, 5
343 ; CHECK-PREP10-NEXT: blr
345 %and = and i64 %ptr, -1000341504
346 %or = or i64 %and, 999990000
347 %0 = inttoptr i64 %or to ptr
348 %1 = load i128, ptr %0, align 16
352 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
353 define dso_local i128 @ld_not_disjoint64___int128___int128(i64 %ptr) {
354 ; CHECK-P10-LABEL: ld_not_disjoint64___int128___int128:
355 ; CHECK-P10: # %bb.0: # %entry
356 ; CHECK-P10-NEXT: pli 4, 232
357 ; CHECK-P10-NEXT: pli 5, 3567587329
358 ; CHECK-P10-NEXT: rldimi 5, 4, 32, 0
359 ; CHECK-P10-NEXT: or 4, 3, 5
360 ; CHECK-P10-NEXT: ld 3, 0(4)
361 ; CHECK-P10-NEXT: ld 4, 8(4)
362 ; CHECK-P10-NEXT: blr
364 ; CHECK-PREP10-LABEL: ld_not_disjoint64___int128___int128:
365 ; CHECK-PREP10: # %bb.0: # %entry
366 ; CHECK-PREP10-NEXT: li 4, 29
367 ; CHECK-PREP10-NEXT: rldic 4, 4, 35, 24
368 ; CHECK-PREP10-NEXT: oris 4, 4, 54437
369 ; CHECK-PREP10-NEXT: ori 4, 4, 4097
370 ; CHECK-PREP10-NEXT: or 4, 3, 4
371 ; CHECK-PREP10-NEXT: ld 3, 0(4)
372 ; CHECK-PREP10-NEXT: ld 4, 8(4)
373 ; CHECK-PREP10-NEXT: blr
375 %or = or i64 %ptr, 1000000000001
376 %0 = inttoptr i64 %or to ptr
377 %1 = load i128, ptr %0, align 16
381 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
382 define dso_local i128 @ld_disjoint_unalign64___int128___int128(i64 %ptr) {
383 ; CHECK-P10-LABEL: ld_disjoint_unalign64___int128___int128:
384 ; CHECK-P10: # %bb.0: # %entry
385 ; CHECK-P10-NEXT: rldicr 4, 3, 0, 23
386 ; CHECK-P10-NEXT: pli 5, 232
387 ; CHECK-P10-NEXT: pli 3, 3567587329
388 ; CHECK-P10-NEXT: rldimi 3, 5, 32, 0
389 ; CHECK-P10-NEXT: pli 6, 3567587337
390 ; CHECK-P10-NEXT: rldimi 6, 5, 32, 0
391 ; CHECK-P10-NEXT: ldx 3, 4, 3
392 ; CHECK-P10-NEXT: ldx 4, 4, 6
393 ; CHECK-P10-NEXT: blr
395 ; CHECK-PREP10-LABEL: ld_disjoint_unalign64___int128___int128:
396 ; CHECK-PREP10: # %bb.0: # %entry
397 ; CHECK-PREP10-NEXT: rldicr 4, 3, 0, 23
398 ; CHECK-PREP10-NEXT: li 3, 29
399 ; CHECK-PREP10-NEXT: rldic 3, 3, 35, 24
400 ; CHECK-PREP10-NEXT: oris 5, 3, 54437
401 ; CHECK-PREP10-NEXT: ori 3, 5, 4097
402 ; CHECK-PREP10-NEXT: ori 5, 5, 4105
403 ; CHECK-PREP10-NEXT: ldx 3, 4, 3
404 ; CHECK-PREP10-NEXT: ldx 4, 4, 5
405 ; CHECK-PREP10-NEXT: blr
407 %and = and i64 %ptr, -1099511627776
408 %or = or i64 %and, 1000000000001
409 %0 = inttoptr i64 %or to ptr
410 %1 = load i128, ptr %0, align 16
414 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
415 define dso_local i128 @ld_disjoint_align64___int128___int128(i64 %ptr) {
416 ; CHECK-P10-LABEL: ld_disjoint_align64___int128___int128:
417 ; CHECK-P10: # %bb.0: # %entry
418 ; CHECK-P10-NEXT: rldicr 4, 3, 0, 23
419 ; CHECK-P10-NEXT: pli 3, 244140625
420 ; CHECK-P10-NEXT: pli 5, 232
421 ; CHECK-P10-NEXT: rldic 3, 3, 12, 24
422 ; CHECK-P10-NEXT: pli 6, 3567587336
423 ; CHECK-P10-NEXT: rldimi 6, 5, 32, 0
424 ; CHECK-P10-NEXT: ldx 3, 4, 3
425 ; CHECK-P10-NEXT: ldx 4, 4, 6
426 ; CHECK-P10-NEXT: blr
428 ; CHECK-PREP10-LABEL: ld_disjoint_align64___int128___int128:
429 ; CHECK-PREP10: # %bb.0: # %entry
430 ; CHECK-PREP10-NEXT: li 5, 29
431 ; CHECK-PREP10-NEXT: rldicr 4, 3, 0, 23
432 ; CHECK-PREP10-NEXT: lis 3, 3725
433 ; CHECK-PREP10-NEXT: rldic 5, 5, 35, 24
434 ; CHECK-PREP10-NEXT: ori 3, 3, 19025
435 ; CHECK-PREP10-NEXT: oris 5, 5, 54437
436 ; CHECK-PREP10-NEXT: rldic 3, 3, 12, 24
437 ; CHECK-PREP10-NEXT: ori 5, 5, 4104
438 ; CHECK-PREP10-NEXT: ldx 3, 4, 3
439 ; CHECK-PREP10-NEXT: ldx 4, 4, 5
440 ; CHECK-PREP10-NEXT: blr
442 %and = and i64 %ptr, -1099511627776
443 %or = or i64 %and, 1000000000000
444 %0 = inttoptr i64 %or to ptr
445 %1 = load i128, ptr %0, align 4096
449 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
450 define dso_local i128 @ld_cst_unalign16___int128___int128() {
451 ; CHECK-LABEL: ld_cst_unalign16___int128___int128:
452 ; CHECK: # %bb.0: # %entry
453 ; CHECK-NEXT: li 3, 255
454 ; CHECK-NEXT: li 4, 263
455 ; CHECK-NEXT: ld 3, 0(3)
456 ; CHECK-NEXT: ld 4, 0(4)
459 %0 = load i128, ptr inttoptr (i64 255 to ptr), align 16
463 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
464 define dso_local i128 @ld_cst_align16___int128___int128() {
465 ; CHECK-LABEL: ld_cst_align16___int128___int128:
466 ; CHECK: # %bb.0: # %entry
467 ; CHECK-NEXT: ld 3, 4080(0)
468 ; CHECK-NEXT: ld 4, 4088(0)
471 %0 = load i128, ptr inttoptr (i64 4080 to ptr), align 16
475 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
476 define dso_local i128 @ld_cst_unalign32___int128___int128() {
477 ; CHECK-P10-LABEL: ld_cst_unalign32___int128___int128:
478 ; CHECK-P10: # %bb.0: # %entry
479 ; CHECK-P10-NEXT: pli 3, 99999
480 ; CHECK-P10-NEXT: pli 4, 100007
481 ; CHECK-P10-NEXT: ld 3, 0(3)
482 ; CHECK-P10-NEXT: ld 4, 0(4)
483 ; CHECK-P10-NEXT: blr
485 ; CHECK-PREP10-LABEL: ld_cst_unalign32___int128___int128:
486 ; CHECK-PREP10: # %bb.0: # %entry
487 ; CHECK-PREP10-NEXT: lis 4, 1
488 ; CHECK-PREP10-NEXT: ori 3, 4, 34463
489 ; CHECK-PREP10-NEXT: ori 4, 4, 34471
490 ; CHECK-PREP10-NEXT: ld 3, 0(3)
491 ; CHECK-PREP10-NEXT: ld 4, 0(4)
492 ; CHECK-PREP10-NEXT: blr
494 %0 = load i128, ptr inttoptr (i64 99999 to ptr), align 16
498 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
499 define dso_local i128 @ld_cst_align32___int128___int128() {
500 ; CHECK-LABEL: ld_cst_align32___int128___int128:
501 ; CHECK: # %bb.0: # %entry
502 ; CHECK-NEXT: lis 4, 153
503 ; CHECK-NEXT: ld 3, -27108(4)
504 ; CHECK-NEXT: ld 4, -27100(4)
507 %0 = load i128, ptr inttoptr (i64 9999900 to ptr), align 16
511 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
512 define dso_local i128 @ld_cst_unalign64___int128___int128() {
513 ; CHECK-P10-LABEL: ld_cst_unalign64___int128___int128:
514 ; CHECK-P10: # %bb.0: # %entry
515 ; CHECK-P10-NEXT: pli 4, 232
516 ; CHECK-P10-NEXT: pli 3, 3567587329
517 ; CHECK-P10-NEXT: rldimi 3, 4, 32, 0
518 ; CHECK-P10-NEXT: pli 5, 3567587337
519 ; CHECK-P10-NEXT: rldimi 5, 4, 32, 0
520 ; CHECK-P10-NEXT: ld 3, 0(3)
521 ; CHECK-P10-NEXT: ld 4, 0(5)
522 ; CHECK-P10-NEXT: blr
524 ; CHECK-PREP10-LABEL: ld_cst_unalign64___int128___int128:
525 ; CHECK-PREP10: # %bb.0: # %entry
526 ; CHECK-PREP10-NEXT: li 3, 29
527 ; CHECK-PREP10-NEXT: rldic 3, 3, 35, 24
528 ; CHECK-PREP10-NEXT: oris 4, 3, 54437
529 ; CHECK-PREP10-NEXT: ori 3, 4, 4097
530 ; CHECK-PREP10-NEXT: ori 4, 4, 4105
531 ; CHECK-PREP10-NEXT: ld 3, 0(3)
532 ; CHECK-PREP10-NEXT: ld 4, 0(4)
533 ; CHECK-PREP10-NEXT: blr
535 %0 = load i128, ptr inttoptr (i64 1000000000001 to ptr), align 16
539 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
540 define dso_local i128 @ld_cst_align64___int128___int128() {
541 ; CHECK-P10-LABEL: ld_cst_align64___int128___int128:
542 ; CHECK-P10: # %bb.0: # %entry
543 ; CHECK-P10-NEXT: pli 3, 232
544 ; CHECK-P10-NEXT: pli 4, 3567587336
545 ; CHECK-P10-NEXT: rldimi 4, 3, 32, 0
546 ; CHECK-P10-NEXT: pli 3, 244140625
547 ; CHECK-P10-NEXT: rldic 3, 3, 12, 24
548 ; CHECK-P10-NEXT: ld 4, 0(4)
549 ; CHECK-P10-NEXT: ld 3, 0(3)
550 ; CHECK-P10-NEXT: blr
552 ; CHECK-PREP10-LABEL: ld_cst_align64___int128___int128:
553 ; CHECK-PREP10: # %bb.0: # %entry
554 ; CHECK-PREP10-NEXT: li 4, 29
555 ; CHECK-PREP10-NEXT: lis 3, 3725
556 ; CHECK-PREP10-NEXT: rldic 4, 4, 35, 24
557 ; CHECK-PREP10-NEXT: ori 3, 3, 19025
558 ; CHECK-PREP10-NEXT: oris 4, 4, 54437
559 ; CHECK-PREP10-NEXT: rldic 3, 3, 12, 24
560 ; CHECK-PREP10-NEXT: ori 4, 4, 4104
561 ; CHECK-PREP10-NEXT: ld 3, 0(3)
562 ; CHECK-PREP10-NEXT: ld 4, 0(4)
563 ; CHECK-PREP10-NEXT: blr
565 %0 = load i128, ptr inttoptr (i64 1000000000000 to ptr), align 4096
569 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
570 define dso_local void @st_0__int128___int128(i64 %ptr, i128 %str) {
571 ; CHECK-LABEL: st_0__int128___int128:
572 ; CHECK: # %bb.0: # %entry
573 ; CHECK-NEXT: std 5, 8(3)
574 ; CHECK-NEXT: std 4, 0(3)
577 %0 = inttoptr i64 %ptr to ptr
578 store i128 %str, ptr %0, align 16
582 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
583 define dso_local void @st_unalign16__int128___int128(ptr nocapture %ptr, i128 %str) {
584 ; CHECK-P10-LABEL: st_unalign16__int128___int128:
585 ; CHECK-P10: # %bb.0: # %entry
586 ; CHECK-P10-NEXT: pstd 5, 9(3), 0
587 ; CHECK-P10-NEXT: pstd 4, 1(3), 0
588 ; CHECK-P10-NEXT: blr
590 ; CHECK-PREP10-LABEL: st_unalign16__int128___int128:
591 ; CHECK-PREP10: # %bb.0: # %entry
592 ; CHECK-PREP10-NEXT: li 6, 9
593 ; CHECK-PREP10-NEXT: stdx 5, 3, 6
594 ; CHECK-PREP10-NEXT: li 5, 1
595 ; CHECK-PREP10-NEXT: stdx 4, 3, 5
596 ; CHECK-PREP10-NEXT: blr
598 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1
599 store i128 %str, ptr %add.ptr, align 16
603 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
604 define dso_local void @st_align16__int128___int128(ptr nocapture %ptr, i128 %str) {
605 ; CHECK-LABEL: st_align16__int128___int128:
606 ; CHECK: # %bb.0: # %entry
607 ; CHECK-NEXT: std 5, 16(3)
608 ; CHECK-NEXT: std 4, 8(3)
611 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
612 store i128 %str, ptr %add.ptr, align 16
616 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
617 define dso_local void @st_unalign32__int128___int128(ptr nocapture %ptr, i128 %str) {
618 ; CHECK-P10-LABEL: st_unalign32__int128___int128:
619 ; CHECK-P10: # %bb.0: # %entry
620 ; CHECK-P10-NEXT: pli 6, 99999
621 ; CHECK-P10-NEXT: stdux 4, 3, 6
622 ; CHECK-P10-NEXT: std 5, 8(3)
623 ; CHECK-P10-NEXT: blr
625 ; CHECK-PREP10-LABEL: st_unalign32__int128___int128:
626 ; CHECK-PREP10: # %bb.0: # %entry
627 ; CHECK-PREP10-NEXT: lis 6, 1
628 ; CHECK-PREP10-NEXT: ori 6, 6, 34463
629 ; CHECK-PREP10-NEXT: stdux 4, 3, 6
630 ; CHECK-PREP10-NEXT: std 5, 8(3)
631 ; CHECK-PREP10-NEXT: blr
633 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999
634 store i128 %str, ptr %add.ptr, align 16
638 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
639 define dso_local void @st_align32__int128___int128(ptr nocapture %ptr, i128 %str) {
640 ; CHECK-P10-LABEL: st_align32__int128___int128:
641 ; CHECK-P10: # %bb.0: # %entry
642 ; CHECK-P10-NEXT: pli 6, 99999000
643 ; CHECK-P10-NEXT: stdux 4, 3, 6
644 ; CHECK-P10-NEXT: std 5, 8(3)
645 ; CHECK-P10-NEXT: blr
647 ; CHECK-PREP10-LABEL: st_align32__int128___int128:
648 ; CHECK-PREP10: # %bb.0: # %entry
649 ; CHECK-PREP10-NEXT: lis 6, 1525
650 ; CHECK-PREP10-NEXT: ori 6, 6, 56600
651 ; CHECK-PREP10-NEXT: stdux 4, 3, 6
652 ; CHECK-PREP10-NEXT: std 5, 8(3)
653 ; CHECK-PREP10-NEXT: blr
655 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
656 store i128 %str, ptr %add.ptr, align 16
660 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
661 define dso_local void @st_unalign64__int128___int128(ptr nocapture %ptr, i128 %str) {
662 ; CHECK-P10-LABEL: st_unalign64__int128___int128:
663 ; CHECK-P10: # %bb.0: # %entry
664 ; CHECK-P10-NEXT: pli 6, 232
665 ; CHECK-P10-NEXT: pli 7, 3567587329
666 ; CHECK-P10-NEXT: rldimi 7, 6, 32, 0
667 ; CHECK-P10-NEXT: stdux 4, 3, 7
668 ; CHECK-P10-NEXT: std 5, 8(3)
669 ; CHECK-P10-NEXT: blr
671 ; CHECK-PREP10-LABEL: st_unalign64__int128___int128:
672 ; CHECK-PREP10: # %bb.0: # %entry
673 ; CHECK-PREP10-NEXT: li 6, 29
674 ; CHECK-PREP10-NEXT: rldic 6, 6, 35, 24
675 ; CHECK-PREP10-NEXT: oris 6, 6, 54437
676 ; CHECK-PREP10-NEXT: ori 6, 6, 4097
677 ; CHECK-PREP10-NEXT: stdux 4, 3, 6
678 ; CHECK-PREP10-NEXT: std 5, 8(3)
679 ; CHECK-PREP10-NEXT: blr
681 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001
682 store i128 %str, ptr %add.ptr, align 16
686 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
687 define dso_local void @st_align64__int128___int128(ptr nocapture %ptr, i128 %str) {
688 ; CHECK-P10-LABEL: st_align64__int128___int128:
689 ; CHECK-P10: # %bb.0: # %entry
690 ; CHECK-P10-NEXT: pli 6, 244140625
691 ; CHECK-P10-NEXT: rldic 6, 6, 12, 24
692 ; CHECK-P10-NEXT: stdux 4, 3, 6
693 ; CHECK-P10-NEXT: std 5, 8(3)
694 ; CHECK-P10-NEXT: blr
696 ; CHECK-PREP10-LABEL: st_align64__int128___int128:
697 ; CHECK-PREP10: # %bb.0: # %entry
698 ; CHECK-PREP10-NEXT: lis 6, 3725
699 ; CHECK-PREP10-NEXT: ori 6, 6, 19025
700 ; CHECK-PREP10-NEXT: rldic 6, 6, 12, 24
701 ; CHECK-PREP10-NEXT: stdux 4, 3, 6
702 ; CHECK-PREP10-NEXT: std 5, 8(3)
703 ; CHECK-PREP10-NEXT: blr
705 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
706 store i128 %str, ptr %add.ptr, align 16
710 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
711 define dso_local void @st_reg__int128___int128(ptr nocapture %ptr, i64 %off, i128 %str) {
712 ; CHECK-LABEL: st_reg__int128___int128:
713 ; CHECK: # %bb.0: # %entry
714 ; CHECK-NEXT: stdux 5, 3, 4
715 ; CHECK-NEXT: std 6, 8(3)
718 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
719 store i128 %str, ptr %add.ptr, align 16
723 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
724 define dso_local void @st_or1__int128___int128(i64 %ptr, i8 zeroext %off, i128 %str) {
725 ; CHECK-LABEL: st_or1__int128___int128:
726 ; CHECK: # %bb.0: # %entry
727 ; CHECK-NEXT: or 3, 4, 3
728 ; CHECK-NEXT: std 6, 8(3)
729 ; CHECK-NEXT: std 5, 0(3)
732 %conv = zext i8 %off to i64
733 %or = or i64 %conv, %ptr
734 %0 = inttoptr i64 %or to ptr
735 store i128 %str, ptr %0, align 16
739 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
740 define dso_local void @st_or2__int128___int128(i64 %ptr, i8 zeroext %off, i128 %str) {
741 ; CHECK-LABEL: st_or2__int128___int128:
742 ; CHECK: # %bb.0: # %entry
743 ; CHECK-NEXT: rldicr 7, 3, 0, 51
744 ; CHECK-NEXT: rotldi 3, 3, 52
745 ; CHECK-NEXT: stdx 5, 7, 4
746 ; CHECK-NEXT: rldimi 4, 3, 12, 0
747 ; CHECK-NEXT: std 6, 8(4)
750 %and = and i64 %ptr, -4096
751 %conv = zext i8 %off to i64
752 %or = or i64 %and, %conv
753 %0 = inttoptr i64 %or to ptr
754 store i128 %str, ptr %0, align 16
758 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
759 define dso_local void @st_not_disjoint16__int128___int128(i64 %ptr, i128 %str) {
760 ; CHECK-LABEL: st_not_disjoint16__int128___int128:
761 ; CHECK: # %bb.0: # %entry
762 ; CHECK-NEXT: ori 3, 3, 6
763 ; CHECK-NEXT: std 5, 8(3)
764 ; CHECK-NEXT: std 4, 0(3)
768 %0 = inttoptr i64 %or to ptr
769 store i128 %str, ptr %0, align 16
773 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
774 define dso_local void @st_disjoint_unalign16__int128___int128(i64 %ptr, i128 %str) {
775 ; CHECK-P10-LABEL: st_disjoint_unalign16__int128___int128:
776 ; CHECK-P10: # %bb.0: # %entry
777 ; CHECK-P10-NEXT: rldicr 3, 3, 0, 51
778 ; CHECK-P10-NEXT: pstd 5, 14(3), 0
779 ; CHECK-P10-NEXT: pstd 4, 6(3), 0
780 ; CHECK-P10-NEXT: blr
782 ; CHECK-PREP10-LABEL: st_disjoint_unalign16__int128___int128:
783 ; CHECK-PREP10: # %bb.0: # %entry
784 ; CHECK-PREP10-NEXT: rldicr 3, 3, 0, 51
785 ; CHECK-PREP10-NEXT: li 6, 14
786 ; CHECK-PREP10-NEXT: stdx 5, 3, 6
787 ; CHECK-PREP10-NEXT: li 5, 6
788 ; CHECK-PREP10-NEXT: stdx 4, 3, 5
789 ; CHECK-PREP10-NEXT: blr
791 %and = and i64 %ptr, -4096
793 %0 = inttoptr i64 %or to ptr
794 store i128 %str, ptr %0, align 16
798 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
799 define dso_local void @st_disjoint_align16__int128___int128(i64 %ptr, i128 %str) {
800 ; CHECK-LABEL: st_disjoint_align16__int128___int128:
801 ; CHECK: # %bb.0: # %entry
802 ; CHECK-NEXT: rldicr 3, 3, 0, 51
803 ; CHECK-NEXT: std 5, 32(3)
804 ; CHECK-NEXT: std 4, 24(3)
807 %and = and i64 %ptr, -4096
808 %or = or i64 %and, 24
809 %0 = inttoptr i64 %or to ptr
810 store i128 %str, ptr %0, align 16
814 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
815 define dso_local void @st_not_disjoint32__int128___int128(i64 %ptr, i128 %str) {
816 ; CHECK-LABEL: st_not_disjoint32__int128___int128:
817 ; CHECK: # %bb.0: # %entry
818 ; CHECK-NEXT: ori 3, 3, 34463
819 ; CHECK-NEXT: oris 3, 3, 1
820 ; CHECK-NEXT: std 5, 8(3)
821 ; CHECK-NEXT: std 4, 0(3)
824 %or = or i64 %ptr, 99999
825 %0 = inttoptr i64 %or to ptr
826 store i128 %str, ptr %0, align 16
830 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
831 define dso_local void @st_disjoint_unalign32__int128___int128(i64 %ptr, i128 %str) {
832 ; CHECK-P10-LABEL: st_disjoint_unalign32__int128___int128:
833 ; CHECK-P10: # %bb.0: # %entry
834 ; CHECK-P10-NEXT: rldicr 3, 3, 0, 43
835 ; CHECK-P10-NEXT: pstd 5, 100007(3), 0
836 ; CHECK-P10-NEXT: pstd 4, 99999(3), 0
837 ; CHECK-P10-NEXT: blr
839 ; CHECK-PREP10-LABEL: st_disjoint_unalign32__int128___int128:
840 ; CHECK-PREP10: # %bb.0: # %entry
841 ; CHECK-PREP10-NEXT: lis 6, 1
842 ; CHECK-PREP10-NEXT: rldicr 3, 3, 0, 43
843 ; CHECK-PREP10-NEXT: ori 7, 6, 34471
844 ; CHECK-PREP10-NEXT: stdx 5, 3, 7
845 ; CHECK-PREP10-NEXT: ori 5, 6, 34463
846 ; CHECK-PREP10-NEXT: stdx 4, 3, 5
847 ; CHECK-PREP10-NEXT: blr
849 %and = and i64 %ptr, -1048576
850 %or = or i64 %and, 99999
851 %0 = inttoptr i64 %or to ptr
852 store i128 %str, ptr %0, align 16
856 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
857 define dso_local void @st_disjoint_align32__int128___int128(i64 %ptr, i128 %str) {
858 ; CHECK-P10-LABEL: st_disjoint_align32__int128___int128:
859 ; CHECK-P10: # %bb.0: # %entry
860 ; CHECK-P10-NEXT: lis 6, -15264
861 ; CHECK-P10-NEXT: and 3, 3, 6
862 ; CHECK-P10-NEXT: pstd 5, 999990008(3), 0
863 ; CHECK-P10-NEXT: pstd 4, 999990000(3), 0
864 ; CHECK-P10-NEXT: blr
866 ; CHECK-PREP10-LABEL: st_disjoint_align32__int128___int128:
867 ; CHECK-PREP10: # %bb.0: # %entry
868 ; CHECK-PREP10-NEXT: lis 6, -15264
869 ; CHECK-PREP10-NEXT: and 3, 3, 6
870 ; CHECK-PREP10-NEXT: lis 6, 15258
871 ; CHECK-PREP10-NEXT: ori 7, 6, 41720
872 ; CHECK-PREP10-NEXT: stdx 5, 3, 7
873 ; CHECK-PREP10-NEXT: ori 5, 6, 41712
874 ; CHECK-PREP10-NEXT: stdx 4, 3, 5
875 ; CHECK-PREP10-NEXT: blr
877 %and = and i64 %ptr, -1000341504
878 %or = or i64 %and, 999990000
879 %0 = inttoptr i64 %or to ptr
880 store i128 %str, ptr %0, align 16
884 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
885 define dso_local void @st_not_disjoint64__int128___int128(i64 %ptr, i128 %str) {
886 ; CHECK-P10-LABEL: st_not_disjoint64__int128___int128:
887 ; CHECK-P10: # %bb.0: # %entry
888 ; CHECK-P10-NEXT: pli 6, 232
889 ; CHECK-P10-NEXT: pli 7, 3567587329
890 ; CHECK-P10-NEXT: rldimi 7, 6, 32, 0
891 ; CHECK-P10-NEXT: or 3, 3, 7
892 ; CHECK-P10-NEXT: std 5, 8(3)
893 ; CHECK-P10-NEXT: std 4, 0(3)
894 ; CHECK-P10-NEXT: blr
896 ; CHECK-PREP10-LABEL: st_not_disjoint64__int128___int128:
897 ; CHECK-PREP10: # %bb.0: # %entry
898 ; CHECK-PREP10-NEXT: li 6, 29
899 ; CHECK-PREP10-NEXT: rldic 6, 6, 35, 24
900 ; CHECK-PREP10-NEXT: oris 6, 6, 54437
901 ; CHECK-PREP10-NEXT: ori 6, 6, 4097
902 ; CHECK-PREP10-NEXT: or 3, 3, 6
903 ; CHECK-PREP10-NEXT: std 5, 8(3)
904 ; CHECK-PREP10-NEXT: std 4, 0(3)
905 ; CHECK-PREP10-NEXT: blr
907 %or = or i64 %ptr, 1000000000001
908 %0 = inttoptr i64 %or to ptr
909 store i128 %str, ptr %0, align 16
913 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
914 define dso_local void @st_disjoint_unalign64__int128___int128(i64 %ptr, i128 %str) {
915 ; CHECK-P10-LABEL: st_disjoint_unalign64__int128___int128:
916 ; CHECK-P10: # %bb.0: # %entry
917 ; CHECK-P10-NEXT: pli 6, 232
918 ; CHECK-P10-NEXT: pli 7, 3567587337
919 ; CHECK-P10-NEXT: rldicr 3, 3, 0, 23
920 ; CHECK-P10-NEXT: rldimi 7, 6, 32, 0
921 ; CHECK-P10-NEXT: stdx 5, 3, 7
922 ; CHECK-P10-NEXT: pli 5, 3567587329
923 ; CHECK-P10-NEXT: rldimi 5, 6, 32, 0
924 ; CHECK-P10-NEXT: stdx 4, 3, 5
925 ; CHECK-P10-NEXT: blr
927 ; CHECK-PREP10-LABEL: st_disjoint_unalign64__int128___int128:
928 ; CHECK-PREP10: # %bb.0: # %entry
929 ; CHECK-PREP10-NEXT: li 6, 29
930 ; CHECK-PREP10-NEXT: rldicr 3, 3, 0, 23
931 ; CHECK-PREP10-NEXT: rldic 6, 6, 35, 24
932 ; CHECK-PREP10-NEXT: oris 6, 6, 54437
933 ; CHECK-PREP10-NEXT: ori 7, 6, 4105
934 ; CHECK-PREP10-NEXT: stdx 5, 3, 7
935 ; CHECK-PREP10-NEXT: ori 5, 6, 4097
936 ; CHECK-PREP10-NEXT: stdx 4, 3, 5
937 ; CHECK-PREP10-NEXT: blr
939 %and = and i64 %ptr, -1099511627776
940 %or = or i64 %and, 1000000000001
941 %0 = inttoptr i64 %or to ptr
942 store i128 %str, ptr %0, align 16
946 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
947 define dso_local void @st_disjoint_align64__int128___int128(i64 %ptr, i128 %str) {
948 ; CHECK-P10-LABEL: st_disjoint_align64__int128___int128:
949 ; CHECK-P10: # %bb.0: # %entry
950 ; CHECK-P10-NEXT: pli 6, 232
951 ; CHECK-P10-NEXT: pli 7, 3567587336
952 ; CHECK-P10-NEXT: rldicr 3, 3, 0, 23
953 ; CHECK-P10-NEXT: rldimi 7, 6, 32, 0
954 ; CHECK-P10-NEXT: stdx 5, 3, 7
955 ; CHECK-P10-NEXT: pli 5, 244140625
956 ; CHECK-P10-NEXT: rldic 5, 5, 12, 24
957 ; CHECK-P10-NEXT: stdx 4, 3, 5
958 ; CHECK-P10-NEXT: blr
960 ; CHECK-PREP10-LABEL: st_disjoint_align64__int128___int128:
961 ; CHECK-PREP10: # %bb.0: # %entry
962 ; CHECK-PREP10-NEXT: lis 6, 3725
963 ; CHECK-PREP10-NEXT: rldicr 3, 3, 0, 23
964 ; CHECK-PREP10-NEXT: ori 6, 6, 19025
965 ; CHECK-PREP10-NEXT: rldic 6, 6, 12, 24
966 ; CHECK-PREP10-NEXT: stdx 4, 3, 6
967 ; CHECK-PREP10-NEXT: li 4, 29
968 ; CHECK-PREP10-NEXT: rldic 4, 4, 35, 24
969 ; CHECK-PREP10-NEXT: oris 4, 4, 54437
970 ; CHECK-PREP10-NEXT: ori 4, 4, 4104
971 ; CHECK-PREP10-NEXT: stdx 5, 3, 4
972 ; CHECK-PREP10-NEXT: blr
974 %and = and i64 %ptr, -1099511627776
975 %or = or i64 %and, 1000000000000
976 %0 = inttoptr i64 %or to ptr
977 store i128 %str, ptr %0, align 4096
981 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
982 define dso_local void @st_cst_unalign16__int128___int128(i128 %str) {
983 ; CHECK-LABEL: st_cst_unalign16__int128___int128:
984 ; CHECK: # %bb.0: # %entry
985 ; CHECK-NEXT: li 5, 263
986 ; CHECK-NEXT: std 4, 0(5)
987 ; CHECK-NEXT: li 4, 255
988 ; CHECK-NEXT: std 3, 0(4)
991 store i128 %str, ptr inttoptr (i64 255 to ptr), align 16
995 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
996 define dso_local void @st_cst_align16__int128___int128(i128 %str) {
997 ; CHECK-LABEL: st_cst_align16__int128___int128:
998 ; CHECK: # %bb.0: # %entry
999 ; CHECK-NEXT: std 4, 4088(0)
1000 ; CHECK-NEXT: std 3, 4080(0)
1003 store i128 %str, ptr inttoptr (i64 4080 to ptr), align 16
1007 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1008 define dso_local void @st_cst_unalign32__int128___int128(i128 %str) {
1009 ; CHECK-P10-LABEL: st_cst_unalign32__int128___int128:
1010 ; CHECK-P10: # %bb.0: # %entry
1011 ; CHECK-P10-NEXT: pli 5, 100007
1012 ; CHECK-P10-NEXT: std 4, 0(5)
1013 ; CHECK-P10-NEXT: pli 4, 99999
1014 ; CHECK-P10-NEXT: std 3, 0(4)
1015 ; CHECK-P10-NEXT: blr
1017 ; CHECK-PREP10-LABEL: st_cst_unalign32__int128___int128:
1018 ; CHECK-PREP10: # %bb.0: # %entry
1019 ; CHECK-PREP10-NEXT: lis 5, 1
1020 ; CHECK-PREP10-NEXT: ori 6, 5, 34471
1021 ; CHECK-PREP10-NEXT: std 4, 0(6)
1022 ; CHECK-PREP10-NEXT: ori 4, 5, 34463
1023 ; CHECK-PREP10-NEXT: std 3, 0(4)
1024 ; CHECK-PREP10-NEXT: blr
1026 store i128 %str, ptr inttoptr (i64 99999 to ptr), align 16
1030 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1031 define dso_local void @st_cst_align32__int128___int128(i128 %str) {
1032 ; CHECK-LABEL: st_cst_align32__int128___int128:
1033 ; CHECK: # %bb.0: # %entry
1034 ; CHECK-NEXT: lis 5, 153
1035 ; CHECK-NEXT: std 4, -27100(5)
1036 ; CHECK-NEXT: std 3, -27108(5)
1039 store i128 %str, ptr inttoptr (i64 9999900 to ptr), align 16
1043 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1044 define dso_local void @st_cst_unalign64__int128___int128(i128 %str) {
1045 ; CHECK-P10-LABEL: st_cst_unalign64__int128___int128:
1046 ; CHECK-P10: # %bb.0: # %entry
1047 ; CHECK-P10-NEXT: pli 5, 232
1048 ; CHECK-P10-NEXT: pli 6, 3567587337
1049 ; CHECK-P10-NEXT: rldimi 6, 5, 32, 0
1050 ; CHECK-P10-NEXT: std 4, 0(6)
1051 ; CHECK-P10-NEXT: pli 4, 3567587329
1052 ; CHECK-P10-NEXT: rldimi 4, 5, 32, 0
1053 ; CHECK-P10-NEXT: std 3, 0(4)
1054 ; CHECK-P10-NEXT: blr
1056 ; CHECK-PREP10-LABEL: st_cst_unalign64__int128___int128:
1057 ; CHECK-PREP10: # %bb.0: # %entry
1058 ; CHECK-PREP10-NEXT: li 5, 29
1059 ; CHECK-PREP10-NEXT: rldic 5, 5, 35, 24
1060 ; CHECK-PREP10-NEXT: oris 5, 5, 54437
1061 ; CHECK-PREP10-NEXT: ori 6, 5, 4105
1062 ; CHECK-PREP10-NEXT: std 4, 0(6)
1063 ; CHECK-PREP10-NEXT: ori 4, 5, 4097
1064 ; CHECK-PREP10-NEXT: std 3, 0(4)
1065 ; CHECK-PREP10-NEXT: blr
1067 store i128 %str, ptr inttoptr (i64 1000000000001 to ptr), align 16
1071 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
1072 define dso_local void @st_cst_align64__int128___int128(i128 %str) {
1073 ; CHECK-P10-LABEL: st_cst_align64__int128___int128:
1074 ; CHECK-P10: # %bb.0: # %entry
1075 ; CHECK-P10-NEXT: pli 5, 232
1076 ; CHECK-P10-NEXT: pli 6, 3567587336
1077 ; CHECK-P10-NEXT: rldimi 6, 5, 32, 0
1078 ; CHECK-P10-NEXT: std 4, 0(6)
1079 ; CHECK-P10-NEXT: pli 4, 244140625
1080 ; CHECK-P10-NEXT: rldic 4, 4, 12, 24
1081 ; CHECK-P10-NEXT: std 3, 0(4)
1082 ; CHECK-P10-NEXT: blr
1084 ; CHECK-PREP10-LABEL: st_cst_align64__int128___int128:
1085 ; CHECK-PREP10: # %bb.0: # %entry
1086 ; CHECK-PREP10-NEXT: lis 5, 3725
1087 ; CHECK-PREP10-NEXT: ori 5, 5, 19025
1088 ; CHECK-PREP10-NEXT: rldic 5, 5, 12, 24
1089 ; CHECK-PREP10-NEXT: std 3, 0(5)
1090 ; CHECK-PREP10-NEXT: li 3, 29
1091 ; CHECK-PREP10-NEXT: rldic 3, 3, 35, 24
1092 ; CHECK-PREP10-NEXT: oris 3, 3, 54437
1093 ; CHECK-PREP10-NEXT: ori 3, 3, 4104
1094 ; CHECK-PREP10-NEXT: std 4, 0(3)
1095 ; CHECK-PREP10-NEXT: blr
1097 store i128 %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096