[Instrumentation] Fix a warning
[llvm-project.git] / llvm / test / CodeGen / PowerPC / int128_ldst.ll
blob7f5f6a181c1b01c1f862433f8b5177f2680e0368
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  \
4 ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10
5 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
6 ; RUN:   -mcpu=pwr10  \
7 ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10
8 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
9 ; RUN:   -mcpu=pwr9  \
10 ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10
11 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
12 ; RUN:   -mcpu=pwr9  \
13 ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10
14 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
15 ; RUN:   -mcpu=pwr8  \
16 ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10
17 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
18 ; RUN:   -mcpu=pwr8  \
19 ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10
20 ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff \
21 ; RUN:   -mcpu=pwr8  \
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)
30 ; CHECK-NEXT:    mr 3, 5
31 ; CHECK-NEXT:    blr
32 entry:
33   %0 = inttoptr i64 %ptr to ptr
34   %1 = load i128, ptr %0, align 16
35   ret i128 %1
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
45 ; CHECK-P10-NEXT:    blr
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
55 entry:
56   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1
57   %0 = load i128, ptr %add.ptr, align 16
58   ret i128 %0
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)
67 ; CHECK-NEXT:    mr 3, 5
68 ; CHECK-NEXT:    blr
69 entry:
70   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
71   %0 = load i128, ptr %add.ptr, align 16
72   ret i128 %0
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
83 ; CHECK-P10-NEXT:    blr
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
93 entry:
94   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999
95   %0 = load i128, ptr %add.ptr, align 16
96   ret i128 %0
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
117 entry:
118   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
119   %0 = load i128, ptr %add.ptr, align 16
120   ret i128 %0
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
145 entry:
146   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001
147   %0 = load i128, ptr %add.ptr, align 16
148   ret i128 %0
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
171 entry:
172   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
173   %0 = load i128, ptr %add.ptr, align 16
174   ret i128 %0
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
184 ; CHECK-NEXT:    blr
185 entry:
186   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
187   %0 = load i128, ptr %add.ptr, align 16
188   ret i128 %0
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)
198 ; CHECK-NEXT:    blr
199 entry:
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
204   ret i128 %1
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)
216 ; CHECK-NEXT:    blr
217 entry:
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
223   ret i128 %1
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)
233 ; CHECK-NEXT:    blr
234 entry:
235   %or = or i64 %ptr, 6
236   %0 = inttoptr i64 %or to ptr
237   %1 = load i128, ptr %0, align 16
238   ret i128 %1
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
258 entry:
259   %and = and i64 %ptr, -4096
260   %or = or i64 %and, 6
261   %0 = inttoptr i64 %or to ptr
262   %1 = load i128, ptr %0, align 16
263   ret i128 %1
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)
273 ; CHECK-NEXT:    blr
274 entry:
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
279   ret i128 %1
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)
290 ; CHECK-NEXT:    blr
291 entry:
292   %or = or i64 %ptr, 99999
293   %0 = inttoptr i64 %or to ptr
294   %1 = load i128, ptr %0, align 16
295   ret i128 %1
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
316 entry:
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
321   ret i128 %1
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
344 entry:
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
349   ret i128 %1
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
374 entry:
375   %or = or i64 %ptr, 1000000000001
376   %0 = inttoptr i64 %or to ptr
377   %1 = load i128, ptr %0, align 16
378   ret i128 %1
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
406 entry:
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
411   ret i128 %1
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
441 entry:
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
446   ret i128 %1
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)
457 ; CHECK-NEXT:    blr
458 entry:
459   %0 = load i128, ptr inttoptr (i64 255 to ptr), align 16
460   ret i128 %0
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)
469 ; CHECK-NEXT:    blr
470 entry:
471   %0 = load i128, ptr inttoptr (i64 4080 to ptr), align 16
472   ret i128 %0
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
493 entry:
494   %0 = load i128, ptr inttoptr (i64 99999 to ptr), align 16
495   ret i128 %0
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)
505 ; CHECK-NEXT:    blr
506 entry:
507   %0 = load i128, ptr inttoptr (i64 9999900 to ptr), align 16
508   ret i128 %0
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
534 entry:
535   %0 = load i128, ptr inttoptr (i64 1000000000001 to ptr), align 16
536   ret i128 %0
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
564 entry:
565   %0 = load i128, ptr inttoptr (i64 1000000000000 to ptr), align 4096
566   ret i128 %0
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)
575 ; CHECK-NEXT:    blr
576 entry:
577   %0 = inttoptr i64 %ptr to ptr
578   store i128 %str, ptr %0, align 16
579   ret void
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
597 entry:
598   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1
599   store i128 %str, ptr %add.ptr, align 16
600   ret void
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)
609 ; CHECK-NEXT:    blr
610 entry:
611   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
612   store i128 %str, ptr %add.ptr, align 16
613   ret void
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
632 entry:
633   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999
634   store i128 %str, ptr %add.ptr, align 16
635   ret void
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
654 entry:
655   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
656   store i128 %str, ptr %add.ptr, align 16
657   ret void
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
680 entry:
681   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001
682   store i128 %str, ptr %add.ptr, align 16
683   ret void
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
704 entry:
705   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
706   store i128 %str, ptr %add.ptr, align 16
707   ret void
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)
716 ; CHECK-NEXT:    blr
717 entry:
718   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
719   store i128 %str, ptr %add.ptr, align 16
720   ret void
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)
730 ; CHECK-NEXT:    blr
731 entry:
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
736   ret void
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)
748 ; CHECK-NEXT:    blr
749 entry:
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
755   ret void
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)
765 ; CHECK-NEXT:    blr
766 entry:
767   %or = or i64 %ptr, 6
768   %0 = inttoptr i64 %or to ptr
769   store i128 %str, ptr %0, align 16
770   ret void
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
790 entry:
791   %and = and i64 %ptr, -4096
792   %or = or i64 %and, 6
793   %0 = inttoptr i64 %or to ptr
794   store i128 %str, ptr %0, align 16
795   ret void
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)
805 ; CHECK-NEXT:    blr
806 entry:
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
811   ret void
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)
822 ; CHECK-NEXT:    blr
823 entry:
824   %or = or i64 %ptr, 99999
825   %0 = inttoptr i64 %or to ptr
826   store i128 %str, ptr %0, align 16
827   ret void
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
848 entry:
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
853   ret void
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
876 entry:
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
881   ret void
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
906 entry:
907   %or = or i64 %ptr, 1000000000001
908   %0 = inttoptr i64 %or to ptr
909   store i128 %str, ptr %0, align 16
910   ret void
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
938 entry:
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
943   ret void
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
973 entry:
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
978   ret void
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)
989 ; CHECK-NEXT:    blr
990 entry:
991   store i128 %str, ptr inttoptr (i64 255 to ptr), align 16
992   ret void
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)
1001 ; CHECK-NEXT:    blr
1002 entry:
1003   store i128 %str, ptr inttoptr (i64 4080 to ptr), align 16
1004   ret void
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
1025 entry:
1026   store i128 %str, ptr inttoptr (i64 99999 to ptr), align 16
1027   ret void
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)
1037 ; CHECK-NEXT:    blr
1038 entry:
1039   store i128 %str, ptr inttoptr (i64 9999900 to ptr), align 16
1040   ret void
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
1066 entry:
1067   store i128 %str, ptr inttoptr (i64 1000000000001 to ptr), align 16
1068   ret void
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
1096 entry:
1097   store i128 %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096
1098   ret void