Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / PowerPC / f128_ldst.ll
blob2c69b2b52e48ed1b7e288e144d7767f46c4058e2
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,CHECK-P10-LE
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,CHECK-P10-BE
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
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
15 @GlobLd128 = dso_local local_unnamed_addr global [20 x fp128] zeroinitializer, align 16
16 @GlobSt128 = dso_local local_unnamed_addr global [20 x fp128] zeroinitializer, align 16
18 ; Function Attrs: norecurse nounwind readonly willreturn
19 define dso_local fp128 @ld_0___float128___float128(i64 %ptr) {
20 ; CHECK-LABEL: ld_0___float128___float128:
21 ; CHECK:       # %bb.0: # %entry
22 ; CHECK-NEXT:    lxv v2, 0(r3)
23 ; CHECK-NEXT:    blr
24 entry:
25   %0 = inttoptr i64 %ptr to ptr
26   %1 = load fp128, ptr %0, align 16
27   ret fp128 %1
30 ; Function Attrs: norecurse nounwind readonly willreturn
31 define dso_local fp128 @ld_unalign16___float128___float128(ptr nocapture readonly %ptr) {
32 ; CHECK-P10-LABEL: ld_unalign16___float128___float128:
33 ; CHECK-P10:       # %bb.0: # %entry
34 ; CHECK-P10-NEXT:    plxv v2, 1(r3), 0
35 ; CHECK-P10-NEXT:    blr
37 ; CHECK-PREP10-LABEL: ld_unalign16___float128___float128:
38 ; CHECK-PREP10:       # %bb.0: # %entry
39 ; CHECK-PREP10-NEXT:    li r4, 1
40 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
41 ; CHECK-PREP10-NEXT:    blr
42 entry:
43   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1
44   %0 = load fp128, ptr %add.ptr, align 16
45   ret fp128 %0
48 ; Function Attrs: norecurse nounwind readonly willreturn
49 define dso_local fp128 @ld_align16___float128___float128(ptr nocapture readonly %ptr) {
50 ; CHECK-P10-LABEL: ld_align16___float128___float128:
51 ; CHECK-P10:       # %bb.0: # %entry
52 ; CHECK-P10-NEXT:    plxv v2, 8(r3), 0
53 ; CHECK-P10-NEXT:    blr
55 ; CHECK-PREP10-LABEL: ld_align16___float128___float128:
56 ; CHECK-PREP10:       # %bb.0: # %entry
57 ; CHECK-PREP10-NEXT:    li r4, 8
58 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
59 ; CHECK-PREP10-NEXT:    blr
60 entry:
61   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
62   %0 = load fp128, ptr %add.ptr, align 16
63   ret fp128 %0
66 ; Function Attrs: norecurse nounwind readonly willreturn
67 define dso_local fp128 @ld_unalign32___float128___float128(ptr nocapture readonly %ptr) {
68 ; CHECK-P10-LABEL: ld_unalign32___float128___float128:
69 ; CHECK-P10:       # %bb.0: # %entry
70 ; CHECK-P10-NEXT:    plxv v2, 99999(r3), 0
71 ; CHECK-P10-NEXT:    blr
73 ; CHECK-PREP10-LABEL: ld_unalign32___float128___float128:
74 ; CHECK-PREP10:       # %bb.0: # %entry
75 ; CHECK-PREP10-NEXT:    lis r4, 1
76 ; CHECK-PREP10-NEXT:    ori r4, r4, 34463
77 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
78 ; CHECK-PREP10-NEXT:    blr
79 entry:
80   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999
81   %0 = load fp128, ptr %add.ptr, align 16
82   ret fp128 %0
85 ; Function Attrs: norecurse nounwind readonly willreturn
86 define dso_local fp128 @ld_align32___float128___float128(ptr nocapture readonly %ptr) {
87 ; CHECK-P10-LABEL: ld_align32___float128___float128:
88 ; CHECK-P10:       # %bb.0: # %entry
89 ; CHECK-P10-NEXT:    plxv v2, 99999000(r3), 0
90 ; CHECK-P10-NEXT:    blr
92 ; CHECK-PREP10-LABEL: ld_align32___float128___float128:
93 ; CHECK-PREP10:       # %bb.0: # %entry
94 ; CHECK-PREP10-NEXT:    lis r4, 1525
95 ; CHECK-PREP10-NEXT:    ori r4, r4, 56600
96 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
97 ; CHECK-PREP10-NEXT:    blr
98 entry:
99   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
100   %0 = load fp128, ptr %add.ptr, align 16
101   ret fp128 %0
104 ; Function Attrs: norecurse nounwind readonly willreturn
105 define dso_local fp128 @ld_unalign64___float128___float128(ptr nocapture readonly %ptr) {
106 ; CHECK-P10-LABEL: ld_unalign64___float128___float128:
107 ; CHECK-P10:       # %bb.0: # %entry
108 ; CHECK-P10-NEXT:    pli r4, 232
109 ; CHECK-P10-NEXT:    pli r5, 3567587329
110 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
111 ; CHECK-P10-NEXT:    lxvx v2, r3, r5
112 ; CHECK-P10-NEXT:    blr
114 ; CHECK-PREP10-LABEL: ld_unalign64___float128___float128:
115 ; CHECK-PREP10:       # %bb.0: # %entry
116 ; CHECK-PREP10-NEXT:    li r4, 29
117 ; CHECK-PREP10-NEXT:    rldic r4, r4, 35, 24
118 ; CHECK-PREP10-NEXT:    oris r4, r4, 54437
119 ; CHECK-PREP10-NEXT:    ori r4, r4, 4097
120 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
121 ; CHECK-PREP10-NEXT:    blr
122 entry:
123   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001
124   %0 = load fp128, ptr %add.ptr, align 16
125   ret fp128 %0
128 ; Function Attrs: norecurse nounwind readonly willreturn
129 define dso_local fp128 @ld_align64___float128___float128(ptr nocapture readonly %ptr) {
130 ; CHECK-P10-LABEL: ld_align64___float128___float128:
131 ; CHECK-P10:       # %bb.0: # %entry
132 ; CHECK-P10-NEXT:    pli r4, 244140625
133 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
134 ; CHECK-P10-NEXT:    lxvx v2, r3, r4
135 ; CHECK-P10-NEXT:    blr
137 ; CHECK-PREP10-LABEL: ld_align64___float128___float128:
138 ; CHECK-PREP10:       # %bb.0: # %entry
139 ; CHECK-PREP10-NEXT:    lis r4, 3725
140 ; CHECK-PREP10-NEXT:    ori r4, r4, 19025
141 ; CHECK-PREP10-NEXT:    rldic r4, r4, 12, 24
142 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
143 ; CHECK-PREP10-NEXT:    blr
144 entry:
145   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
146   %0 = load fp128, ptr %add.ptr, align 16
147   ret fp128 %0
150 ; Function Attrs: norecurse nounwind readonly willreturn
151 define dso_local fp128 @ld_reg___float128___float128(ptr nocapture readonly %ptr, i64 %off) {
152 ; CHECK-LABEL: ld_reg___float128___float128:
153 ; CHECK:       # %bb.0: # %entry
154 ; CHECK-NEXT:    lxvx v2, r3, r4
155 ; CHECK-NEXT:    blr
156 entry:
157   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
158   %0 = load fp128, ptr %add.ptr, align 16
159   ret fp128 %0
162 ; Function Attrs: norecurse nounwind readonly willreturn
163 define dso_local fp128 @ld_or___float128___float128(i64 %ptr, i8 zeroext %off) {
164 ; CHECK-LABEL: ld_or___float128___float128:
165 ; CHECK:       # %bb.0: # %entry
166 ; CHECK-NEXT:    or r3, r4, r3
167 ; CHECK-NEXT:    lxv v2, 0(r3)
168 ; CHECK-NEXT:    blr
169 entry:
170   %conv = zext i8 %off to i64
171   %or = or i64 %conv, %ptr
172   %0 = inttoptr i64 %or to ptr
173   %1 = load fp128, ptr %0, align 16
174   ret fp128 %1
177 ; Function Attrs: norecurse nounwind readonly willreturn
178 define dso_local fp128 @ld_or2___float128___float128(i64 %ptr, i8 zeroext %off) {
179 ; CHECK-LABEL: ld_or2___float128___float128:
180 ; CHECK:       # %bb.0: # %entry
181 ; CHECK-NEXT:    rldicr r3, r3, 0, 51
182 ; CHECK-NEXT:    lxvx v2, r3, r4
183 ; CHECK-NEXT:    blr
184 entry:
185   %and = and i64 %ptr, -4096
186   %conv = zext i8 %off to i64
187   %or = or i64 %and, %conv
188   %0 = inttoptr i64 %or to ptr
189   %1 = load fp128, ptr %0, align 16
190   ret fp128 %1
193 ; Function Attrs: norecurse nounwind readonly willreturn
194 define dso_local fp128 @ld_not_disjoint16___float128___float128(i64 %ptr) {
195 ; CHECK-LABEL: ld_not_disjoint16___float128___float128:
196 ; CHECK:       # %bb.0: # %entry
197 ; CHECK-NEXT:    ori r3, r3, 6
198 ; CHECK-NEXT:    lxv v2, 0(r3)
199 ; CHECK-NEXT:    blr
200 entry:
201   %or = or i64 %ptr, 6
202   %0 = inttoptr i64 %or to ptr
203   %1 = load fp128, ptr %0, align 16
204   ret fp128 %1
207 ; Function Attrs: norecurse nounwind readonly willreturn
208 define dso_local fp128 @ld_disjoint_unalign16___float128___float128(i64 %ptr) {
209 ; CHECK-P10-LABEL: ld_disjoint_unalign16___float128___float128:
210 ; CHECK-P10:       # %bb.0: # %entry
211 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
212 ; CHECK-P10-NEXT:    plxv v2, 6(r3), 0
213 ; CHECK-P10-NEXT:    blr
215 ; CHECK-PREP10-LABEL: ld_disjoint_unalign16___float128___float128:
216 ; CHECK-PREP10:       # %bb.0: # %entry
217 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 51
218 ; CHECK-PREP10-NEXT:    li r4, 6
219 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
220 ; CHECK-PREP10-NEXT:    blr
221 entry:
222   %and = and i64 %ptr, -4096
223   %or = or i64 %and, 6
224   %0 = inttoptr i64 %or to ptr
225   %1 = load fp128, ptr %0, align 16
226   ret fp128 %1
229 ; Function Attrs: norecurse nounwind readonly willreturn
230 define dso_local fp128 @ld_disjoint_align16___float128___float128(i64 %ptr) {
231 ; CHECK-P10-LABEL: ld_disjoint_align16___float128___float128:
232 ; CHECK-P10:       # %bb.0: # %entry
233 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
234 ; CHECK-P10-NEXT:    plxv v2, 24(r3), 0
235 ; CHECK-P10-NEXT:    blr
237 ; CHECK-PREP10-LABEL: ld_disjoint_align16___float128___float128:
238 ; CHECK-PREP10:       # %bb.0: # %entry
239 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 51
240 ; CHECK-PREP10-NEXT:    li r4, 24
241 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
242 ; CHECK-PREP10-NEXT:    blr
243 entry:
244   %and = and i64 %ptr, -4096
245   %or = or i64 %and, 24
246   %0 = inttoptr i64 %or to ptr
247   %1 = load fp128, ptr %0, align 16
248   ret fp128 %1
251 ; Function Attrs: norecurse nounwind readonly willreturn
252 define dso_local fp128 @ld_not_disjoint32___float128___float128(i64 %ptr) {
253 ; CHECK-LABEL: ld_not_disjoint32___float128___float128:
254 ; CHECK:       # %bb.0: # %entry
255 ; CHECK-NEXT:    ori r3, r3, 34463
256 ; CHECK-NEXT:    oris r3, r3, 1
257 ; CHECK-NEXT:    lxv v2, 0(r3)
258 ; CHECK-NEXT:    blr
259 entry:
260   %or = or i64 %ptr, 99999
261   %0 = inttoptr i64 %or to ptr
262   %1 = load fp128, ptr %0, align 16
263   ret fp128 %1
266 ; Function Attrs: norecurse nounwind readonly willreturn
267 define dso_local fp128 @ld_disjoint_unalign32___float128___float128(i64 %ptr) {
268 ; CHECK-P10-LABEL: ld_disjoint_unalign32___float128___float128:
269 ; CHECK-P10:       # %bb.0: # %entry
270 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 43
271 ; CHECK-P10-NEXT:    plxv v2, 99999(r3), 0
272 ; CHECK-P10-NEXT:    blr
274 ; CHECK-PREP10-LABEL: ld_disjoint_unalign32___float128___float128:
275 ; CHECK-PREP10:       # %bb.0: # %entry
276 ; CHECK-PREP10-NEXT:    lis r4, 1
277 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 43
278 ; CHECK-PREP10-NEXT:    ori r4, r4, 34463
279 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
280 ; CHECK-PREP10-NEXT:    blr
281 entry:
282   %and = and i64 %ptr, -1048576
283   %or = or i64 %and, 99999
284   %0 = inttoptr i64 %or to ptr
285   %1 = load fp128, ptr %0, align 16
286   ret fp128 %1
289 ; Function Attrs: norecurse nounwind readonly willreturn
290 define dso_local fp128 @ld_disjoint_align32___float128___float128(i64 %ptr) {
291 ; CHECK-P10-LABEL: ld_disjoint_align32___float128___float128:
292 ; CHECK-P10:       # %bb.0: # %entry
293 ; CHECK-P10-NEXT:    lis r4, -15264
294 ; CHECK-P10-NEXT:    and r3, r3, r4
295 ; CHECK-P10-NEXT:    plxv v2, 999990000(r3), 0
296 ; CHECK-P10-NEXT:    blr
298 ; CHECK-PREP10-LABEL: ld_disjoint_align32___float128___float128:
299 ; CHECK-PREP10:       # %bb.0: # %entry
300 ; CHECK-PREP10-NEXT:    lis r4, -15264
301 ; CHECK-PREP10-NEXT:    and r3, r3, r4
302 ; CHECK-PREP10-NEXT:    lis r4, 15258
303 ; CHECK-PREP10-NEXT:    ori r4, r4, 41712
304 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
305 ; CHECK-PREP10-NEXT:    blr
306 entry:
307   %and = and i64 %ptr, -1000341504
308   %or = or i64 %and, 999990000
309   %0 = inttoptr i64 %or to ptr
310   %1 = load fp128, ptr %0, align 16
311   ret fp128 %1
314 ; Function Attrs: norecurse nounwind readonly willreturn
315 define dso_local fp128 @ld_not_disjoint64___float128___float128(i64 %ptr) {
316 ; CHECK-P10-LABEL: ld_not_disjoint64___float128___float128:
317 ; CHECK-P10:       # %bb.0: # %entry
318 ; CHECK-P10-NEXT:    pli r4, 232
319 ; CHECK-P10-NEXT:    pli r5, 3567587329
320 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
321 ; CHECK-P10-NEXT:    or r3, r3, r5
322 ; CHECK-P10-NEXT:    lxv v2, 0(r3)
323 ; CHECK-P10-NEXT:    blr
325 ; CHECK-PREP10-LABEL: ld_not_disjoint64___float128___float128:
326 ; CHECK-PREP10:       # %bb.0: # %entry
327 ; CHECK-PREP10-NEXT:    li r4, 29
328 ; CHECK-PREP10-NEXT:    rldic r4, r4, 35, 24
329 ; CHECK-PREP10-NEXT:    oris r4, r4, 54437
330 ; CHECK-PREP10-NEXT:    ori r4, r4, 4097
331 ; CHECK-PREP10-NEXT:    or r3, r3, r4
332 ; CHECK-PREP10-NEXT:    lxv v2, 0(r3)
333 ; CHECK-PREP10-NEXT:    blr
334 entry:
335   %or = or i64 %ptr, 1000000000001
336   %0 = inttoptr i64 %or to ptr
337   %1 = load fp128, ptr %0, align 16
338   ret fp128 %1
341 ; Function Attrs: norecurse nounwind readonly willreturn
342 define dso_local fp128 @ld_disjoint_unalign64___float128___float128(i64 %ptr) {
343 ; CHECK-P10-LABEL: ld_disjoint_unalign64___float128___float128:
344 ; CHECK-P10:       # %bb.0: # %entry
345 ; CHECK-P10-NEXT:    pli r4, 232
346 ; CHECK-P10-NEXT:    pli r5, 3567587329
347 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
348 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
349 ; CHECK-P10-NEXT:    lxvx v2, r3, r5
350 ; CHECK-P10-NEXT:    blr
352 ; CHECK-PREP10-LABEL: ld_disjoint_unalign64___float128___float128:
353 ; CHECK-PREP10:       # %bb.0: # %entry
354 ; CHECK-PREP10-NEXT:    li r4, 29
355 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 23
356 ; CHECK-PREP10-NEXT:    rldic r4, r4, 35, 24
357 ; CHECK-PREP10-NEXT:    oris r4, r4, 54437
358 ; CHECK-PREP10-NEXT:    ori r4, r4, 4097
359 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
360 ; CHECK-PREP10-NEXT:    blr
361 entry:
362   %and = and i64 %ptr, -1099511627776
363   %or = or i64 %and, 1000000000001
364   %0 = inttoptr i64 %or to ptr
365   %1 = load fp128, ptr %0, align 16
366   ret fp128 %1
369 ; Function Attrs: norecurse nounwind readonly willreturn
370 define dso_local fp128 @ld_disjoint_align64___float128___float128(i64 %ptr) {
371 ; CHECK-P10-LABEL: ld_disjoint_align64___float128___float128:
372 ; CHECK-P10:       # %bb.0: # %entry
373 ; CHECK-P10-NEXT:    pli r4, 244140625
374 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
375 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
376 ; CHECK-P10-NEXT:    lxvx v2, r3, r4
377 ; CHECK-P10-NEXT:    blr
379 ; CHECK-PREP10-LABEL: ld_disjoint_align64___float128___float128:
380 ; CHECK-PREP10:       # %bb.0: # %entry
381 ; CHECK-PREP10-NEXT:    lis r4, 3725
382 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 23
383 ; CHECK-PREP10-NEXT:    ori r4, r4, 19025
384 ; CHECK-PREP10-NEXT:    rldic r4, r4, 12, 24
385 ; CHECK-PREP10-NEXT:    lxvx v2, r3, r4
386 ; CHECK-PREP10-NEXT:    blr
387 entry:
388   %and = and i64 %ptr, -1099511627776
389   %or = or i64 %and, 1000000000000
390   %0 = inttoptr i64 %or to ptr
391   %1 = load fp128, ptr %0, align 4096
392   ret fp128 %1
395 ; Function Attrs: norecurse nounwind readonly willreturn
396 define dso_local fp128 @ld_cst_unalign16___float128___float128() {
397 ; CHECK-LABEL: ld_cst_unalign16___float128___float128:
398 ; CHECK:       # %bb.0: # %entry
399 ; CHECK-NEXT:    li r3, 255
400 ; CHECK-NEXT:    lxv v2, 0(r3)
401 ; CHECK-NEXT:    blr
402 entry:
403   %0 = load fp128, ptr inttoptr (i64 255 to ptr), align 16
404   ret fp128 %0
407 ; Function Attrs: norecurse nounwind readonly willreturn
408 define dso_local fp128 @ld_cst_align16___float128___float128() {
409 ; CHECK-LABEL: ld_cst_align16___float128___float128:
410 ; CHECK:       # %bb.0: # %entry
411 ; CHECK-NEXT:    lxv v2, 4080(0)
412 ; CHECK-NEXT:    blr
413 entry:
414   %0 = load fp128, ptr inttoptr (i64 4080 to ptr), align 16
415   ret fp128 %0
418 ; Function Attrs: norecurse nounwind readonly willreturn
419 define dso_local fp128 @ld_cst_unalign32___float128___float128() {
420 ; CHECK-P10-LABEL: ld_cst_unalign32___float128___float128:
421 ; CHECK-P10:       # %bb.0: # %entry
422 ; CHECK-P10-NEXT:    pli r3, 99999
423 ; CHECK-P10-NEXT:    lxv v2, 0(r3)
424 ; CHECK-P10-NEXT:    blr
426 ; CHECK-PREP10-LABEL: ld_cst_unalign32___float128___float128:
427 ; CHECK-PREP10:       # %bb.0: # %entry
428 ; CHECK-PREP10-NEXT:    lis r3, 1
429 ; CHECK-PREP10-NEXT:    ori r3, r3, 34463
430 ; CHECK-PREP10-NEXT:    lxv v2, 0(r3)
431 ; CHECK-PREP10-NEXT:    blr
432 entry:
433   %0 = load fp128, ptr inttoptr (i64 99999 to ptr), align 16
434   ret fp128 %0
437 ; Function Attrs: norecurse nounwind readonly willreturn
438 define dso_local fp128 @ld_cst_align32___float128___float128() {
439 ; CHECK-P10-LABEL: ld_cst_align32___float128___float128:
440 ; CHECK-P10:       # %bb.0: # %entry
441 ; CHECK-P10-NEXT:    pli r3, 9999900
442 ; CHECK-P10-NEXT:    lxv v2, 0(r3)
443 ; CHECK-P10-NEXT:    blr
445 ; CHECK-PREP10-LABEL: ld_cst_align32___float128___float128:
446 ; CHECK-PREP10:       # %bb.0: # %entry
447 ; CHECK-PREP10-NEXT:    lis r3, 152
448 ; CHECK-PREP10-NEXT:    ori r3, r3, 38428
449 ; CHECK-PREP10-NEXT:    lxv v2, 0(r3)
450 ; CHECK-PREP10-NEXT:    blr
451 entry:
452   %0 = load fp128, ptr inttoptr (i64 9999900 to ptr), align 16
453   ret fp128 %0
456 ; Function Attrs: norecurse nounwind readonly willreturn
457 define dso_local fp128 @ld_cst_unalign64___float128___float128() {
458 ; CHECK-P10-LABEL: ld_cst_unalign64___float128___float128:
459 ; CHECK-P10:       # %bb.0: # %entry
460 ; CHECK-P10-NEXT:    pli r3, 232
461 ; CHECK-P10-NEXT:    pli r4, 3567587329
462 ; CHECK-P10-NEXT:    rldimi r4, r3, 32, 0
463 ; CHECK-P10-NEXT:    lxv v2, 0(r4)
464 ; CHECK-P10-NEXT:    blr
466 ; CHECK-PREP10-LABEL: ld_cst_unalign64___float128___float128:
467 ; CHECK-PREP10:       # %bb.0: # %entry
468 ; CHECK-PREP10-NEXT:    li r3, 29
469 ; CHECK-PREP10-NEXT:    rldic r3, r3, 35, 24
470 ; CHECK-PREP10-NEXT:    oris r3, r3, 54437
471 ; CHECK-PREP10-NEXT:    ori r3, r3, 4097
472 ; CHECK-PREP10-NEXT:    lxv v2, 0(r3)
473 ; CHECK-PREP10-NEXT:    blr
474 entry:
475   %0 = load fp128, ptr inttoptr (i64 1000000000001 to ptr), align 16
476   ret fp128 %0
479 ; Function Attrs: norecurse nounwind readonly willreturn
480 define dso_local fp128 @ld_cst_align64___float128___float128() {
481 ; CHECK-P10-LABEL: ld_cst_align64___float128___float128:
482 ; CHECK-P10:       # %bb.0: # %entry
483 ; CHECK-P10-NEXT:    pli r3, 244140625
484 ; CHECK-P10-NEXT:    rldic r3, r3, 12, 24
485 ; CHECK-P10-NEXT:    lxv v2, 0(r3)
486 ; CHECK-P10-NEXT:    blr
488 ; CHECK-PREP10-LABEL: ld_cst_align64___float128___float128:
489 ; CHECK-PREP10:       # %bb.0: # %entry
490 ; CHECK-PREP10-NEXT:    lis r3, 3725
491 ; CHECK-PREP10-NEXT:    ori r3, r3, 19025
492 ; CHECK-PREP10-NEXT:    rldic r3, r3, 12, 24
493 ; CHECK-PREP10-NEXT:    lxv v2, 0(r3)
494 ; CHECK-PREP10-NEXT:    blr
495 entry:
496   %0 = load fp128, ptr inttoptr (i64 1000000000000 to ptr), align 4096
497   ret fp128 %0
500 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
501 define dso_local void @st_0___float128___float128(i64 %ptr, fp128 %str) {
502 ; CHECK-LABEL: st_0___float128___float128:
503 ; CHECK:       # %bb.0: # %entry
504 ; CHECK-NEXT:    stxv v2, 0(r3)
505 ; CHECK-NEXT:    blr
506 entry:
507   %0 = inttoptr i64 %ptr to ptr
508   store fp128 %str, ptr %0, align 16
509   ret void
512 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
513 define dso_local void @st_unalign16___float128___float128(ptr nocapture %ptr, fp128 %str) {
514 ; CHECK-P10-LABEL: st_unalign16___float128___float128:
515 ; CHECK-P10:       # %bb.0: # %entry
516 ; CHECK-P10-NEXT:    pstxv v2, 1(r3), 0
517 ; CHECK-P10-NEXT:    blr
519 ; CHECK-PREP10-LABEL: st_unalign16___float128___float128:
520 ; CHECK-PREP10:       # %bb.0: # %entry
521 ; CHECK-PREP10-NEXT:    li r4, 1
522 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
523 ; CHECK-PREP10-NEXT:    blr
524 entry:
525   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1
526   store fp128 %str, ptr %add.ptr, align 16
527   ret void
530 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
531 define dso_local void @st_align16___float128___float128(ptr nocapture %ptr, fp128 %str) {
532 ; CHECK-P10-LABEL: st_align16___float128___float128:
533 ; CHECK-P10:       # %bb.0: # %entry
534 ; CHECK-P10-NEXT:    pstxv v2, 8(r3), 0
535 ; CHECK-P10-NEXT:    blr
537 ; CHECK-PREP10-LABEL: st_align16___float128___float128:
538 ; CHECK-PREP10:       # %bb.0: # %entry
539 ; CHECK-PREP10-NEXT:    li r4, 8
540 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
541 ; CHECK-PREP10-NEXT:    blr
542 entry:
543   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
544   store fp128 %str, ptr %add.ptr, align 16
545   ret void
548 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
549 define dso_local void @st_unalign32___float128___float128(ptr nocapture %ptr, fp128 %str) {
550 ; CHECK-P10-LABEL: st_unalign32___float128___float128:
551 ; CHECK-P10:       # %bb.0: # %entry
552 ; CHECK-P10-NEXT:    pstxv v2, 99999(r3), 0
553 ; CHECK-P10-NEXT:    blr
555 ; CHECK-PREP10-LABEL: st_unalign32___float128___float128:
556 ; CHECK-PREP10:       # %bb.0: # %entry
557 ; CHECK-PREP10-NEXT:    lis r4, 1
558 ; CHECK-PREP10-NEXT:    ori r4, r4, 34463
559 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
560 ; CHECK-PREP10-NEXT:    blr
561 entry:
562   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999
563   store fp128 %str, ptr %add.ptr, align 16
564   ret void
567 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
568 define dso_local void @st_align32___float128___float128(ptr nocapture %ptr, fp128 %str) {
569 ; CHECK-P10-LABEL: st_align32___float128___float128:
570 ; CHECK-P10:       # %bb.0: # %entry
571 ; CHECK-P10-NEXT:    pstxv v2, 99999000(r3), 0
572 ; CHECK-P10-NEXT:    blr
574 ; CHECK-PREP10-LABEL: st_align32___float128___float128:
575 ; CHECK-PREP10:       # %bb.0: # %entry
576 ; CHECK-PREP10-NEXT:    lis r4, 1525
577 ; CHECK-PREP10-NEXT:    ori r4, r4, 56600
578 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
579 ; CHECK-PREP10-NEXT:    blr
580 entry:
581   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
582   store fp128 %str, ptr %add.ptr, align 16
583   ret void
586 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
587 define dso_local void @st_unalign64___float128___float128(ptr nocapture %ptr, fp128 %str) {
588 ; CHECK-P10-LABEL: st_unalign64___float128___float128:
589 ; CHECK-P10:       # %bb.0: # %entry
590 ; CHECK-P10-NEXT:    pli r4, 232
591 ; CHECK-P10-NEXT:    pli r5, 3567587329
592 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
593 ; CHECK-P10-NEXT:    stxvx v2, r3, r5
594 ; CHECK-P10-NEXT:    blr
596 ; CHECK-PREP10-LABEL: st_unalign64___float128___float128:
597 ; CHECK-PREP10:       # %bb.0: # %entry
598 ; CHECK-PREP10-NEXT:    li r4, 29
599 ; CHECK-PREP10-NEXT:    rldic r4, r4, 35, 24
600 ; CHECK-PREP10-NEXT:    oris r4, r4, 54437
601 ; CHECK-PREP10-NEXT:    ori r4, r4, 4097
602 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
603 ; CHECK-PREP10-NEXT:    blr
604 entry:
605   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001
606   store fp128 %str, ptr %add.ptr, align 16
607   ret void
610 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
611 define dso_local void @st_align64___float128___float128(ptr nocapture %ptr, fp128 %str) {
612 ; CHECK-P10-LABEL: st_align64___float128___float128:
613 ; CHECK-P10:       # %bb.0: # %entry
614 ; CHECK-P10-NEXT:    pli r4, 244140625
615 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
616 ; CHECK-P10-NEXT:    stxvx v2, r3, r4
617 ; CHECK-P10-NEXT:    blr
619 ; CHECK-PREP10-LABEL: st_align64___float128___float128:
620 ; CHECK-PREP10:       # %bb.0: # %entry
621 ; CHECK-PREP10-NEXT:    lis r4, 3725
622 ; CHECK-PREP10-NEXT:    ori r4, r4, 19025
623 ; CHECK-PREP10-NEXT:    rldic r4, r4, 12, 24
624 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
625 ; CHECK-PREP10-NEXT:    blr
626 entry:
627   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
628   store fp128 %str, ptr %add.ptr, align 16
629   ret void
632 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
633 define dso_local void @st_reg___float128___float128(ptr nocapture %ptr, i64 %off, fp128 %str) {
634 ; CHECK-LABEL: st_reg___float128___float128:
635 ; CHECK:       # %bb.0: # %entry
636 ; CHECK-NEXT:    stxvx v2, r3, r4
637 ; CHECK-NEXT:    blr
638 entry:
639   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
640   store fp128 %str, ptr %add.ptr, align 16
641   ret void
644 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
645 define dso_local void @st_or1___float128___float128(i64 %ptr, i8 zeroext %off, fp128 %str) {
646 ; CHECK-LABEL: st_or1___float128___float128:
647 ; CHECK:       # %bb.0: # %entry
648 ; CHECK-NEXT:    or r3, r4, r3
649 ; CHECK-NEXT:    stxv v2, 0(r3)
650 ; CHECK-NEXT:    blr
651 entry:
652   %conv = zext i8 %off to i64
653   %or = or i64 %conv, %ptr
654   %0 = inttoptr i64 %or to ptr
655   store fp128 %str, ptr %0, align 16
656   ret void
659 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
660 define dso_local void @st_or2___float128___float128(i64 %ptr, i8 zeroext %off, fp128 %str) {
661 ; CHECK-LABEL: st_or2___float128___float128:
662 ; CHECK:       # %bb.0: # %entry
663 ; CHECK-NEXT:    rldicr r3, r3, 0, 51
664 ; CHECK-NEXT:    stxvx v2, r3, r4
665 ; CHECK-NEXT:    blr
666 entry:
667   %and = and i64 %ptr, -4096
668   %conv = zext i8 %off to i64
669   %or = or i64 %and, %conv
670   %0 = inttoptr i64 %or to ptr
671   store fp128 %str, ptr %0, align 16
672   ret void
675 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
676 define dso_local void @st_not_disjoint16___float128___float128(i64 %ptr, fp128 %str) {
677 ; CHECK-LABEL: st_not_disjoint16___float128___float128:
678 ; CHECK:       # %bb.0: # %entry
679 ; CHECK-NEXT:    ori r3, r3, 6
680 ; CHECK-NEXT:    stxv v2, 0(r3)
681 ; CHECK-NEXT:    blr
682 entry:
683   %or = or i64 %ptr, 6
684   %0 = inttoptr i64 %or to ptr
685   store fp128 %str, ptr %0, align 16
686   ret void
689 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
690 define dso_local void @st_disjoint_unalign16___float128___float128(i64 %ptr, fp128 %str) {
691 ; CHECK-P10-LABEL: st_disjoint_unalign16___float128___float128:
692 ; CHECK-P10:       # %bb.0: # %entry
693 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
694 ; CHECK-P10-NEXT:    pstxv v2, 6(r3), 0
695 ; CHECK-P10-NEXT:    blr
697 ; CHECK-PREP10-LABEL: st_disjoint_unalign16___float128___float128:
698 ; CHECK-PREP10:       # %bb.0: # %entry
699 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 51
700 ; CHECK-PREP10-NEXT:    li r4, 6
701 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
702 ; CHECK-PREP10-NEXT:    blr
703 entry:
704   %and = and i64 %ptr, -4096
705   %or = or i64 %and, 6
706   %0 = inttoptr i64 %or to ptr
707   store fp128 %str, ptr %0, align 16
708   ret void
711 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
712 define dso_local void @st_disjoint_align16___float128___float128(i64 %ptr, fp128 %str) {
713 ; CHECK-P10-LABEL: st_disjoint_align16___float128___float128:
714 ; CHECK-P10:       # %bb.0: # %entry
715 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 51
716 ; CHECK-P10-NEXT:    pstxv v2, 24(r3), 0
717 ; CHECK-P10-NEXT:    blr
719 ; CHECK-PREP10-LABEL: st_disjoint_align16___float128___float128:
720 ; CHECK-PREP10:       # %bb.0: # %entry
721 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 51
722 ; CHECK-PREP10-NEXT:    li r4, 24
723 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
724 ; CHECK-PREP10-NEXT:    blr
725 entry:
726   %and = and i64 %ptr, -4096
727   %or = or i64 %and, 24
728   %0 = inttoptr i64 %or to ptr
729   store fp128 %str, ptr %0, align 16
730   ret void
733 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
734 define dso_local void @st_not_disjoint32___float128___float128(i64 %ptr, fp128 %str) {
735 ; CHECK-LABEL: st_not_disjoint32___float128___float128:
736 ; CHECK:       # %bb.0: # %entry
737 ; CHECK-NEXT:    ori r3, r3, 34463
738 ; CHECK-NEXT:    oris r3, r3, 1
739 ; CHECK-NEXT:    stxv v2, 0(r3)
740 ; CHECK-NEXT:    blr
741 entry:
742   %or = or i64 %ptr, 99999
743   %0 = inttoptr i64 %or to ptr
744   store fp128 %str, ptr %0, align 16
745   ret void
748 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
749 define dso_local void @st_disjoint_unalign32___float128___float128(i64 %ptr, fp128 %str) {
750 ; CHECK-P10-LABEL: st_disjoint_unalign32___float128___float128:
751 ; CHECK-P10:       # %bb.0: # %entry
752 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 43
753 ; CHECK-P10-NEXT:    pstxv v2, 99999(r3), 0
754 ; CHECK-P10-NEXT:    blr
756 ; CHECK-PREP10-LABEL: st_disjoint_unalign32___float128___float128:
757 ; CHECK-PREP10:       # %bb.0: # %entry
758 ; CHECK-PREP10-NEXT:    lis r4, 1
759 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 43
760 ; CHECK-PREP10-NEXT:    ori r4, r4, 34463
761 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
762 ; CHECK-PREP10-NEXT:    blr
763 entry:
764   %and = and i64 %ptr, -1048576
765   %or = or i64 %and, 99999
766   %0 = inttoptr i64 %or to ptr
767   store fp128 %str, ptr %0, align 16
768   ret void
771 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
772 define dso_local void @st_disjoint_align32___float128___float128(i64 %ptr, fp128 %str) {
773 ; CHECK-P10-LABEL: st_disjoint_align32___float128___float128:
774 ; CHECK-P10:       # %bb.0: # %entry
775 ; CHECK-P10-NEXT:    lis r4, -15264
776 ; CHECK-P10-NEXT:    and r3, r3, r4
777 ; CHECK-P10-NEXT:    pstxv v2, 999990000(r3), 0
778 ; CHECK-P10-NEXT:    blr
780 ; CHECK-PREP10-LABEL: st_disjoint_align32___float128___float128:
781 ; CHECK-PREP10:       # %bb.0: # %entry
782 ; CHECK-PREP10-NEXT:    lis r4, -15264
783 ; CHECK-PREP10-NEXT:    and r3, r3, r4
784 ; CHECK-PREP10-NEXT:    lis r4, 15258
785 ; CHECK-PREP10-NEXT:    ori r4, r4, 41712
786 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
787 ; CHECK-PREP10-NEXT:    blr
788 entry:
789   %and = and i64 %ptr, -1000341504
790   %or = or i64 %and, 999990000
791   %0 = inttoptr i64 %or to ptr
792   store fp128 %str, ptr %0, align 16
793   ret void
796 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
797 define dso_local void @st_not_disjoint64___float128___float128(i64 %ptr, fp128 %str) {
798 ; CHECK-P10-LABEL: st_not_disjoint64___float128___float128:
799 ; CHECK-P10:       # %bb.0: # %entry
800 ; CHECK-P10-NEXT:    pli r4, 232
801 ; CHECK-P10-NEXT:    pli r5, 3567587329
802 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
803 ; CHECK-P10-NEXT:    or r3, r3, r5
804 ; CHECK-P10-NEXT:    stxv v2, 0(r3)
805 ; CHECK-P10-NEXT:    blr
807 ; CHECK-PREP10-LABEL: st_not_disjoint64___float128___float128:
808 ; CHECK-PREP10:       # %bb.0: # %entry
809 ; CHECK-PREP10-NEXT:    li r4, 29
810 ; CHECK-PREP10-NEXT:    rldic r4, r4, 35, 24
811 ; CHECK-PREP10-NEXT:    oris r4, r4, 54437
812 ; CHECK-PREP10-NEXT:    ori r4, r4, 4097
813 ; CHECK-PREP10-NEXT:    or r3, r3, r4
814 ; CHECK-PREP10-NEXT:    stxv v2, 0(r3)
815 ; CHECK-PREP10-NEXT:    blr
816 entry:
817   %or = or i64 %ptr, 1000000000001
818   %0 = inttoptr i64 %or to ptr
819   store fp128 %str, ptr %0, align 16
820   ret void
823 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
824 define dso_local void @st_disjoint_unalign64___float128___float128(i64 %ptr, fp128 %str) {
825 ; CHECK-P10-LABEL: st_disjoint_unalign64___float128___float128:
826 ; CHECK-P10:       # %bb.0: # %entry
827 ; CHECK-P10-NEXT:    pli r4, 232
828 ; CHECK-P10-NEXT:    pli r5, 3567587329
829 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
830 ; CHECK-P10-NEXT:    rldimi r5, r4, 32, 0
831 ; CHECK-P10-NEXT:    stxvx v2, r3, r5
832 ; CHECK-P10-NEXT:    blr
834 ; CHECK-PREP10-LABEL: st_disjoint_unalign64___float128___float128:
835 ; CHECK-PREP10:       # %bb.0: # %entry
836 ; CHECK-PREP10-NEXT:    li r4, 29
837 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 23
838 ; CHECK-PREP10-NEXT:    rldic r4, r4, 35, 24
839 ; CHECK-PREP10-NEXT:    oris r4, r4, 54437
840 ; CHECK-PREP10-NEXT:    ori r4, r4, 4097
841 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
842 ; CHECK-PREP10-NEXT:    blr
843 entry:
844   %and = and i64 %ptr, -1099511627776
845   %or = or i64 %and, 1000000000001
846   %0 = inttoptr i64 %or to ptr
847   store fp128 %str, ptr %0, align 16
848   ret void
851 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
852 define dso_local void @st_disjoint_align64___float128___float128(i64 %ptr, fp128 %str) {
853 ; CHECK-P10-LABEL: st_disjoint_align64___float128___float128:
854 ; CHECK-P10:       # %bb.0: # %entry
855 ; CHECK-P10-NEXT:    pli r4, 244140625
856 ; CHECK-P10-NEXT:    rldicr r3, r3, 0, 23
857 ; CHECK-P10-NEXT:    rldic r4, r4, 12, 24
858 ; CHECK-P10-NEXT:    stxvx v2, r3, r4
859 ; CHECK-P10-NEXT:    blr
861 ; CHECK-PREP10-LABEL: st_disjoint_align64___float128___float128:
862 ; CHECK-PREP10:       # %bb.0: # %entry
863 ; CHECK-PREP10-NEXT:    lis r4, 3725
864 ; CHECK-PREP10-NEXT:    rldicr r3, r3, 0, 23
865 ; CHECK-PREP10-NEXT:    ori r4, r4, 19025
866 ; CHECK-PREP10-NEXT:    rldic r4, r4, 12, 24
867 ; CHECK-PREP10-NEXT:    stxvx v2, r3, r4
868 ; CHECK-PREP10-NEXT:    blr
869 entry:
870   %and = and i64 %ptr, -1099511627776
871   %or = or i64 %and, 1000000000000
872   %0 = inttoptr i64 %or to ptr
873   store fp128 %str, ptr %0, align 4096
874   ret void
877 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
878 define dso_local void @st_cst_unalign16___float128___float128(fp128 %str) {
879 ; CHECK-LABEL: st_cst_unalign16___float128___float128:
880 ; CHECK:       # %bb.0: # %entry
881 ; CHECK-NEXT:    li r3, 255
882 ; CHECK-NEXT:    stxv v2, 0(r3)
883 ; CHECK-NEXT:    blr
884 entry:
885   store fp128 %str, ptr inttoptr (i64 255 to ptr), align 16
886   ret void
889 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
890 define dso_local void @st_cst_align16___float128___float128(fp128 %str) {
891 ; CHECK-LABEL: st_cst_align16___float128___float128:
892 ; CHECK:       # %bb.0: # %entry
893 ; CHECK-NEXT:    stxv v2, 4080(0)
894 ; CHECK-NEXT:    blr
895 entry:
896   store fp128 %str, ptr inttoptr (i64 4080 to ptr), align 16
897   ret void
900 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
901 define dso_local void @st_cst_unalign32___float128___float128(fp128 %str) {
902 ; CHECK-P10-LABEL: st_cst_unalign32___float128___float128:
903 ; CHECK-P10:       # %bb.0: # %entry
904 ; CHECK-P10-NEXT:    pli r3, 99999
905 ; CHECK-P10-NEXT:    stxv v2, 0(r3)
906 ; CHECK-P10-NEXT:    blr
908 ; CHECK-PREP10-LABEL: st_cst_unalign32___float128___float128:
909 ; CHECK-PREP10:       # %bb.0: # %entry
910 ; CHECK-PREP10-NEXT:    lis r3, 1
911 ; CHECK-PREP10-NEXT:    ori r3, r3, 34463
912 ; CHECK-PREP10-NEXT:    stxv v2, 0(r3)
913 ; CHECK-PREP10-NEXT:    blr
914 entry:
915   store fp128 %str, ptr inttoptr (i64 99999 to ptr), align 16
916   ret void
919 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
920 define dso_local void @st_cst_align32___float128___float128(fp128 %str) {
921 ; CHECK-P10-LABEL: st_cst_align32___float128___float128:
922 ; CHECK-P10:       # %bb.0: # %entry
923 ; CHECK-P10-NEXT:    pli r3, 9999900
924 ; CHECK-P10-NEXT:    stxv v2, 0(r3)
925 ; CHECK-P10-NEXT:    blr
927 ; CHECK-PREP10-LABEL: st_cst_align32___float128___float128:
928 ; CHECK-PREP10:       # %bb.0: # %entry
929 ; CHECK-PREP10-NEXT:    lis r3, 152
930 ; CHECK-PREP10-NEXT:    ori r3, r3, 38428
931 ; CHECK-PREP10-NEXT:    stxv v2, 0(r3)
932 ; CHECK-PREP10-NEXT:    blr
933 entry:
934   store fp128 %str, ptr inttoptr (i64 9999900 to ptr), align 16
935   ret void
938 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
939 define dso_local void @st_cst_unalign64___float128___float128(fp128 %str) {
940 ; CHECK-P10-LABEL: st_cst_unalign64___float128___float128:
941 ; CHECK-P10:       # %bb.0: # %entry
942 ; CHECK-P10-NEXT:    pli r3, 232
943 ; CHECK-P10-NEXT:    pli r4, 3567587329
944 ; CHECK-P10-NEXT:    rldimi r4, r3, 32, 0
945 ; CHECK-P10-NEXT:    stxv v2, 0(r4)
946 ; CHECK-P10-NEXT:    blr
948 ; CHECK-PREP10-LABEL: st_cst_unalign64___float128___float128:
949 ; CHECK-PREP10:       # %bb.0: # %entry
950 ; CHECK-PREP10-NEXT:    li r3, 29
951 ; CHECK-PREP10-NEXT:    rldic r3, r3, 35, 24
952 ; CHECK-PREP10-NEXT:    oris r3, r3, 54437
953 ; CHECK-PREP10-NEXT:    ori r3, r3, 4097
954 ; CHECK-PREP10-NEXT:    stxv v2, 0(r3)
955 ; CHECK-PREP10-NEXT:    blr
956 entry:
957   store fp128 %str, ptr inttoptr (i64 1000000000001 to ptr), align 16
958   ret void
961 ; Function Attrs: nofree norecurse nounwind willreturn writeonly
962 define dso_local void @st_cst_align64___float128___float128(fp128 %str) {
963 ; CHECK-P10-LABEL: st_cst_align64___float128___float128:
964 ; CHECK-P10:       # %bb.0: # %entry
965 ; CHECK-P10-NEXT:    pli r3, 244140625
966 ; CHECK-P10-NEXT:    rldic r3, r3, 12, 24
967 ; CHECK-P10-NEXT:    stxv v2, 0(r3)
968 ; CHECK-P10-NEXT:    blr
970 ; CHECK-PREP10-LABEL: st_cst_align64___float128___float128:
971 ; CHECK-PREP10:       # %bb.0: # %entry
972 ; CHECK-PREP10-NEXT:    lis r3, 3725
973 ; CHECK-PREP10-NEXT:    ori r3, r3, 19025
974 ; CHECK-PREP10-NEXT:    rldic r3, r3, 12, 24
975 ; CHECK-PREP10-NEXT:    stxv v2, 0(r3)
976 ; CHECK-PREP10-NEXT:    blr
977 entry:
978   store fp128 %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096
979   ret void
982 ; Function Attrs: nofree norecurse nounwind willreturn
983 define dso_local void @testGlob128PtrPlus0() {
984 ; CHECK-P10-LE-LABEL: testGlob128PtrPlus0:
985 ; CHECK-P10-LE:       # %bb.0: # %entry
986 ; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd128@PCREL(0), 1
987 ; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt128@PCREL(0), 1
988 ; CHECK-P10-LE-NEXT:    blr
990 ; CHECK-P10-BE-LABEL: testGlob128PtrPlus0:
991 ; CHECK-P10-BE:       # %bb.0: # %entry
992 ; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd128@toc@ha
993 ; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd128@toc@l
994 ; CHECK-P10-BE-NEXT:    lxv vs0, 0(r3)
995 ; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt128@toc@ha
996 ; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt128@toc@l
997 ; CHECK-P10-BE-NEXT:    stxv vs0, 0(r3)
998 ; CHECK-P10-BE-NEXT:    blr
1000 ; CHECK-PREP10-LABEL: testGlob128PtrPlus0:
1001 ; CHECK-PREP10:       # %bb.0: # %entry
1002 ; CHECK-PREP10-NEXT:    addis r3, r2, GlobLd128@toc@ha
1003 ; CHECK-PREP10-NEXT:    addi r3, r3, GlobLd128@toc@l
1004 ; CHECK-PREP10-NEXT:    lxv vs0, 0(r3)
1005 ; CHECK-PREP10-NEXT:    addis r3, r2, GlobSt128@toc@ha
1006 ; CHECK-PREP10-NEXT:    addi r3, r3, GlobSt128@toc@l
1007 ; CHECK-PREP10-NEXT:    stxv vs0, 0(r3)
1008 ; CHECK-PREP10-NEXT:    blr
1009 entry:
1010   %0 = load fp128, ptr @GlobLd128, align 16
1011   store fp128 %0, ptr @GlobSt128, align 16
1012   ret void
1015 ; Function Attrs: nofree norecurse nounwind willreturn
1016 define dso_local void @testGlob128PtrPlus3() {
1017 ; CHECK-P10-LE-LABEL: testGlob128PtrPlus3:
1018 ; CHECK-P10-LE:       # %bb.0: # %entry
1019 ; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd128@PCREL+3(0), 1
1020 ; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt128@PCREL+3(0), 1
1021 ; CHECK-P10-LE-NEXT:    blr
1023 ; CHECK-P10-BE-LABEL: testGlob128PtrPlus3:
1024 ; CHECK-P10-BE:       # %bb.0: # %entry
1025 ; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd128@toc@ha
1026 ; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd128@toc@l
1027 ; CHECK-P10-BE-NEXT:    plxv vs0, 3(r3), 0
1028 ; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt128@toc@ha
1029 ; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt128@toc@l
1030 ; CHECK-P10-BE-NEXT:    pstxv vs0, 3(r3), 0
1031 ; CHECK-P10-BE-NEXT:    blr
1033 ; CHECK-PREP10-LABEL: testGlob128PtrPlus3:
1034 ; CHECK-PREP10:       # %bb.0: # %entry
1035 ; CHECK-PREP10-NEXT:    addis r3, r2, GlobLd128@toc@ha
1036 ; CHECK-PREP10-NEXT:    li r4, 3
1037 ; CHECK-PREP10-NEXT:    addi r3, r3, GlobLd128@toc@l
1038 ; CHECK-PREP10-NEXT:    lxvx vs0, r3, r4
1039 ; CHECK-PREP10-NEXT:    addis r3, r2, GlobSt128@toc@ha
1040 ; CHECK-PREP10-NEXT:    addi r3, r3, GlobSt128@toc@l
1041 ; CHECK-PREP10-NEXT:    stxvx vs0, r3, r4
1042 ; CHECK-PREP10-NEXT:    blr
1043 entry:
1044   %0 = load fp128, ptr getelementptr inbounds (i8, ptr @GlobLd128, i64 3), align 16
1045   store fp128 %0, ptr getelementptr inbounds (i8, ptr @GlobSt128, i64 3), align 16
1046   ret void
1049 ; Function Attrs: nofree norecurse nounwind willreturn
1050 define dso_local void @testGlob128PtrPlus4() {
1051 ; CHECK-P10-LE-LABEL: testGlob128PtrPlus4:
1052 ; CHECK-P10-LE:       # %bb.0: # %entry
1053 ; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd128@PCREL+4(0), 1
1054 ; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt128@PCREL+4(0), 1
1055 ; CHECK-P10-LE-NEXT:    blr
1057 ; CHECK-P10-BE-LABEL: testGlob128PtrPlus4:
1058 ; CHECK-P10-BE:       # %bb.0: # %entry
1059 ; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd128@toc@ha
1060 ; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd128@toc@l
1061 ; CHECK-P10-BE-NEXT:    plxv vs0, 4(r3), 0
1062 ; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt128@toc@ha
1063 ; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt128@toc@l
1064 ; CHECK-P10-BE-NEXT:    pstxv vs0, 4(r3), 0
1065 ; CHECK-P10-BE-NEXT:    blr
1067 ; CHECK-PREP10-LABEL: testGlob128PtrPlus4:
1068 ; CHECK-PREP10:       # %bb.0: # %entry
1069 ; CHECK-PREP10-NEXT:    addis r3, r2, GlobLd128@toc@ha
1070 ; CHECK-PREP10-NEXT:    li r4, 4
1071 ; CHECK-PREP10-NEXT:    addi r3, r3, GlobLd128@toc@l
1072 ; CHECK-PREP10-NEXT:    lxvx vs0, r3, r4
1073 ; CHECK-PREP10-NEXT:    addis r3, r2, GlobSt128@toc@ha
1074 ; CHECK-PREP10-NEXT:    addi r3, r3, GlobSt128@toc@l
1075 ; CHECK-PREP10-NEXT:    stxvx vs0, r3, r4
1076 ; CHECK-PREP10-NEXT:    blr
1077 entry:
1078   %0 = load fp128, ptr getelementptr inbounds (i8, ptr @GlobLd128, i64 4), align 16
1079   store fp128 %0, ptr getelementptr inbounds (i8, ptr @GlobSt128, i64 4), align 16
1080   ret void
1083 ; Function Attrs: nofree norecurse nounwind willreturn
1084 define dso_local void @testGlob128PtrPlus16() {
1085 ; CHECK-P10-LE-LABEL: testGlob128PtrPlus16:
1086 ; CHECK-P10-LE:       # %bb.0: # %entry
1087 ; CHECK-P10-LE-NEXT:    plxv vs0, GlobLd128@PCREL+16(0), 1
1088 ; CHECK-P10-LE-NEXT:    pstxv vs0, GlobSt128@PCREL+16(0), 1
1089 ; CHECK-P10-LE-NEXT:    blr
1091 ; CHECK-P10-BE-LABEL: testGlob128PtrPlus16:
1092 ; CHECK-P10-BE:       # %bb.0: # %entry
1093 ; CHECK-P10-BE-NEXT:    addis r3, r2, GlobLd128@toc@ha
1094 ; CHECK-P10-BE-NEXT:    addi r3, r3, GlobLd128@toc@l
1095 ; CHECK-P10-BE-NEXT:    lxv vs0, 16(r3)
1096 ; CHECK-P10-BE-NEXT:    addis r3, r2, GlobSt128@toc@ha
1097 ; CHECK-P10-BE-NEXT:    addi r3, r3, GlobSt128@toc@l
1098 ; CHECK-P10-BE-NEXT:    stxv vs0, 16(r3)
1099 ; CHECK-P10-BE-NEXT:    blr
1101 ; CHECK-PREP10-LABEL: testGlob128PtrPlus16:
1102 ; CHECK-PREP10:       # %bb.0: # %entry
1103 ; CHECK-PREP10-NEXT:    addis r3, r2, GlobLd128@toc@ha
1104 ; CHECK-PREP10-NEXT:    addi r3, r3, GlobLd128@toc@l
1105 ; CHECK-PREP10-NEXT:    lxv vs0, 16(r3)
1106 ; CHECK-PREP10-NEXT:    addis r3, r2, GlobSt128@toc@ha
1107 ; CHECK-PREP10-NEXT:    addi r3, r3, GlobSt128@toc@l
1108 ; CHECK-PREP10-NEXT:    stxv vs0, 16(r3)
1109 ; CHECK-PREP10-NEXT:    blr
1110 entry:
1111   %0 = load fp128, ptr getelementptr inbounds ([20 x fp128], ptr @GlobLd128, i64 0, i64 1), align 16
1112   store fp128 %0, ptr getelementptr inbounds ([20 x fp128], ptr @GlobSt128, i64 0, i64 1), align 16
1113   ret void
1116 ; Function Attrs: nofree norecurse nounwind willreturn
1117 define dso_local void @testGlob128PtrPlusVar(i64 %Idx) {
1118 ; CHECK-P10-LE-LABEL: testGlob128PtrPlusVar:
1119 ; CHECK-P10-LE:       # %bb.0: # %entry
1120 ; CHECK-P10-LE-NEXT:    sldi r3, r3, 4
1121 ; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobLd128@PCREL, 1
1122 ; CHECK-P10-LE-NEXT:    lxvx vs0, r4, r3
1123 ; CHECK-P10-LE-NEXT:    paddi r4, 0, GlobSt128@PCREL, 1
1124 ; CHECK-P10-LE-NEXT:    stxvx vs0, r4, r3
1125 ; CHECK-P10-LE-NEXT:    blr
1127 ; CHECK-P10-BE-LABEL: testGlob128PtrPlusVar:
1128 ; CHECK-P10-BE:       # %bb.0: # %entry
1129 ; CHECK-P10-BE-NEXT:    addis r4, r2, GlobLd128@toc@ha
1130 ; CHECK-P10-BE-NEXT:    sldi r3, r3, 4
1131 ; CHECK-P10-BE-NEXT:    addi r4, r4, GlobLd128@toc@l
1132 ; CHECK-P10-BE-NEXT:    lxvx vs0, r4, r3
1133 ; CHECK-P10-BE-NEXT:    addis r4, r2, GlobSt128@toc@ha
1134 ; CHECK-P10-BE-NEXT:    addi r4, r4, GlobSt128@toc@l
1135 ; CHECK-P10-BE-NEXT:    stxvx vs0, r4, r3
1136 ; CHECK-P10-BE-NEXT:    blr
1138 ; CHECK-PREP10-LABEL: testGlob128PtrPlusVar:
1139 ; CHECK-PREP10:       # %bb.0: # %entry
1140 ; CHECK-PREP10-NEXT:    addis r4, r2, GlobLd128@toc@ha
1141 ; CHECK-PREP10-NEXT:    sldi r3, r3, 4
1142 ; CHECK-PREP10-NEXT:    addi r4, r4, GlobLd128@toc@l
1143 ; CHECK-PREP10-NEXT:    lxvx vs0, r4, r3
1144 ; CHECK-PREP10-NEXT:    addis r4, r2, GlobSt128@toc@ha
1145 ; CHECK-PREP10-NEXT:    addi r4, r4, GlobSt128@toc@l
1146 ; CHECK-PREP10-NEXT:    stxvx vs0, r4, r3
1147 ; CHECK-PREP10-NEXT:    blr
1148 entry:
1149   %arrayidx = getelementptr inbounds [20 x fp128], ptr @GlobLd128, i64 0, i64 %Idx
1150   %0 = load fp128, ptr %arrayidx, align 16
1151   %arrayidx1 = getelementptr inbounds [20 x fp128], ptr @GlobSt128, i64 0, i64 %Idx
1152   store fp128 %0, ptr %arrayidx1, align 16
1153   ret void