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
30 %0 = inttoptr i64 %ptr to i128*
31 %1 = load i128, i128* %0, align 16
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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
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)
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
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)
251 %0 = inttoptr i64 %or to i128*
252 %1 = load i128, i128* %0, align 16
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
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
285 %and = and i64 %ptr, -4096
287 %0 = inttoptr i64 %or to i128*
288 %1 = load i128, i128* %0, align 16
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)
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
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)
318 %or = or i64 %ptr, 99999
319 %0 = inttoptr i64 %or to i128*
320 %1 = load i128, i128* %0, align 16
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
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
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
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
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
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
415 %or = or i64 %ptr, 1000000000001
416 %0 = inttoptr i64 %or to i128*
417 %1 = load i128, i128* %0, align 16
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
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
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
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
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
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
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)
525 %0 = load i128, i128* inttoptr (i64 255 to i128*), align 16
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)
537 %0 = load i128, i128* inttoptr (i64 4080 to i128*), align 16
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)
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)
569 %0 = load i128, i128* inttoptr (i64 99999 to i128*), align 16
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)
582 %0 = load i128, i128* inttoptr (i64 9999900 to i128*), align 16
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)
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)
621 %0 = load i128, i128* inttoptr (i64 1000000000001 to i128*), align 16
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)
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)
664 %0 = load i128, i128* inttoptr (i64 1000000000000 to i128*), align 4096
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)
676 %0 = inttoptr i64 %ptr to i128*
677 store i128 %str, i128* %0, align 16
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
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
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
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)
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
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
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
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
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
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
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
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
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
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)
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
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)
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
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)
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
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)
884 %0 = inttoptr i64 %or to i128*
885 store i128 %str, i128* %0, align 16
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
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
918 %and = and i64 %ptr, -4096
920 %0 = inttoptr i64 %or to i128*
921 store i128 %str, i128* %0, align 16
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)
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
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)
951 %or = or i64 %ptr, 99999
952 %0 = inttoptr i64 %or to i128*
953 store i128 %str, i128* %0, align 16
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
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
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
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
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
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
1059 %or = or i64 %ptr, 1000000000001
1060 %0 = inttoptr i64 %or to i128*
1061 store i128 %str, i128* %0, align 16
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
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
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
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
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
1185 store i128 %str, i128* inttoptr (i64 255 to i128*), align 16
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)
1197 store i128 %str, i128* inttoptr (i64 4080 to i128*), align 16
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
1229 store i128 %str, i128* inttoptr (i64 99999 to i128*), align 16
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)
1242 store i128 %str, i128* inttoptr (i64 9999900 to i128*), align 16
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
1281 store i128 %str, i128* inttoptr (i64 1000000000001 to i128*), align 16
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
1324 store i128 %str, i128* inttoptr (i64 1000000000000 to i128*), align 4096