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-POSTP8,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-POSTP8,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-POSTP8,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-POSTP8,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 float @ld_0_float_uint8_t(i64 %ptr) {
23 ; CHECK-POSTP8-LABEL: ld_0_float_uint8_t:
24 ; CHECK-POSTP8: # %bb.0: # %entry
25 ; CHECK-POSTP8-NEXT: lxsibzx f0, 0, r3
26 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
27 ; CHECK-POSTP8-NEXT: blr
29 ; CHECK-P8-LABEL: ld_0_float_uint8_t:
30 ; CHECK-P8: # %bb.0: # %entry
31 ; CHECK-P8-NEXT: lbz r3, 0(r3)
32 ; CHECK-P8-NEXT: mtfprwz f0, r3
33 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
36 %0 = inttoptr i64 %ptr to ptr
37 %1 = load i8, ptr %0, align 1
38 %conv = uitofp i8 %1 to float
42 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
43 define dso_local float @ld_align16_float_uint8_t(ptr nocapture readonly %ptr) {
44 ; CHECK-POSTP8-LABEL: ld_align16_float_uint8_t:
45 ; CHECK-POSTP8: # %bb.0: # %entry
46 ; CHECK-POSTP8-NEXT: addi r3, r3, 8
47 ; CHECK-POSTP8-NEXT: lxsibzx f0, 0, r3
48 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
49 ; CHECK-POSTP8-NEXT: blr
51 ; CHECK-P8-LABEL: ld_align16_float_uint8_t:
52 ; CHECK-P8: # %bb.0: # %entry
53 ; CHECK-P8-NEXT: lbz r3, 8(r3)
54 ; CHECK-P8-NEXT: mtfprwz f0, r3
55 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
58 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
59 %0 = load i8, ptr %add.ptr, align 1
60 %conv = uitofp i8 %0 to float
64 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
65 define dso_local float @ld_align32_float_uint8_t(ptr nocapture readonly %ptr) {
66 ; CHECK-P10-LABEL: ld_align32_float_uint8_t:
67 ; CHECK-P10: # %bb.0: # %entry
68 ; CHECK-P10-NEXT: pli r4, 99999000
69 ; CHECK-P10-NEXT: lxsibzx f0, r3, r4
70 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
73 ; CHECK-P9-LABEL: ld_align32_float_uint8_t:
74 ; CHECK-P9: # %bb.0: # %entry
75 ; CHECK-P9-NEXT: lis r4, 1525
76 ; CHECK-P9-NEXT: ori r4, r4, 56600
77 ; CHECK-P9-NEXT: lxsibzx f0, r3, r4
78 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
81 ; CHECK-P8-LABEL: ld_align32_float_uint8_t:
82 ; CHECK-P8: # %bb.0: # %entry
83 ; CHECK-P8-NEXT: lis r4, 1525
84 ; CHECK-P8-NEXT: ori r4, r4, 56600
85 ; CHECK-P8-NEXT: lbzx r3, r3, r4
86 ; CHECK-P8-NEXT: mtfprwz f0, r3
87 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
90 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
91 %0 = load i8, ptr %add.ptr, align 1
92 %conv = uitofp i8 %0 to float
96 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
97 define dso_local float @ld_align64_float_uint8_t(ptr nocapture readonly %ptr) {
98 ; CHECK-P10-LABEL: ld_align64_float_uint8_t:
99 ; CHECK-P10: # %bb.0: # %entry
100 ; CHECK-P10-NEXT: pli r4, 244140625
101 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
102 ; CHECK-P10-NEXT: lxsibzx f0, r3, r4
103 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
104 ; CHECK-P10-NEXT: blr
106 ; CHECK-P9-LABEL: ld_align64_float_uint8_t:
107 ; CHECK-P9: # %bb.0: # %entry
108 ; CHECK-P9-NEXT: lis r4, 3725
109 ; CHECK-P9-NEXT: ori r4, r4, 19025
110 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
111 ; CHECK-P9-NEXT: lxsibzx f0, r3, r4
112 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
115 ; CHECK-P8-LABEL: ld_align64_float_uint8_t:
116 ; CHECK-P8: # %bb.0: # %entry
117 ; CHECK-P8-NEXT: lis r4, 3725
118 ; CHECK-P8-NEXT: ori r4, r4, 19025
119 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
120 ; CHECK-P8-NEXT: lbzx r3, r3, r4
121 ; CHECK-P8-NEXT: mtfprwz f0, r3
122 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
125 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
126 %0 = load i8, ptr %add.ptr, align 1
127 %conv = uitofp i8 %0 to float
131 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
132 define dso_local float @ld_reg_float_uint8_t(ptr nocapture readonly %ptr, i64 %off) {
133 ; CHECK-POSTP8-LABEL: ld_reg_float_uint8_t:
134 ; CHECK-POSTP8: # %bb.0: # %entry
135 ; CHECK-POSTP8-NEXT: lxsibzx f0, r3, r4
136 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
137 ; CHECK-POSTP8-NEXT: blr
139 ; CHECK-P8-LABEL: ld_reg_float_uint8_t:
140 ; CHECK-P8: # %bb.0: # %entry
141 ; CHECK-P8-NEXT: lbzx r3, r3, r4
142 ; CHECK-P8-NEXT: mtfprwz f0, r3
143 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
146 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
147 %0 = load i8, ptr %add.ptr, align 1
148 %conv = uitofp i8 %0 to float
152 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
153 define dso_local float @ld_or_float_uint8_t(i64 %ptr, i8 zeroext %off) {
154 ; CHECK-POSTP8-LABEL: ld_or_float_uint8_t:
155 ; CHECK-POSTP8: # %bb.0: # %entry
156 ; CHECK-POSTP8-NEXT: or r3, r4, r3
157 ; CHECK-POSTP8-NEXT: lxsibzx f0, 0, r3
158 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
159 ; CHECK-POSTP8-NEXT: blr
161 ; CHECK-P8-LABEL: ld_or_float_uint8_t:
162 ; CHECK-P8: # %bb.0: # %entry
163 ; CHECK-P8-NEXT: or r3, r4, r3
164 ; CHECK-P8-NEXT: lbz r3, 0(r3)
165 ; CHECK-P8-NEXT: mtfprwz f0, r3
166 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
169 %conv = zext i8 %off to i64
170 %or = or i64 %conv, %ptr
171 %0 = inttoptr i64 %or to ptr
172 %1 = load i8, ptr %0, align 1
173 %conv1 = uitofp i8 %1 to float
177 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
178 define dso_local float @ld_not_disjoint16_float_uint8_t(i64 %ptr) {
179 ; CHECK-POSTP8-LABEL: ld_not_disjoint16_float_uint8_t:
180 ; CHECK-POSTP8: # %bb.0: # %entry
181 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
182 ; CHECK-POSTP8-NEXT: lxsibzx f0, 0, r3
183 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
184 ; CHECK-POSTP8-NEXT: blr
186 ; CHECK-P8-LABEL: ld_not_disjoint16_float_uint8_t:
187 ; CHECK-P8: # %bb.0: # %entry
188 ; CHECK-P8-NEXT: ori r3, r3, 6
189 ; CHECK-P8-NEXT: lbz r3, 0(r3)
190 ; CHECK-P8-NEXT: mtfprwz f0, r3
191 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
195 %0 = inttoptr i64 %or to ptr
196 %1 = load i8, ptr %0, align 1
197 %conv = uitofp i8 %1 to float
201 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
202 define dso_local float @ld_disjoint_align16_float_uint8_t(i64 %ptr) {
203 ; CHECK-POSTP8-LABEL: ld_disjoint_align16_float_uint8_t:
204 ; CHECK-POSTP8: # %bb.0: # %entry
205 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
206 ; CHECK-POSTP8-NEXT: ori r3, r3, 24
207 ; CHECK-POSTP8-NEXT: lxsibzx f0, 0, r3
208 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
209 ; CHECK-POSTP8-NEXT: blr
211 ; CHECK-P8-LABEL: ld_disjoint_align16_float_uint8_t:
212 ; CHECK-P8: # %bb.0: # %entry
213 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
214 ; CHECK-P8-NEXT: lbz r3, 24(r3)
215 ; CHECK-P8-NEXT: mtfprwz f0, r3
216 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
219 %and = and i64 %ptr, -4096
220 %or = or i64 %and, 24
221 %0 = inttoptr i64 %or to ptr
222 %1 = load i8, ptr %0, align 8
223 %conv = uitofp i8 %1 to float
227 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
228 define dso_local float @ld_not_disjoint32_float_uint8_t(i64 %ptr) {
229 ; CHECK-POSTP8-LABEL: ld_not_disjoint32_float_uint8_t:
230 ; CHECK-POSTP8: # %bb.0: # %entry
231 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
232 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
233 ; CHECK-POSTP8-NEXT: lxsibzx f0, 0, r3
234 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
235 ; CHECK-POSTP8-NEXT: blr
237 ; CHECK-P8-LABEL: ld_not_disjoint32_float_uint8_t:
238 ; CHECK-P8: # %bb.0: # %entry
239 ; CHECK-P8-NEXT: ori r3, r3, 34463
240 ; CHECK-P8-NEXT: oris r3, r3, 1
241 ; CHECK-P8-NEXT: lbz r3, 0(r3)
242 ; CHECK-P8-NEXT: mtfprwz f0, r3
243 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
246 %or = or i64 %ptr, 99999
247 %0 = inttoptr i64 %or to ptr
248 %1 = load i8, ptr %0, align 1
249 %conv = uitofp i8 %1 to float
253 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
254 define dso_local float @ld_disjoint_align32_float_uint8_t(i64 %ptr) {
255 ; CHECK-P10-LABEL: ld_disjoint_align32_float_uint8_t:
256 ; CHECK-P10: # %bb.0: # %entry
257 ; CHECK-P10-NEXT: lis r4, -15264
258 ; CHECK-P10-NEXT: and r3, r3, r4
259 ; CHECK-P10-NEXT: pli r4, 999990000
260 ; CHECK-P10-NEXT: lxsibzx f0, r3, r4
261 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
262 ; CHECK-P10-NEXT: blr
264 ; CHECK-P9-LABEL: ld_disjoint_align32_float_uint8_t:
265 ; CHECK-P9: # %bb.0: # %entry
266 ; CHECK-P9-NEXT: lis r4, -15264
267 ; CHECK-P9-NEXT: and r3, r3, r4
268 ; CHECK-P9-NEXT: lis r4, 15258
269 ; CHECK-P9-NEXT: ori r4, r4, 41712
270 ; CHECK-P9-NEXT: lxsibzx f0, r3, r4
271 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
274 ; CHECK-P8-LABEL: ld_disjoint_align32_float_uint8_t:
275 ; CHECK-P8: # %bb.0: # %entry
276 ; CHECK-P8-NEXT: lis r4, -15264
277 ; CHECK-P8-NEXT: and r3, r3, r4
278 ; CHECK-P8-NEXT: lis r4, 15258
279 ; CHECK-P8-NEXT: ori r4, r4, 41712
280 ; CHECK-P8-NEXT: lbzx r3, r3, r4
281 ; CHECK-P8-NEXT: mtfprwz f0, r3
282 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
285 %and = and i64 %ptr, -1000341504
286 %or = or i64 %and, 999990000
287 %0 = inttoptr i64 %or to ptr
288 %1 = load i8, ptr %0, align 16
289 %conv = uitofp i8 %1 to float
293 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
294 define dso_local float @ld_not_disjoint64_float_uint8_t(i64 %ptr) {
295 ; CHECK-P10-LABEL: ld_not_disjoint64_float_uint8_t:
296 ; CHECK-P10: # %bb.0: # %entry
297 ; CHECK-P10-NEXT: pli r4, 232
298 ; CHECK-P10-NEXT: pli r5, 3567587329
299 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
300 ; CHECK-P10-NEXT: or r3, r3, r5
301 ; CHECK-P10-NEXT: lxsibzx f0, 0, r3
302 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
303 ; CHECK-P10-NEXT: blr
305 ; CHECK-P9-LABEL: ld_not_disjoint64_float_uint8_t:
306 ; CHECK-P9: # %bb.0: # %entry
307 ; CHECK-P9-NEXT: li r4, 29
308 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
309 ; CHECK-P9-NEXT: oris r4, r4, 54437
310 ; CHECK-P9-NEXT: ori r4, r4, 4097
311 ; CHECK-P9-NEXT: or r3, r3, r4
312 ; CHECK-P9-NEXT: lxsibzx f0, 0, r3
313 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
316 ; CHECK-P8-LABEL: ld_not_disjoint64_float_uint8_t:
317 ; CHECK-P8: # %bb.0: # %entry
318 ; CHECK-P8-NEXT: li r4, 29
319 ; CHECK-P8-NEXT: rldic r4, r4, 35, 24
320 ; CHECK-P8-NEXT: oris r4, r4, 54437
321 ; CHECK-P8-NEXT: ori r4, r4, 4097
322 ; CHECK-P8-NEXT: or r3, r3, r4
323 ; CHECK-P8-NEXT: lbz r3, 0(r3)
324 ; CHECK-P8-NEXT: mtfprwz f0, r3
325 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
328 %or = or i64 %ptr, 1000000000001
329 %0 = inttoptr i64 %or to ptr
330 %1 = load i8, ptr %0, align 1
331 %conv = uitofp i8 %1 to float
335 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
336 define dso_local float @ld_disjoint_align64_float_uint8_t(i64 %ptr) {
337 ; CHECK-P10-LABEL: ld_disjoint_align64_float_uint8_t:
338 ; CHECK-P10: # %bb.0: # %entry
339 ; CHECK-P10-NEXT: pli r4, 244140625
340 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
341 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
342 ; CHECK-P10-NEXT: lxsibzx f0, r3, r4
343 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
344 ; CHECK-P10-NEXT: blr
346 ; CHECK-P9-LABEL: ld_disjoint_align64_float_uint8_t:
347 ; CHECK-P9: # %bb.0: # %entry
348 ; CHECK-P9-NEXT: lis r4, 3725
349 ; CHECK-P9-NEXT: rldicr r3, r3, 0, 23
350 ; CHECK-P9-NEXT: ori r4, r4, 19025
351 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
352 ; CHECK-P9-NEXT: lxsibzx f0, r3, r4
353 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
356 ; CHECK-P8-LABEL: ld_disjoint_align64_float_uint8_t:
357 ; CHECK-P8: # %bb.0: # %entry
358 ; CHECK-P8-NEXT: lis r4, 3725
359 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 23
360 ; CHECK-P8-NEXT: ori r4, r4, 19025
361 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
362 ; CHECK-P8-NEXT: lbzx r3, r3, r4
363 ; CHECK-P8-NEXT: mtfprwz f0, r3
364 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
367 %and = and i64 %ptr, -1099511627776
368 %or = or i64 %and, 1000000000000
369 %0 = inttoptr i64 %or to ptr
370 %1 = load i8, ptr %0, align 4096
371 %conv = uitofp i8 %1 to float
375 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
376 define dso_local float @ld_cst_align16_float_uint8_t() {
377 ; CHECK-POSTP8-LABEL: ld_cst_align16_float_uint8_t:
378 ; CHECK-POSTP8: # %bb.0: # %entry
379 ; CHECK-POSTP8-NEXT: li r3, 4080
380 ; CHECK-POSTP8-NEXT: lxsibzx f0, 0, r3
381 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
382 ; CHECK-POSTP8-NEXT: blr
384 ; CHECK-P8-LABEL: ld_cst_align16_float_uint8_t:
385 ; CHECK-P8: # %bb.0: # %entry
386 ; CHECK-P8-NEXT: lbz r3, 4080(0)
387 ; CHECK-P8-NEXT: mtfprwz f0, r3
388 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
391 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16
392 %conv = uitofp i8 %0 to float
396 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
397 define dso_local float @ld_cst_align32_float_uint8_t() {
398 ; CHECK-P10-LABEL: ld_cst_align32_float_uint8_t:
399 ; CHECK-P10: # %bb.0: # %entry
400 ; CHECK-P10-NEXT: pli r3, 9999900
401 ; CHECK-P10-NEXT: lxsibzx f0, 0, r3
402 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
403 ; CHECK-P10-NEXT: blr
405 ; CHECK-P9-LABEL: ld_cst_align32_float_uint8_t:
406 ; CHECK-P9: # %bb.0: # %entry
407 ; CHECK-P9-NEXT: lis r3, 152
408 ; CHECK-P9-NEXT: ori r3, r3, 38428
409 ; CHECK-P9-NEXT: lxsibzx f0, 0, r3
410 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
413 ; CHECK-P8-LABEL: ld_cst_align32_float_uint8_t:
414 ; CHECK-P8: # %bb.0: # %entry
415 ; CHECK-P8-NEXT: lis r3, 153
416 ; CHECK-P8-NEXT: lbz r3, -27108(r3)
417 ; CHECK-P8-NEXT: mtfprwz f0, r3
418 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
421 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4
422 %conv = uitofp i8 %0 to float
426 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
427 define dso_local float @ld_cst_align64_float_uint8_t() {
428 ; CHECK-P10-LABEL: ld_cst_align64_float_uint8_t:
429 ; CHECK-P10: # %bb.0: # %entry
430 ; CHECK-P10-NEXT: pli r3, 244140625
431 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
432 ; CHECK-P10-NEXT: lxsibzx f0, 0, r3
433 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
434 ; CHECK-P10-NEXT: blr
436 ; CHECK-P9-LABEL: ld_cst_align64_float_uint8_t:
437 ; CHECK-P9: # %bb.0: # %entry
438 ; CHECK-P9-NEXT: lis r3, 3725
439 ; CHECK-P9-NEXT: ori r3, r3, 19025
440 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
441 ; CHECK-P9-NEXT: lxsibzx f0, 0, r3
442 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
445 ; CHECK-P8-LABEL: ld_cst_align64_float_uint8_t:
446 ; CHECK-P8: # %bb.0: # %entry
447 ; CHECK-P8-NEXT: lis r3, 3725
448 ; CHECK-P8-NEXT: ori r3, r3, 19025
449 ; CHECK-P8-NEXT: rldic r3, r3, 12, 24
450 ; CHECK-P8-NEXT: lbz r3, 0(r3)
451 ; CHECK-P8-NEXT: mtfprwz f0, r3
452 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
455 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096
456 %conv = uitofp i8 %0 to float
460 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
461 define dso_local float @ld_0_float_int8_t(i64 %ptr) {
462 ; CHECK-POSTP8-LABEL: ld_0_float_int8_t:
463 ; CHECK-POSTP8: # %bb.0: # %entry
464 ; CHECK-POSTP8-NEXT: lxsibzx v2, 0, r3
465 ; CHECK-POSTP8-NEXT: vextsb2d v2, v2
466 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
467 ; CHECK-POSTP8-NEXT: blr
469 ; CHECK-P8-LABEL: ld_0_float_int8_t:
470 ; CHECK-P8: # %bb.0: # %entry
471 ; CHECK-P8-NEXT: lbz r3, 0(r3)
472 ; CHECK-P8-NEXT: extsb r3, r3
473 ; CHECK-P8-NEXT: mtfprwa f0, r3
474 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
477 %0 = inttoptr i64 %ptr to ptr
478 %1 = load i8, ptr %0, align 1
479 %conv = sitofp i8 %1 to float
483 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
484 define dso_local float @ld_align16_float_int8_t(ptr nocapture readonly %ptr) {
485 ; CHECK-POSTP8-LABEL: ld_align16_float_int8_t:
486 ; CHECK-POSTP8: # %bb.0: # %entry
487 ; CHECK-POSTP8-NEXT: addi r3, r3, 8
488 ; CHECK-POSTP8-NEXT: lxsibzx v2, 0, r3
489 ; CHECK-POSTP8-NEXT: vextsb2d v2, v2
490 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
491 ; CHECK-POSTP8-NEXT: blr
493 ; CHECK-P8-LABEL: ld_align16_float_int8_t:
494 ; CHECK-P8: # %bb.0: # %entry
495 ; CHECK-P8-NEXT: lbz r3, 8(r3)
496 ; CHECK-P8-NEXT: extsb r3, r3
497 ; CHECK-P8-NEXT: mtfprwa f0, r3
498 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
501 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
502 %0 = load i8, ptr %add.ptr, align 1
503 %conv = sitofp i8 %0 to float
507 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
508 define dso_local float @ld_align32_float_int8_t(ptr nocapture readonly %ptr) {
509 ; CHECK-P10-LABEL: ld_align32_float_int8_t:
510 ; CHECK-P10: # %bb.0: # %entry
511 ; CHECK-P10-NEXT: pli r4, 99999000
512 ; CHECK-P10-NEXT: lxsibzx v2, r3, r4
513 ; CHECK-P10-NEXT: vextsb2d v2, v2
514 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
515 ; CHECK-P10-NEXT: blr
517 ; CHECK-P9-LABEL: ld_align32_float_int8_t:
518 ; CHECK-P9: # %bb.0: # %entry
519 ; CHECK-P9-NEXT: lis r4, 1525
520 ; CHECK-P9-NEXT: ori r4, r4, 56600
521 ; CHECK-P9-NEXT: lxsibzx v2, r3, r4
522 ; CHECK-P9-NEXT: vextsb2d v2, v2
523 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
526 ; CHECK-P8-LABEL: ld_align32_float_int8_t:
527 ; CHECK-P8: # %bb.0: # %entry
528 ; CHECK-P8-NEXT: lis r4, 1525
529 ; CHECK-P8-NEXT: ori r4, r4, 56600
530 ; CHECK-P8-NEXT: lbzx r3, r3, r4
531 ; CHECK-P8-NEXT: extsb r3, r3
532 ; CHECK-P8-NEXT: mtfprwa f0, r3
533 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
536 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
537 %0 = load i8, ptr %add.ptr, align 1
538 %conv = sitofp i8 %0 to float
542 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
543 define dso_local float @ld_align64_float_int8_t(ptr nocapture readonly %ptr) {
544 ; CHECK-P10-LABEL: ld_align64_float_int8_t:
545 ; CHECK-P10: # %bb.0: # %entry
546 ; CHECK-P10-NEXT: pli r4, 244140625
547 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
548 ; CHECK-P10-NEXT: lxsibzx v2, r3, r4
549 ; CHECK-P10-NEXT: vextsb2d v2, v2
550 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
551 ; CHECK-P10-NEXT: blr
553 ; CHECK-P9-LABEL: ld_align64_float_int8_t:
554 ; CHECK-P9: # %bb.0: # %entry
555 ; CHECK-P9-NEXT: lis r4, 3725
556 ; CHECK-P9-NEXT: ori r4, r4, 19025
557 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
558 ; CHECK-P9-NEXT: lxsibzx v2, r3, r4
559 ; CHECK-P9-NEXT: vextsb2d v2, v2
560 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
563 ; CHECK-P8-LABEL: ld_align64_float_int8_t:
564 ; CHECK-P8: # %bb.0: # %entry
565 ; CHECK-P8-NEXT: lis r4, 3725
566 ; CHECK-P8-NEXT: ori r4, r4, 19025
567 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
568 ; CHECK-P8-NEXT: lbzx r3, r3, r4
569 ; CHECK-P8-NEXT: extsb r3, r3
570 ; CHECK-P8-NEXT: mtfprwa f0, r3
571 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
574 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
575 %0 = load i8, ptr %add.ptr, align 1
576 %conv = sitofp i8 %0 to float
580 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
581 define dso_local float @ld_reg_float_int8_t(ptr nocapture readonly %ptr, i64 %off) {
582 ; CHECK-POSTP8-LABEL: ld_reg_float_int8_t:
583 ; CHECK-POSTP8: # %bb.0: # %entry
584 ; CHECK-POSTP8-NEXT: lxsibzx v2, r3, r4
585 ; CHECK-POSTP8-NEXT: vextsb2d v2, v2
586 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
587 ; CHECK-POSTP8-NEXT: blr
589 ; CHECK-P8-LABEL: ld_reg_float_int8_t:
590 ; CHECK-P8: # %bb.0: # %entry
591 ; CHECK-P8-NEXT: lbzx r3, r3, r4
592 ; CHECK-P8-NEXT: extsb r3, r3
593 ; CHECK-P8-NEXT: mtfprwa f0, r3
594 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
597 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
598 %0 = load i8, ptr %add.ptr, align 1
599 %conv = sitofp i8 %0 to float
603 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
604 define dso_local float @ld_or_float_int8_t(i64 %ptr, i8 zeroext %off) {
605 ; CHECK-POSTP8-LABEL: ld_or_float_int8_t:
606 ; CHECK-POSTP8: # %bb.0: # %entry
607 ; CHECK-POSTP8-NEXT: or r3, r4, r3
608 ; CHECK-POSTP8-NEXT: lxsibzx v2, 0, r3
609 ; CHECK-POSTP8-NEXT: vextsb2d v2, v2
610 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
611 ; CHECK-POSTP8-NEXT: blr
613 ; CHECK-P8-LABEL: ld_or_float_int8_t:
614 ; CHECK-P8: # %bb.0: # %entry
615 ; CHECK-P8-NEXT: or r3, r4, r3
616 ; CHECK-P8-NEXT: lbz r3, 0(r3)
617 ; CHECK-P8-NEXT: extsb r3, r3
618 ; CHECK-P8-NEXT: mtfprwa f0, r3
619 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
622 %conv = zext i8 %off to i64
623 %or = or i64 %conv, %ptr
624 %0 = inttoptr i64 %or to ptr
625 %1 = load i8, ptr %0, align 1
626 %conv1 = sitofp i8 %1 to float
630 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
631 define dso_local float @ld_not_disjoint16_float_int8_t(i64 %ptr) {
632 ; CHECK-POSTP8-LABEL: ld_not_disjoint16_float_int8_t:
633 ; CHECK-POSTP8: # %bb.0: # %entry
634 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
635 ; CHECK-POSTP8-NEXT: lxsibzx v2, 0, r3
636 ; CHECK-POSTP8-NEXT: vextsb2d v2, v2
637 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
638 ; CHECK-POSTP8-NEXT: blr
640 ; CHECK-P8-LABEL: ld_not_disjoint16_float_int8_t:
641 ; CHECK-P8: # %bb.0: # %entry
642 ; CHECK-P8-NEXT: ori r3, r3, 6
643 ; CHECK-P8-NEXT: lbz r3, 0(r3)
644 ; CHECK-P8-NEXT: extsb r3, r3
645 ; CHECK-P8-NEXT: mtfprwa f0, r3
646 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
650 %0 = inttoptr i64 %or to ptr
651 %1 = load i8, ptr %0, align 1
652 %conv = sitofp i8 %1 to float
656 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
657 define dso_local float @ld_disjoint_align16_float_int8_t(i64 %ptr) {
658 ; CHECK-POSTP8-LABEL: ld_disjoint_align16_float_int8_t:
659 ; CHECK-POSTP8: # %bb.0: # %entry
660 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
661 ; CHECK-POSTP8-NEXT: ori r3, r3, 24
662 ; CHECK-POSTP8-NEXT: lxsibzx v2, 0, r3
663 ; CHECK-POSTP8-NEXT: vextsb2d v2, v2
664 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
665 ; CHECK-POSTP8-NEXT: blr
667 ; CHECK-P8-LABEL: ld_disjoint_align16_float_int8_t:
668 ; CHECK-P8: # %bb.0: # %entry
669 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
670 ; CHECK-P8-NEXT: lbz r3, 24(r3)
671 ; CHECK-P8-NEXT: extsb r3, r3
672 ; CHECK-P8-NEXT: mtfprwa f0, r3
673 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
676 %and = and i64 %ptr, -4096
677 %or = or i64 %and, 24
678 %0 = inttoptr i64 %or to ptr
679 %1 = load i8, ptr %0, align 8
680 %conv = sitofp i8 %1 to float
684 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
685 define dso_local float @ld_not_disjoint32_float_int8_t(i64 %ptr) {
686 ; CHECK-POSTP8-LABEL: ld_not_disjoint32_float_int8_t:
687 ; CHECK-POSTP8: # %bb.0: # %entry
688 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
689 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
690 ; CHECK-POSTP8-NEXT: lxsibzx v2, 0, r3
691 ; CHECK-POSTP8-NEXT: vextsb2d v2, v2
692 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
693 ; CHECK-POSTP8-NEXT: blr
695 ; CHECK-P8-LABEL: ld_not_disjoint32_float_int8_t:
696 ; CHECK-P8: # %bb.0: # %entry
697 ; CHECK-P8-NEXT: ori r3, r3, 34463
698 ; CHECK-P8-NEXT: oris r3, r3, 1
699 ; CHECK-P8-NEXT: lbz r3, 0(r3)
700 ; CHECK-P8-NEXT: extsb r3, r3
701 ; CHECK-P8-NEXT: mtfprwa f0, r3
702 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
705 %or = or i64 %ptr, 99999
706 %0 = inttoptr i64 %or to ptr
707 %1 = load i8, ptr %0, align 1
708 %conv = sitofp i8 %1 to float
712 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
713 define dso_local float @ld_disjoint_align32_float_int8_t(i64 %ptr) {
714 ; CHECK-P10-LABEL: ld_disjoint_align32_float_int8_t:
715 ; CHECK-P10: # %bb.0: # %entry
716 ; CHECK-P10-NEXT: lis r4, -15264
717 ; CHECK-P10-NEXT: and r3, r3, r4
718 ; CHECK-P10-NEXT: pli r4, 999990000
719 ; CHECK-P10-NEXT: lxsibzx v2, r3, r4
720 ; CHECK-P10-NEXT: vextsb2d v2, v2
721 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
722 ; CHECK-P10-NEXT: blr
724 ; CHECK-P9-LABEL: ld_disjoint_align32_float_int8_t:
725 ; CHECK-P9: # %bb.0: # %entry
726 ; CHECK-P9-NEXT: lis r4, -15264
727 ; CHECK-P9-NEXT: and r3, r3, r4
728 ; CHECK-P9-NEXT: lis r4, 15258
729 ; CHECK-P9-NEXT: ori r4, r4, 41712
730 ; CHECK-P9-NEXT: lxsibzx v2, r3, r4
731 ; CHECK-P9-NEXT: vextsb2d v2, v2
732 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
735 ; CHECK-P8-LABEL: ld_disjoint_align32_float_int8_t:
736 ; CHECK-P8: # %bb.0: # %entry
737 ; CHECK-P8-NEXT: lis r4, -15264
738 ; CHECK-P8-NEXT: and r3, r3, r4
739 ; CHECK-P8-NEXT: lis r4, 15258
740 ; CHECK-P8-NEXT: ori r4, r4, 41712
741 ; CHECK-P8-NEXT: lbzx r3, r3, r4
742 ; CHECK-P8-NEXT: extsb r3, r3
743 ; CHECK-P8-NEXT: mtfprwa f0, r3
744 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
747 %and = and i64 %ptr, -1000341504
748 %or = or i64 %and, 999990000
749 %0 = inttoptr i64 %or to ptr
750 %1 = load i8, ptr %0, align 16
751 %conv = sitofp i8 %1 to float
755 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
756 define dso_local float @ld_not_disjoint64_float_int8_t(i64 %ptr) {
757 ; CHECK-P10-LABEL: ld_not_disjoint64_float_int8_t:
758 ; CHECK-P10: # %bb.0: # %entry
759 ; CHECK-P10-NEXT: pli r4, 232
760 ; CHECK-P10-NEXT: pli r5, 3567587329
761 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
762 ; CHECK-P10-NEXT: or r3, r3, r5
763 ; CHECK-P10-NEXT: lxsibzx v2, 0, r3
764 ; CHECK-P10-NEXT: vextsb2d v2, v2
765 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
766 ; CHECK-P10-NEXT: blr
768 ; CHECK-P9-LABEL: ld_not_disjoint64_float_int8_t:
769 ; CHECK-P9: # %bb.0: # %entry
770 ; CHECK-P9-NEXT: li r4, 29
771 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
772 ; CHECK-P9-NEXT: oris r4, r4, 54437
773 ; CHECK-P9-NEXT: ori r4, r4, 4097
774 ; CHECK-P9-NEXT: or r3, r3, r4
775 ; CHECK-P9-NEXT: lxsibzx v2, 0, r3
776 ; CHECK-P9-NEXT: vextsb2d v2, v2
777 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
780 ; CHECK-P8-LABEL: ld_not_disjoint64_float_int8_t:
781 ; CHECK-P8: # %bb.0: # %entry
782 ; CHECK-P8-NEXT: li r4, 29
783 ; CHECK-P8-NEXT: rldic r4, r4, 35, 24
784 ; CHECK-P8-NEXT: oris r4, r4, 54437
785 ; CHECK-P8-NEXT: ori r4, r4, 4097
786 ; CHECK-P8-NEXT: or r3, r3, r4
787 ; CHECK-P8-NEXT: lbz r3, 0(r3)
788 ; CHECK-P8-NEXT: extsb r3, r3
789 ; CHECK-P8-NEXT: mtfprwa f0, r3
790 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
793 %or = or i64 %ptr, 1000000000001
794 %0 = inttoptr i64 %or to ptr
795 %1 = load i8, ptr %0, align 1
796 %conv = sitofp i8 %1 to float
800 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
801 define dso_local float @ld_disjoint_align64_float_int8_t(i64 %ptr) {
802 ; CHECK-P10-LABEL: ld_disjoint_align64_float_int8_t:
803 ; CHECK-P10: # %bb.0: # %entry
804 ; CHECK-P10-NEXT: pli r4, 244140625
805 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
806 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
807 ; CHECK-P10-NEXT: lxsibzx v2, r3, r4
808 ; CHECK-P10-NEXT: vextsb2d v2, v2
809 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
810 ; CHECK-P10-NEXT: blr
812 ; CHECK-P9-LABEL: ld_disjoint_align64_float_int8_t:
813 ; CHECK-P9: # %bb.0: # %entry
814 ; CHECK-P9-NEXT: lis r4, 3725
815 ; CHECK-P9-NEXT: rldicr r3, r3, 0, 23
816 ; CHECK-P9-NEXT: ori r4, r4, 19025
817 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
818 ; CHECK-P9-NEXT: lxsibzx v2, r3, r4
819 ; CHECK-P9-NEXT: vextsb2d v2, v2
820 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
823 ; CHECK-P8-LABEL: ld_disjoint_align64_float_int8_t:
824 ; CHECK-P8: # %bb.0: # %entry
825 ; CHECK-P8-NEXT: lis r4, 3725
826 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 23
827 ; CHECK-P8-NEXT: ori r4, r4, 19025
828 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
829 ; CHECK-P8-NEXT: lbzx r3, r3, r4
830 ; CHECK-P8-NEXT: extsb r3, r3
831 ; CHECK-P8-NEXT: mtfprwa f0, r3
832 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
835 %and = and i64 %ptr, -1099511627776
836 %or = or i64 %and, 1000000000000
837 %0 = inttoptr i64 %or to ptr
838 %1 = load i8, ptr %0, align 4096
839 %conv = sitofp i8 %1 to float
843 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
844 define dso_local float @ld_cst_align16_float_int8_t() {
845 ; CHECK-POSTP8-LABEL: ld_cst_align16_float_int8_t:
846 ; CHECK-POSTP8: # %bb.0: # %entry
847 ; CHECK-POSTP8-NEXT: li r3, 4080
848 ; CHECK-POSTP8-NEXT: lxsibzx v2, 0, r3
849 ; CHECK-POSTP8-NEXT: vextsb2d v2, v2
850 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
851 ; CHECK-POSTP8-NEXT: blr
853 ; CHECK-P8-LABEL: ld_cst_align16_float_int8_t:
854 ; CHECK-P8: # %bb.0: # %entry
855 ; CHECK-P8-NEXT: lbz r3, 4080(0)
856 ; CHECK-P8-NEXT: extsb r3, r3
857 ; CHECK-P8-NEXT: mtfprwa f0, r3
858 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
861 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16
862 %conv = sitofp i8 %0 to float
866 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
867 define dso_local float @ld_cst_align32_float_int8_t() {
868 ; CHECK-P10-LABEL: ld_cst_align32_float_int8_t:
869 ; CHECK-P10: # %bb.0: # %entry
870 ; CHECK-P10-NEXT: pli r3, 9999900
871 ; CHECK-P10-NEXT: lxsibzx v2, 0, r3
872 ; CHECK-P10-NEXT: vextsb2d v2, v2
873 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
874 ; CHECK-P10-NEXT: blr
876 ; CHECK-P9-LABEL: ld_cst_align32_float_int8_t:
877 ; CHECK-P9: # %bb.0: # %entry
878 ; CHECK-P9-NEXT: lis r3, 152
879 ; CHECK-P9-NEXT: ori r3, r3, 38428
880 ; CHECK-P9-NEXT: lxsibzx v2, 0, r3
881 ; CHECK-P9-NEXT: vextsb2d v2, v2
882 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
885 ; CHECK-P8-LABEL: ld_cst_align32_float_int8_t:
886 ; CHECK-P8: # %bb.0: # %entry
887 ; CHECK-P8-NEXT: lis r3, 153
888 ; CHECK-P8-NEXT: lbz r3, -27108(r3)
889 ; CHECK-P8-NEXT: extsb r3, r3
890 ; CHECK-P8-NEXT: mtfprwa f0, r3
891 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
894 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4
895 %conv = sitofp i8 %0 to float
899 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
900 define dso_local float @ld_cst_align64_float_int8_t() {
901 ; CHECK-P10-LABEL: ld_cst_align64_float_int8_t:
902 ; CHECK-P10: # %bb.0: # %entry
903 ; CHECK-P10-NEXT: pli r3, 244140625
904 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
905 ; CHECK-P10-NEXT: lxsibzx v2, 0, r3
906 ; CHECK-P10-NEXT: vextsb2d v2, v2
907 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
908 ; CHECK-P10-NEXT: blr
910 ; CHECK-P9-LABEL: ld_cst_align64_float_int8_t:
911 ; CHECK-P9: # %bb.0: # %entry
912 ; CHECK-P9-NEXT: lis r3, 3725
913 ; CHECK-P9-NEXT: ori r3, r3, 19025
914 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
915 ; CHECK-P9-NEXT: lxsibzx v2, 0, r3
916 ; CHECK-P9-NEXT: vextsb2d v2, v2
917 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
920 ; CHECK-P8-LABEL: ld_cst_align64_float_int8_t:
921 ; CHECK-P8: # %bb.0: # %entry
922 ; CHECK-P8-NEXT: lis r3, 3725
923 ; CHECK-P8-NEXT: ori r3, r3, 19025
924 ; CHECK-P8-NEXT: rldic r3, r3, 12, 24
925 ; CHECK-P8-NEXT: lbz r3, 0(r3)
926 ; CHECK-P8-NEXT: extsb r3, r3
927 ; CHECK-P8-NEXT: mtfprwa f0, r3
928 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
931 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096
932 %conv = sitofp i8 %0 to float
936 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
937 define dso_local float @ld_0_float_uint16_t(i64 %ptr) {
938 ; CHECK-POSTP8-LABEL: ld_0_float_uint16_t:
939 ; CHECK-POSTP8: # %bb.0: # %entry
940 ; CHECK-POSTP8-NEXT: lxsihzx f0, 0, r3
941 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
942 ; CHECK-POSTP8-NEXT: blr
944 ; CHECK-P8-LABEL: ld_0_float_uint16_t:
945 ; CHECK-P8: # %bb.0: # %entry
946 ; CHECK-P8-NEXT: lhz r3, 0(r3)
947 ; CHECK-P8-NEXT: mtfprwz f0, r3
948 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
951 %0 = inttoptr i64 %ptr to ptr
952 %1 = load i16, ptr %0, align 2
953 %conv = uitofp i16 %1 to float
957 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
958 define dso_local float @ld_align16_float_uint16_t(ptr nocapture readonly %ptr) {
959 ; CHECK-POSTP8-LABEL: ld_align16_float_uint16_t:
960 ; CHECK-POSTP8: # %bb.0: # %entry
961 ; CHECK-POSTP8-NEXT: addi r3, r3, 8
962 ; CHECK-POSTP8-NEXT: lxsihzx f0, 0, r3
963 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
964 ; CHECK-POSTP8-NEXT: blr
966 ; CHECK-P8-LABEL: ld_align16_float_uint16_t:
967 ; CHECK-P8: # %bb.0: # %entry
968 ; CHECK-P8-NEXT: lhz r3, 8(r3)
969 ; CHECK-P8-NEXT: mtfprwz f0, r3
970 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
973 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
974 %0 = load i16, ptr %add.ptr, align 2
975 %conv = uitofp i16 %0 to float
979 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
980 define dso_local float @ld_align32_float_uint16_t(ptr nocapture readonly %ptr) {
981 ; CHECK-P10-LABEL: ld_align32_float_uint16_t:
982 ; CHECK-P10: # %bb.0: # %entry
983 ; CHECK-P10-NEXT: pli r4, 99999000
984 ; CHECK-P10-NEXT: lxsihzx f0, r3, r4
985 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
986 ; CHECK-P10-NEXT: blr
988 ; CHECK-P9-LABEL: ld_align32_float_uint16_t:
989 ; CHECK-P9: # %bb.0: # %entry
990 ; CHECK-P9-NEXT: lis r4, 1525
991 ; CHECK-P9-NEXT: ori r4, r4, 56600
992 ; CHECK-P9-NEXT: lxsihzx f0, r3, r4
993 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
996 ; CHECK-P8-LABEL: ld_align32_float_uint16_t:
997 ; CHECK-P8: # %bb.0: # %entry
998 ; CHECK-P8-NEXT: lis r4, 1525
999 ; CHECK-P8-NEXT: ori r4, r4, 56600
1000 ; CHECK-P8-NEXT: lhzx r3, r3, r4
1001 ; CHECK-P8-NEXT: mtfprwz f0, r3
1002 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1003 ; CHECK-P8-NEXT: blr
1005 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
1006 %0 = load i16, ptr %add.ptr, align 2
1007 %conv = uitofp i16 %0 to float
1011 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1012 define dso_local float @ld_align64_float_uint16_t(ptr nocapture readonly %ptr) {
1013 ; CHECK-P10-LABEL: ld_align64_float_uint16_t:
1014 ; CHECK-P10: # %bb.0: # %entry
1015 ; CHECK-P10-NEXT: pli r4, 244140625
1016 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
1017 ; CHECK-P10-NEXT: lxsihzx f0, r3, r4
1018 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
1019 ; CHECK-P10-NEXT: blr
1021 ; CHECK-P9-LABEL: ld_align64_float_uint16_t:
1022 ; CHECK-P9: # %bb.0: # %entry
1023 ; CHECK-P9-NEXT: lis r4, 3725
1024 ; CHECK-P9-NEXT: ori r4, r4, 19025
1025 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
1026 ; CHECK-P9-NEXT: lxsihzx f0, r3, r4
1027 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
1028 ; CHECK-P9-NEXT: blr
1030 ; CHECK-P8-LABEL: ld_align64_float_uint16_t:
1031 ; CHECK-P8: # %bb.0: # %entry
1032 ; CHECK-P8-NEXT: lis r4, 3725
1033 ; CHECK-P8-NEXT: ori r4, r4, 19025
1034 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
1035 ; CHECK-P8-NEXT: lhzx r3, r3, r4
1036 ; CHECK-P8-NEXT: mtfprwz f0, r3
1037 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1038 ; CHECK-P8-NEXT: blr
1040 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
1041 %0 = load i16, ptr %add.ptr, align 2
1042 %conv = uitofp i16 %0 to float
1046 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1047 define dso_local float @ld_reg_float_uint16_t(ptr nocapture readonly %ptr, i64 %off) {
1048 ; CHECK-POSTP8-LABEL: ld_reg_float_uint16_t:
1049 ; CHECK-POSTP8: # %bb.0: # %entry
1050 ; CHECK-POSTP8-NEXT: lxsihzx f0, r3, r4
1051 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
1052 ; CHECK-POSTP8-NEXT: blr
1054 ; CHECK-P8-LABEL: ld_reg_float_uint16_t:
1055 ; CHECK-P8: # %bb.0: # %entry
1056 ; CHECK-P8-NEXT: lhzx r3, r3, r4
1057 ; CHECK-P8-NEXT: mtfprwz f0, r3
1058 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1059 ; CHECK-P8-NEXT: blr
1061 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
1062 %0 = load i16, ptr %add.ptr, align 2
1063 %conv = uitofp i16 %0 to float
1067 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1068 define dso_local float @ld_or_float_uint16_t(i64 %ptr, i8 zeroext %off) {
1069 ; CHECK-POSTP8-LABEL: ld_or_float_uint16_t:
1070 ; CHECK-POSTP8: # %bb.0: # %entry
1071 ; CHECK-POSTP8-NEXT: or r3, r4, r3
1072 ; CHECK-POSTP8-NEXT: lxsihzx f0, 0, r3
1073 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
1074 ; CHECK-POSTP8-NEXT: blr
1076 ; CHECK-P8-LABEL: ld_or_float_uint16_t:
1077 ; CHECK-P8: # %bb.0: # %entry
1078 ; CHECK-P8-NEXT: or r3, r4, r3
1079 ; CHECK-P8-NEXT: lhz r3, 0(r3)
1080 ; CHECK-P8-NEXT: mtfprwz f0, r3
1081 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1082 ; CHECK-P8-NEXT: blr
1084 %conv = zext i8 %off to i64
1085 %or = or i64 %conv, %ptr
1086 %0 = inttoptr i64 %or to ptr
1087 %1 = load i16, ptr %0, align 2
1088 %conv1 = uitofp i16 %1 to float
1092 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1093 define dso_local float @ld_not_disjoint16_float_uint16_t(i64 %ptr) {
1094 ; CHECK-POSTP8-LABEL: ld_not_disjoint16_float_uint16_t:
1095 ; CHECK-POSTP8: # %bb.0: # %entry
1096 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
1097 ; CHECK-POSTP8-NEXT: lxsihzx f0, 0, r3
1098 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
1099 ; CHECK-POSTP8-NEXT: blr
1101 ; CHECK-P8-LABEL: ld_not_disjoint16_float_uint16_t:
1102 ; CHECK-P8: # %bb.0: # %entry
1103 ; CHECK-P8-NEXT: ori r3, r3, 6
1104 ; CHECK-P8-NEXT: lhz r3, 0(r3)
1105 ; CHECK-P8-NEXT: mtfprwz f0, r3
1106 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1107 ; CHECK-P8-NEXT: blr
1109 %or = or i64 %ptr, 6
1110 %0 = inttoptr i64 %or to ptr
1111 %1 = load i16, ptr %0, align 2
1112 %conv = uitofp i16 %1 to float
1116 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1117 define dso_local float @ld_disjoint_align16_float_uint16_t(i64 %ptr) {
1118 ; CHECK-POSTP8-LABEL: ld_disjoint_align16_float_uint16_t:
1119 ; CHECK-POSTP8: # %bb.0: # %entry
1120 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
1121 ; CHECK-POSTP8-NEXT: ori r3, r3, 24
1122 ; CHECK-POSTP8-NEXT: lxsihzx f0, 0, r3
1123 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
1124 ; CHECK-POSTP8-NEXT: blr
1126 ; CHECK-P8-LABEL: ld_disjoint_align16_float_uint16_t:
1127 ; CHECK-P8: # %bb.0: # %entry
1128 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
1129 ; CHECK-P8-NEXT: lhz r3, 24(r3)
1130 ; CHECK-P8-NEXT: mtfprwz f0, r3
1131 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1132 ; CHECK-P8-NEXT: blr
1134 %and = and i64 %ptr, -4096
1135 %or = or i64 %and, 24
1136 %0 = inttoptr i64 %or to ptr
1137 %1 = load i16, ptr %0, align 8
1138 %conv = uitofp i16 %1 to float
1142 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1143 define dso_local float @ld_not_disjoint32_float_uint16_t(i64 %ptr) {
1144 ; CHECK-POSTP8-LABEL: ld_not_disjoint32_float_uint16_t:
1145 ; CHECK-POSTP8: # %bb.0: # %entry
1146 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
1147 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
1148 ; CHECK-POSTP8-NEXT: lxsihzx f0, 0, r3
1149 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
1150 ; CHECK-POSTP8-NEXT: blr
1152 ; CHECK-P8-LABEL: ld_not_disjoint32_float_uint16_t:
1153 ; CHECK-P8: # %bb.0: # %entry
1154 ; CHECK-P8-NEXT: ori r3, r3, 34463
1155 ; CHECK-P8-NEXT: oris r3, r3, 1
1156 ; CHECK-P8-NEXT: lhz r3, 0(r3)
1157 ; CHECK-P8-NEXT: mtfprwz f0, r3
1158 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1159 ; CHECK-P8-NEXT: blr
1161 %or = or i64 %ptr, 99999
1162 %0 = inttoptr i64 %or to ptr
1163 %1 = load i16, ptr %0, align 2
1164 %conv = uitofp i16 %1 to float
1168 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1169 define dso_local float @ld_disjoint_align32_float_uint16_t(i64 %ptr) {
1170 ; CHECK-P10-LABEL: ld_disjoint_align32_float_uint16_t:
1171 ; CHECK-P10: # %bb.0: # %entry
1172 ; CHECK-P10-NEXT: lis r4, -15264
1173 ; CHECK-P10-NEXT: and r3, r3, r4
1174 ; CHECK-P10-NEXT: pli r4, 999990000
1175 ; CHECK-P10-NEXT: lxsihzx f0, r3, r4
1176 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
1177 ; CHECK-P10-NEXT: blr
1179 ; CHECK-P9-LABEL: ld_disjoint_align32_float_uint16_t:
1180 ; CHECK-P9: # %bb.0: # %entry
1181 ; CHECK-P9-NEXT: lis r4, -15264
1182 ; CHECK-P9-NEXT: and r3, r3, r4
1183 ; CHECK-P9-NEXT: lis r4, 15258
1184 ; CHECK-P9-NEXT: ori r4, r4, 41712
1185 ; CHECK-P9-NEXT: lxsihzx f0, r3, r4
1186 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
1187 ; CHECK-P9-NEXT: blr
1189 ; CHECK-P8-LABEL: ld_disjoint_align32_float_uint16_t:
1190 ; CHECK-P8: # %bb.0: # %entry
1191 ; CHECK-P8-NEXT: lis r4, -15264
1192 ; CHECK-P8-NEXT: and r3, r3, r4
1193 ; CHECK-P8-NEXT: lis r4, 15258
1194 ; CHECK-P8-NEXT: ori r4, r4, 41712
1195 ; CHECK-P8-NEXT: lhzx r3, r3, r4
1196 ; CHECK-P8-NEXT: mtfprwz f0, r3
1197 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1198 ; CHECK-P8-NEXT: blr
1200 %and = and i64 %ptr, -1000341504
1201 %or = or i64 %and, 999990000
1202 %0 = inttoptr i64 %or to ptr
1203 %1 = load i16, ptr %0, align 16
1204 %conv = uitofp i16 %1 to float
1208 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1209 define dso_local float @ld_not_disjoint64_float_uint16_t(i64 %ptr) {
1210 ; CHECK-P10-LABEL: ld_not_disjoint64_float_uint16_t:
1211 ; CHECK-P10: # %bb.0: # %entry
1212 ; CHECK-P10-NEXT: pli r4, 232
1213 ; CHECK-P10-NEXT: pli r5, 3567587329
1214 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
1215 ; CHECK-P10-NEXT: or r3, r3, r5
1216 ; CHECK-P10-NEXT: lxsihzx f0, 0, r3
1217 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
1218 ; CHECK-P10-NEXT: blr
1220 ; CHECK-P9-LABEL: ld_not_disjoint64_float_uint16_t:
1221 ; CHECK-P9: # %bb.0: # %entry
1222 ; CHECK-P9-NEXT: li r4, 29
1223 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
1224 ; CHECK-P9-NEXT: oris r4, r4, 54437
1225 ; CHECK-P9-NEXT: ori r4, r4, 4097
1226 ; CHECK-P9-NEXT: or r3, r3, r4
1227 ; CHECK-P9-NEXT: lxsihzx f0, 0, r3
1228 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
1229 ; CHECK-P9-NEXT: blr
1231 ; CHECK-P8-LABEL: ld_not_disjoint64_float_uint16_t:
1232 ; CHECK-P8: # %bb.0: # %entry
1233 ; CHECK-P8-NEXT: li r4, 29
1234 ; CHECK-P8-NEXT: rldic r4, r4, 35, 24
1235 ; CHECK-P8-NEXT: oris r4, r4, 54437
1236 ; CHECK-P8-NEXT: ori r4, r4, 4097
1237 ; CHECK-P8-NEXT: or r3, r3, r4
1238 ; CHECK-P8-NEXT: lhz r3, 0(r3)
1239 ; CHECK-P8-NEXT: mtfprwz f0, r3
1240 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1241 ; CHECK-P8-NEXT: blr
1243 %or = or i64 %ptr, 1000000000001
1244 %0 = inttoptr i64 %or to ptr
1245 %1 = load i16, ptr %0, align 2
1246 %conv = uitofp i16 %1 to float
1250 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1251 define dso_local float @ld_disjoint_align64_float_uint16_t(i64 %ptr) {
1252 ; CHECK-P10-LABEL: ld_disjoint_align64_float_uint16_t:
1253 ; CHECK-P10: # %bb.0: # %entry
1254 ; CHECK-P10-NEXT: pli r4, 244140625
1255 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
1256 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
1257 ; CHECK-P10-NEXT: lxsihzx f0, r3, r4
1258 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
1259 ; CHECK-P10-NEXT: blr
1261 ; CHECK-P9-LABEL: ld_disjoint_align64_float_uint16_t:
1262 ; CHECK-P9: # %bb.0: # %entry
1263 ; CHECK-P9-NEXT: lis r4, 3725
1264 ; CHECK-P9-NEXT: rldicr r3, r3, 0, 23
1265 ; CHECK-P9-NEXT: ori r4, r4, 19025
1266 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
1267 ; CHECK-P9-NEXT: lxsihzx f0, r3, r4
1268 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
1269 ; CHECK-P9-NEXT: blr
1271 ; CHECK-P8-LABEL: ld_disjoint_align64_float_uint16_t:
1272 ; CHECK-P8: # %bb.0: # %entry
1273 ; CHECK-P8-NEXT: lis r4, 3725
1274 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 23
1275 ; CHECK-P8-NEXT: ori r4, r4, 19025
1276 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
1277 ; CHECK-P8-NEXT: lhzx r3, r3, r4
1278 ; CHECK-P8-NEXT: mtfprwz f0, r3
1279 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1280 ; CHECK-P8-NEXT: blr
1282 %and = and i64 %ptr, -1099511627776
1283 %or = or i64 %and, 1000000000000
1284 %0 = inttoptr i64 %or to ptr
1285 %1 = load i16, ptr %0, align 4096
1286 %conv = uitofp i16 %1 to float
1290 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1291 define dso_local float @ld_cst_align16_float_uint16_t() {
1292 ; CHECK-POSTP8-LABEL: ld_cst_align16_float_uint16_t:
1293 ; CHECK-POSTP8: # %bb.0: # %entry
1294 ; CHECK-POSTP8-NEXT: li r3, 4080
1295 ; CHECK-POSTP8-NEXT: lxsihzx f0, 0, r3
1296 ; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0
1297 ; CHECK-POSTP8-NEXT: blr
1299 ; CHECK-P8-LABEL: ld_cst_align16_float_uint16_t:
1300 ; CHECK-P8: # %bb.0: # %entry
1301 ; CHECK-P8-NEXT: lhz r3, 4080(0)
1302 ; CHECK-P8-NEXT: mtfprwz f0, r3
1303 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1304 ; CHECK-P8-NEXT: blr
1306 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 16
1307 %conv = uitofp i16 %0 to float
1311 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1312 define dso_local float @ld_cst_align32_float_uint16_t() {
1313 ; CHECK-P10-LABEL: ld_cst_align32_float_uint16_t:
1314 ; CHECK-P10: # %bb.0: # %entry
1315 ; CHECK-P10-NEXT: pli r3, 9999900
1316 ; CHECK-P10-NEXT: lxsihzx f0, 0, r3
1317 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
1318 ; CHECK-P10-NEXT: blr
1320 ; CHECK-P9-LABEL: ld_cst_align32_float_uint16_t:
1321 ; CHECK-P9: # %bb.0: # %entry
1322 ; CHECK-P9-NEXT: lis r3, 152
1323 ; CHECK-P9-NEXT: ori r3, r3, 38428
1324 ; CHECK-P9-NEXT: lxsihzx f0, 0, r3
1325 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
1326 ; CHECK-P9-NEXT: blr
1328 ; CHECK-P8-LABEL: ld_cst_align32_float_uint16_t:
1329 ; CHECK-P8: # %bb.0: # %entry
1330 ; CHECK-P8-NEXT: lis r3, 153
1331 ; CHECK-P8-NEXT: lhz r3, -27108(r3)
1332 ; CHECK-P8-NEXT: mtfprwz f0, r3
1333 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1334 ; CHECK-P8-NEXT: blr
1336 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 4
1337 %conv = uitofp i16 %0 to float
1341 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1342 define dso_local float @ld_cst_align64_float_uint16_t() {
1343 ; CHECK-P10-LABEL: ld_cst_align64_float_uint16_t:
1344 ; CHECK-P10: # %bb.0: # %entry
1345 ; CHECK-P10-NEXT: pli r3, 244140625
1346 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
1347 ; CHECK-P10-NEXT: lxsihzx f0, 0, r3
1348 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
1349 ; CHECK-P10-NEXT: blr
1351 ; CHECK-P9-LABEL: ld_cst_align64_float_uint16_t:
1352 ; CHECK-P9: # %bb.0: # %entry
1353 ; CHECK-P9-NEXT: lis r3, 3725
1354 ; CHECK-P9-NEXT: ori r3, r3, 19025
1355 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
1356 ; CHECK-P9-NEXT: lxsihzx f0, 0, r3
1357 ; CHECK-P9-NEXT: xscvuxdsp f1, f0
1358 ; CHECK-P9-NEXT: blr
1360 ; CHECK-P8-LABEL: ld_cst_align64_float_uint16_t:
1361 ; CHECK-P8: # %bb.0: # %entry
1362 ; CHECK-P8-NEXT: lis r3, 3725
1363 ; CHECK-P8-NEXT: ori r3, r3, 19025
1364 ; CHECK-P8-NEXT: rldic r3, r3, 12, 24
1365 ; CHECK-P8-NEXT: lhz r3, 0(r3)
1366 ; CHECK-P8-NEXT: mtfprwz f0, r3
1367 ; CHECK-P8-NEXT: xscvuxdsp f1, f0
1368 ; CHECK-P8-NEXT: blr
1370 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 4096
1371 %conv = uitofp i16 %0 to float
1375 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1376 define dso_local float @ld_0_float_int16_t(i64 %ptr) {
1377 ; CHECK-POSTP8-LABEL: ld_0_float_int16_t:
1378 ; CHECK-POSTP8: # %bb.0: # %entry
1379 ; CHECK-POSTP8-NEXT: lxsihzx v2, 0, r3
1380 ; CHECK-POSTP8-NEXT: vextsh2d v2, v2
1381 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
1382 ; CHECK-POSTP8-NEXT: blr
1384 ; CHECK-P8-LABEL: ld_0_float_int16_t:
1385 ; CHECK-P8: # %bb.0: # %entry
1386 ; CHECK-P8-NEXT: lha r3, 0(r3)
1387 ; CHECK-P8-NEXT: mtfprwa f0, r3
1388 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1389 ; CHECK-P8-NEXT: blr
1391 %0 = inttoptr i64 %ptr to ptr
1392 %1 = load i16, ptr %0, align 2
1393 %conv = sitofp i16 %1 to float
1397 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1398 define dso_local float @ld_align16_float_int16_t(ptr nocapture readonly %ptr) {
1399 ; CHECK-POSTP8-LABEL: ld_align16_float_int16_t:
1400 ; CHECK-POSTP8: # %bb.0: # %entry
1401 ; CHECK-POSTP8-NEXT: addi r3, r3, 8
1402 ; CHECK-POSTP8-NEXT: lxsihzx v2, 0, r3
1403 ; CHECK-POSTP8-NEXT: vextsh2d v2, v2
1404 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
1405 ; CHECK-POSTP8-NEXT: blr
1407 ; CHECK-P8-LABEL: ld_align16_float_int16_t:
1408 ; CHECK-P8: # %bb.0: # %entry
1409 ; CHECK-P8-NEXT: lha r3, 8(r3)
1410 ; CHECK-P8-NEXT: mtfprwa f0, r3
1411 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1412 ; CHECK-P8-NEXT: blr
1414 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
1415 %0 = load i16, ptr %add.ptr, align 2
1416 %conv = sitofp i16 %0 to float
1420 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1421 define dso_local float @ld_align32_float_int16_t(ptr nocapture readonly %ptr) {
1422 ; CHECK-P10-LABEL: ld_align32_float_int16_t:
1423 ; CHECK-P10: # %bb.0: # %entry
1424 ; CHECK-P10-NEXT: pli r4, 99999000
1425 ; CHECK-P10-NEXT: lxsihzx v2, r3, r4
1426 ; CHECK-P10-NEXT: vextsh2d v2, v2
1427 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
1428 ; CHECK-P10-NEXT: blr
1430 ; CHECK-P9-LABEL: ld_align32_float_int16_t:
1431 ; CHECK-P9: # %bb.0: # %entry
1432 ; CHECK-P9-NEXT: lis r4, 1525
1433 ; CHECK-P9-NEXT: ori r4, r4, 56600
1434 ; CHECK-P9-NEXT: lxsihzx v2, r3, r4
1435 ; CHECK-P9-NEXT: vextsh2d v2, v2
1436 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
1437 ; CHECK-P9-NEXT: blr
1439 ; CHECK-P8-LABEL: ld_align32_float_int16_t:
1440 ; CHECK-P8: # %bb.0: # %entry
1441 ; CHECK-P8-NEXT: lis r4, 1525
1442 ; CHECK-P8-NEXT: ori r4, r4, 56600
1443 ; CHECK-P8-NEXT: lhax r3, r3, r4
1444 ; CHECK-P8-NEXT: mtfprwa f0, r3
1445 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1446 ; CHECK-P8-NEXT: blr
1448 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
1449 %0 = load i16, ptr %add.ptr, align 2
1450 %conv = sitofp i16 %0 to float
1454 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1455 define dso_local float @ld_align64_float_int16_t(ptr nocapture readonly %ptr) {
1456 ; CHECK-P10-LABEL: ld_align64_float_int16_t:
1457 ; CHECK-P10: # %bb.0: # %entry
1458 ; CHECK-P10-NEXT: pli r4, 244140625
1459 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
1460 ; CHECK-P10-NEXT: lxsihzx v2, r3, r4
1461 ; CHECK-P10-NEXT: vextsh2d v2, v2
1462 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
1463 ; CHECK-P10-NEXT: blr
1465 ; CHECK-P9-LABEL: ld_align64_float_int16_t:
1466 ; CHECK-P9: # %bb.0: # %entry
1467 ; CHECK-P9-NEXT: lis r4, 3725
1468 ; CHECK-P9-NEXT: ori r4, r4, 19025
1469 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
1470 ; CHECK-P9-NEXT: lxsihzx v2, r3, r4
1471 ; CHECK-P9-NEXT: vextsh2d v2, v2
1472 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
1473 ; CHECK-P9-NEXT: blr
1475 ; CHECK-P8-LABEL: ld_align64_float_int16_t:
1476 ; CHECK-P8: # %bb.0: # %entry
1477 ; CHECK-P8-NEXT: lis r4, 3725
1478 ; CHECK-P8-NEXT: ori r4, r4, 19025
1479 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
1480 ; CHECK-P8-NEXT: lhax r3, r3, r4
1481 ; CHECK-P8-NEXT: mtfprwa f0, r3
1482 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1483 ; CHECK-P8-NEXT: blr
1485 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
1486 %0 = load i16, ptr %add.ptr, align 2
1487 %conv = sitofp i16 %0 to float
1491 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1492 define dso_local float @ld_reg_float_int16_t(ptr nocapture readonly %ptr, i64 %off) {
1493 ; CHECK-POSTP8-LABEL: ld_reg_float_int16_t:
1494 ; CHECK-POSTP8: # %bb.0: # %entry
1495 ; CHECK-POSTP8-NEXT: lxsihzx v2, r3, r4
1496 ; CHECK-POSTP8-NEXT: vextsh2d v2, v2
1497 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
1498 ; CHECK-POSTP8-NEXT: blr
1500 ; CHECK-P8-LABEL: ld_reg_float_int16_t:
1501 ; CHECK-P8: # %bb.0: # %entry
1502 ; CHECK-P8-NEXT: lhax r3, r3, r4
1503 ; CHECK-P8-NEXT: mtfprwa f0, r3
1504 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1505 ; CHECK-P8-NEXT: blr
1507 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
1508 %0 = load i16, ptr %add.ptr, align 2
1509 %conv = sitofp i16 %0 to float
1513 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1514 define dso_local float @ld_or_float_int16_t(i64 %ptr, i8 zeroext %off) {
1515 ; CHECK-POSTP8-LABEL: ld_or_float_int16_t:
1516 ; CHECK-POSTP8: # %bb.0: # %entry
1517 ; CHECK-POSTP8-NEXT: or r3, r4, r3
1518 ; CHECK-POSTP8-NEXT: lxsihzx v2, 0, r3
1519 ; CHECK-POSTP8-NEXT: vextsh2d v2, v2
1520 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
1521 ; CHECK-POSTP8-NEXT: blr
1523 ; CHECK-P8-LABEL: ld_or_float_int16_t:
1524 ; CHECK-P8: # %bb.0: # %entry
1525 ; CHECK-P8-NEXT: or r3, r4, r3
1526 ; CHECK-P8-NEXT: lha r3, 0(r3)
1527 ; CHECK-P8-NEXT: mtfprwa f0, r3
1528 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1529 ; CHECK-P8-NEXT: blr
1531 %conv = zext i8 %off to i64
1532 %or = or i64 %conv, %ptr
1533 %0 = inttoptr i64 %or to ptr
1534 %1 = load i16, ptr %0, align 2
1535 %conv1 = sitofp i16 %1 to float
1539 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1540 define dso_local float @ld_not_disjoint16_float_int16_t(i64 %ptr) {
1541 ; CHECK-POSTP8-LABEL: ld_not_disjoint16_float_int16_t:
1542 ; CHECK-POSTP8: # %bb.0: # %entry
1543 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
1544 ; CHECK-POSTP8-NEXT: lxsihzx v2, 0, r3
1545 ; CHECK-POSTP8-NEXT: vextsh2d v2, v2
1546 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
1547 ; CHECK-POSTP8-NEXT: blr
1549 ; CHECK-P8-LABEL: ld_not_disjoint16_float_int16_t:
1550 ; CHECK-P8: # %bb.0: # %entry
1551 ; CHECK-P8-NEXT: ori r3, r3, 6
1552 ; CHECK-P8-NEXT: lha r3, 0(r3)
1553 ; CHECK-P8-NEXT: mtfprwa f0, r3
1554 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1555 ; CHECK-P8-NEXT: blr
1557 %or = or i64 %ptr, 6
1558 %0 = inttoptr i64 %or to ptr
1559 %1 = load i16, ptr %0, align 2
1560 %conv = sitofp i16 %1 to float
1564 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1565 define dso_local float @ld_disjoint_align16_float_int16_t(i64 %ptr) {
1566 ; CHECK-POSTP8-LABEL: ld_disjoint_align16_float_int16_t:
1567 ; CHECK-POSTP8: # %bb.0: # %entry
1568 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
1569 ; CHECK-POSTP8-NEXT: ori r3, r3, 24
1570 ; CHECK-POSTP8-NEXT: lxsihzx v2, 0, r3
1571 ; CHECK-POSTP8-NEXT: vextsh2d v2, v2
1572 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
1573 ; CHECK-POSTP8-NEXT: blr
1575 ; CHECK-P8-LABEL: ld_disjoint_align16_float_int16_t:
1576 ; CHECK-P8: # %bb.0: # %entry
1577 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
1578 ; CHECK-P8-NEXT: lha r3, 24(r3)
1579 ; CHECK-P8-NEXT: mtfprwa f0, r3
1580 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1581 ; CHECK-P8-NEXT: blr
1583 %and = and i64 %ptr, -4096
1584 %or = or i64 %and, 24
1585 %0 = inttoptr i64 %or to ptr
1586 %1 = load i16, ptr %0, align 8
1587 %conv = sitofp i16 %1 to float
1591 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1592 define dso_local float @ld_not_disjoint32_float_int16_t(i64 %ptr) {
1593 ; CHECK-POSTP8-LABEL: ld_not_disjoint32_float_int16_t:
1594 ; CHECK-POSTP8: # %bb.0: # %entry
1595 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
1596 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
1597 ; CHECK-POSTP8-NEXT: lxsihzx v2, 0, r3
1598 ; CHECK-POSTP8-NEXT: vextsh2d v2, v2
1599 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
1600 ; CHECK-POSTP8-NEXT: blr
1602 ; CHECK-P8-LABEL: ld_not_disjoint32_float_int16_t:
1603 ; CHECK-P8: # %bb.0: # %entry
1604 ; CHECK-P8-NEXT: ori r3, r3, 34463
1605 ; CHECK-P8-NEXT: oris r3, r3, 1
1606 ; CHECK-P8-NEXT: lha r3, 0(r3)
1607 ; CHECK-P8-NEXT: mtfprwa f0, r3
1608 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1609 ; CHECK-P8-NEXT: blr
1611 %or = or i64 %ptr, 99999
1612 %0 = inttoptr i64 %or to ptr
1613 %1 = load i16, ptr %0, align 2
1614 %conv = sitofp i16 %1 to float
1618 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1619 define dso_local float @ld_disjoint_align32_float_int16_t(i64 %ptr) {
1620 ; CHECK-P10-LABEL: ld_disjoint_align32_float_int16_t:
1621 ; CHECK-P10: # %bb.0: # %entry
1622 ; CHECK-P10-NEXT: lis r4, -15264
1623 ; CHECK-P10-NEXT: and r3, r3, r4
1624 ; CHECK-P10-NEXT: pli r4, 999990000
1625 ; CHECK-P10-NEXT: lxsihzx v2, r3, r4
1626 ; CHECK-P10-NEXT: vextsh2d v2, v2
1627 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
1628 ; CHECK-P10-NEXT: blr
1630 ; CHECK-P9-LABEL: ld_disjoint_align32_float_int16_t:
1631 ; CHECK-P9: # %bb.0: # %entry
1632 ; CHECK-P9-NEXT: lis r4, -15264
1633 ; CHECK-P9-NEXT: and r3, r3, r4
1634 ; CHECK-P9-NEXT: lis r4, 15258
1635 ; CHECK-P9-NEXT: ori r4, r4, 41712
1636 ; CHECK-P9-NEXT: lxsihzx v2, r3, r4
1637 ; CHECK-P9-NEXT: vextsh2d v2, v2
1638 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
1639 ; CHECK-P9-NEXT: blr
1641 ; CHECK-P8-LABEL: ld_disjoint_align32_float_int16_t:
1642 ; CHECK-P8: # %bb.0: # %entry
1643 ; CHECK-P8-NEXT: lis r4, -15264
1644 ; CHECK-P8-NEXT: and r3, r3, r4
1645 ; CHECK-P8-NEXT: lis r4, 15258
1646 ; CHECK-P8-NEXT: ori r4, r4, 41712
1647 ; CHECK-P8-NEXT: lhax r3, r3, r4
1648 ; CHECK-P8-NEXT: mtfprwa f0, r3
1649 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1650 ; CHECK-P8-NEXT: blr
1652 %and = and i64 %ptr, -1000341504
1653 %or = or i64 %and, 999990000
1654 %0 = inttoptr i64 %or to ptr
1655 %1 = load i16, ptr %0, align 16
1656 %conv = sitofp i16 %1 to float
1660 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1661 define dso_local float @ld_not_disjoint64_float_int16_t(i64 %ptr) {
1662 ; CHECK-P10-LABEL: ld_not_disjoint64_float_int16_t:
1663 ; CHECK-P10: # %bb.0: # %entry
1664 ; CHECK-P10-NEXT: pli r4, 232
1665 ; CHECK-P10-NEXT: pli r5, 3567587329
1666 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
1667 ; CHECK-P10-NEXT: or r3, r3, r5
1668 ; CHECK-P10-NEXT: lxsihzx v2, 0, r3
1669 ; CHECK-P10-NEXT: vextsh2d v2, v2
1670 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
1671 ; CHECK-P10-NEXT: blr
1673 ; CHECK-P9-LABEL: ld_not_disjoint64_float_int16_t:
1674 ; CHECK-P9: # %bb.0: # %entry
1675 ; CHECK-P9-NEXT: li r4, 29
1676 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
1677 ; CHECK-P9-NEXT: oris r4, r4, 54437
1678 ; CHECK-P9-NEXT: ori r4, r4, 4097
1679 ; CHECK-P9-NEXT: or r3, r3, r4
1680 ; CHECK-P9-NEXT: lxsihzx v2, 0, r3
1681 ; CHECK-P9-NEXT: vextsh2d v2, v2
1682 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
1683 ; CHECK-P9-NEXT: blr
1685 ; CHECK-P8-LABEL: ld_not_disjoint64_float_int16_t:
1686 ; CHECK-P8: # %bb.0: # %entry
1687 ; CHECK-P8-NEXT: li r4, 29
1688 ; CHECK-P8-NEXT: rldic r4, r4, 35, 24
1689 ; CHECK-P8-NEXT: oris r4, r4, 54437
1690 ; CHECK-P8-NEXT: ori r4, r4, 4097
1691 ; CHECK-P8-NEXT: or r3, r3, r4
1692 ; CHECK-P8-NEXT: lha r3, 0(r3)
1693 ; CHECK-P8-NEXT: mtfprwa f0, r3
1694 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1695 ; CHECK-P8-NEXT: blr
1697 %or = or i64 %ptr, 1000000000001
1698 %0 = inttoptr i64 %or to ptr
1699 %1 = load i16, ptr %0, align 2
1700 %conv = sitofp i16 %1 to float
1704 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1705 define dso_local float @ld_disjoint_align64_float_int16_t(i64 %ptr) {
1706 ; CHECK-P10-LABEL: ld_disjoint_align64_float_int16_t:
1707 ; CHECK-P10: # %bb.0: # %entry
1708 ; CHECK-P10-NEXT: pli r4, 244140625
1709 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
1710 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
1711 ; CHECK-P10-NEXT: lxsihzx v2, r3, r4
1712 ; CHECK-P10-NEXT: vextsh2d v2, v2
1713 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
1714 ; CHECK-P10-NEXT: blr
1716 ; CHECK-P9-LABEL: ld_disjoint_align64_float_int16_t:
1717 ; CHECK-P9: # %bb.0: # %entry
1718 ; CHECK-P9-NEXT: lis r4, 3725
1719 ; CHECK-P9-NEXT: rldicr r3, r3, 0, 23
1720 ; CHECK-P9-NEXT: ori r4, r4, 19025
1721 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
1722 ; CHECK-P9-NEXT: lxsihzx v2, r3, r4
1723 ; CHECK-P9-NEXT: vextsh2d v2, v2
1724 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
1725 ; CHECK-P9-NEXT: blr
1727 ; CHECK-P8-LABEL: ld_disjoint_align64_float_int16_t:
1728 ; CHECK-P8: # %bb.0: # %entry
1729 ; CHECK-P8-NEXT: lis r4, 3725
1730 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 23
1731 ; CHECK-P8-NEXT: ori r4, r4, 19025
1732 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
1733 ; CHECK-P8-NEXT: lhax r3, r3, r4
1734 ; CHECK-P8-NEXT: mtfprwa f0, r3
1735 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1736 ; CHECK-P8-NEXT: blr
1738 %and = and i64 %ptr, -1099511627776
1739 %or = or i64 %and, 1000000000000
1740 %0 = inttoptr i64 %or to ptr
1741 %1 = load i16, ptr %0, align 4096
1742 %conv = sitofp i16 %1 to float
1746 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1747 define dso_local float @ld_cst_align16_float_int16_t() {
1748 ; CHECK-POSTP8-LABEL: ld_cst_align16_float_int16_t:
1749 ; CHECK-POSTP8: # %bb.0: # %entry
1750 ; CHECK-POSTP8-NEXT: li r3, 4080
1751 ; CHECK-POSTP8-NEXT: lxsihzx v2, 0, r3
1752 ; CHECK-POSTP8-NEXT: vextsh2d v2, v2
1753 ; CHECK-POSTP8-NEXT: xscvsxdsp f1, v2
1754 ; CHECK-POSTP8-NEXT: blr
1756 ; CHECK-P8-LABEL: ld_cst_align16_float_int16_t:
1757 ; CHECK-P8: # %bb.0: # %entry
1758 ; CHECK-P8-NEXT: lha r3, 4080(0)
1759 ; CHECK-P8-NEXT: mtfprwa f0, r3
1760 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1761 ; CHECK-P8-NEXT: blr
1763 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 16
1764 %conv = sitofp i16 %0 to float
1768 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1769 define dso_local float @ld_cst_align32_float_int16_t() {
1770 ; CHECK-P10-LABEL: ld_cst_align32_float_int16_t:
1771 ; CHECK-P10: # %bb.0: # %entry
1772 ; CHECK-P10-NEXT: pli r3, 9999900
1773 ; CHECK-P10-NEXT: lxsihzx v2, 0, r3
1774 ; CHECK-P10-NEXT: vextsh2d v2, v2
1775 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
1776 ; CHECK-P10-NEXT: blr
1778 ; CHECK-P9-LABEL: ld_cst_align32_float_int16_t:
1779 ; CHECK-P9: # %bb.0: # %entry
1780 ; CHECK-P9-NEXT: lis r3, 152
1781 ; CHECK-P9-NEXT: ori r3, r3, 38428
1782 ; CHECK-P9-NEXT: lxsihzx v2, 0, r3
1783 ; CHECK-P9-NEXT: vextsh2d v2, v2
1784 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
1785 ; CHECK-P9-NEXT: blr
1787 ; CHECK-P8-LABEL: ld_cst_align32_float_int16_t:
1788 ; CHECK-P8: # %bb.0: # %entry
1789 ; CHECK-P8-NEXT: lis r3, 153
1790 ; CHECK-P8-NEXT: lha r3, -27108(r3)
1791 ; CHECK-P8-NEXT: mtfprwa f0, r3
1792 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1793 ; CHECK-P8-NEXT: blr
1795 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 4
1796 %conv = sitofp i16 %0 to float
1800 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1801 define dso_local float @ld_cst_align64_float_int16_t() {
1802 ; CHECK-P10-LABEL: ld_cst_align64_float_int16_t:
1803 ; CHECK-P10: # %bb.0: # %entry
1804 ; CHECK-P10-NEXT: pli r3, 244140625
1805 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
1806 ; CHECK-P10-NEXT: lxsihzx v2, 0, r3
1807 ; CHECK-P10-NEXT: vextsh2d v2, v2
1808 ; CHECK-P10-NEXT: xscvsxdsp f1, v2
1809 ; CHECK-P10-NEXT: blr
1811 ; CHECK-P9-LABEL: ld_cst_align64_float_int16_t:
1812 ; CHECK-P9: # %bb.0: # %entry
1813 ; CHECK-P9-NEXT: lis r3, 3725
1814 ; CHECK-P9-NEXT: ori r3, r3, 19025
1815 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
1816 ; CHECK-P9-NEXT: lxsihzx v2, 0, r3
1817 ; CHECK-P9-NEXT: vextsh2d v2, v2
1818 ; CHECK-P9-NEXT: xscvsxdsp f1, v2
1819 ; CHECK-P9-NEXT: blr
1821 ; CHECK-P8-LABEL: ld_cst_align64_float_int16_t:
1822 ; CHECK-P8: # %bb.0: # %entry
1823 ; CHECK-P8-NEXT: lis r3, 3725
1824 ; CHECK-P8-NEXT: ori r3, r3, 19025
1825 ; CHECK-P8-NEXT: rldic r3, r3, 12, 24
1826 ; CHECK-P8-NEXT: lha r3, 0(r3)
1827 ; CHECK-P8-NEXT: mtfprwa f0, r3
1828 ; CHECK-P8-NEXT: xscvsxdsp f1, f0
1829 ; CHECK-P8-NEXT: blr
1831 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 4096
1832 %conv = sitofp i16 %0 to float
1836 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1837 define dso_local float @ld_0_float_uint32_t(i64 %ptr) {
1838 ; CHECK-LABEL: ld_0_float_uint32_t:
1839 ; CHECK: # %bb.0: # %entry
1840 ; CHECK-NEXT: lfiwzx f0, 0, r3
1841 ; CHECK-NEXT: xscvuxdsp f1, f0
1844 %0 = inttoptr i64 %ptr to ptr
1845 %1 = load i32, ptr %0, align 4
1846 %conv = uitofp i32 %1 to float
1850 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1851 define dso_local float @ld_align16_float_uint32_t(ptr nocapture readonly %ptr) {
1852 ; CHECK-LABEL: ld_align16_float_uint32_t:
1853 ; CHECK: # %bb.0: # %entry
1854 ; CHECK-NEXT: addi r3, r3, 8
1855 ; CHECK-NEXT: lfiwzx f0, 0, r3
1856 ; CHECK-NEXT: xscvuxdsp f1, f0
1859 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
1860 %0 = load i32, ptr %add.ptr, align 4
1861 %conv = uitofp i32 %0 to float
1865 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1866 define dso_local float @ld_align32_float_uint32_t(ptr nocapture readonly %ptr) {
1867 ; CHECK-P10-LABEL: ld_align32_float_uint32_t:
1868 ; CHECK-P10: # %bb.0: # %entry
1869 ; CHECK-P10-NEXT: pli r4, 99999000
1870 ; CHECK-P10-NEXT: lfiwzx f0, r3, r4
1871 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
1872 ; CHECK-P10-NEXT: blr
1874 ; CHECK-PREP10-LABEL: ld_align32_float_uint32_t:
1875 ; CHECK-PREP10: # %bb.0: # %entry
1876 ; CHECK-PREP10-NEXT: lis r4, 1525
1877 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
1878 ; CHECK-PREP10-NEXT: lfiwzx f0, r3, r4
1879 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
1880 ; CHECK-PREP10-NEXT: blr
1882 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
1883 %0 = load i32, ptr %add.ptr, align 4
1884 %conv = uitofp i32 %0 to float
1888 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1889 define dso_local float @ld_align64_float_uint32_t(ptr nocapture readonly %ptr) {
1890 ; CHECK-P10-LABEL: ld_align64_float_uint32_t:
1891 ; CHECK-P10: # %bb.0: # %entry
1892 ; CHECK-P10-NEXT: pli r4, 244140625
1893 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
1894 ; CHECK-P10-NEXT: lfiwzx f0, r3, r4
1895 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
1896 ; CHECK-P10-NEXT: blr
1898 ; CHECK-PREP10-LABEL: ld_align64_float_uint32_t:
1899 ; CHECK-PREP10: # %bb.0: # %entry
1900 ; CHECK-PREP10-NEXT: lis r4, 3725
1901 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
1902 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
1903 ; CHECK-PREP10-NEXT: lfiwzx f0, r3, r4
1904 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
1905 ; CHECK-PREP10-NEXT: blr
1907 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
1908 %0 = load i32, ptr %add.ptr, align 4
1909 %conv = uitofp i32 %0 to float
1913 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1914 define dso_local float @ld_reg_float_uint32_t(ptr nocapture readonly %ptr, i64 %off) {
1915 ; CHECK-LABEL: ld_reg_float_uint32_t:
1916 ; CHECK: # %bb.0: # %entry
1917 ; CHECK-NEXT: lfiwzx f0, r3, r4
1918 ; CHECK-NEXT: xscvuxdsp f1, f0
1921 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
1922 %0 = load i32, ptr %add.ptr, align 4
1923 %conv = uitofp i32 %0 to float
1927 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1928 define dso_local float @ld_or_float_uint32_t(i64 %ptr, i8 zeroext %off) {
1929 ; CHECK-LABEL: ld_or_float_uint32_t:
1930 ; CHECK: # %bb.0: # %entry
1931 ; CHECK-NEXT: or r3, r4, r3
1932 ; CHECK-NEXT: lfiwzx f0, 0, r3
1933 ; CHECK-NEXT: xscvuxdsp f1, f0
1936 %conv = zext i8 %off to i64
1937 %or = or i64 %conv, %ptr
1938 %0 = inttoptr i64 %or to ptr
1939 %1 = load i32, ptr %0, align 4
1940 %conv1 = uitofp i32 %1 to float
1944 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1945 define dso_local float @ld_not_disjoint16_float_uint32_t(i64 %ptr) {
1946 ; CHECK-LABEL: ld_not_disjoint16_float_uint32_t:
1947 ; CHECK: # %bb.0: # %entry
1948 ; CHECK-NEXT: ori r3, r3, 6
1949 ; CHECK-NEXT: lfiwzx f0, 0, r3
1950 ; CHECK-NEXT: xscvuxdsp f1, f0
1953 %or = or i64 %ptr, 6
1954 %0 = inttoptr i64 %or to ptr
1955 %1 = load i32, ptr %0, align 4
1956 %conv = uitofp i32 %1 to float
1960 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1961 define dso_local float @ld_disjoint_align16_float_uint32_t(i64 %ptr) {
1962 ; CHECK-LABEL: ld_disjoint_align16_float_uint32_t:
1963 ; CHECK: # %bb.0: # %entry
1964 ; CHECK-NEXT: rldicr r3, r3, 0, 51
1965 ; CHECK-NEXT: ori r3, r3, 24
1966 ; CHECK-NEXT: lfiwzx f0, 0, r3
1967 ; CHECK-NEXT: xscvuxdsp f1, f0
1970 %and = and i64 %ptr, -4096
1971 %or = or i64 %and, 24
1972 %0 = inttoptr i64 %or to ptr
1973 %1 = load i32, ptr %0, align 8
1974 %conv = uitofp i32 %1 to float
1978 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1979 define dso_local float @ld_not_disjoint32_float_uint32_t(i64 %ptr) {
1980 ; CHECK-LABEL: ld_not_disjoint32_float_uint32_t:
1981 ; CHECK: # %bb.0: # %entry
1982 ; CHECK-NEXT: ori r3, r3, 34463
1983 ; CHECK-NEXT: oris r3, r3, 1
1984 ; CHECK-NEXT: lfiwzx f0, 0, r3
1985 ; CHECK-NEXT: xscvuxdsp f1, f0
1988 %or = or i64 %ptr, 99999
1989 %0 = inttoptr i64 %or to ptr
1990 %1 = load i32, ptr %0, align 4
1991 %conv = uitofp i32 %1 to float
1995 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
1996 define dso_local float @ld_disjoint_align32_float_uint32_t(i64 %ptr) {
1997 ; CHECK-P10-LABEL: ld_disjoint_align32_float_uint32_t:
1998 ; CHECK-P10: # %bb.0: # %entry
1999 ; CHECK-P10-NEXT: lis r4, -15264
2000 ; CHECK-P10-NEXT: and r3, r3, r4
2001 ; CHECK-P10-NEXT: pli r4, 999990000
2002 ; CHECK-P10-NEXT: lfiwzx f0, r3, r4
2003 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2004 ; CHECK-P10-NEXT: blr
2006 ; CHECK-PREP10-LABEL: ld_disjoint_align32_float_uint32_t:
2007 ; CHECK-PREP10: # %bb.0: # %entry
2008 ; CHECK-PREP10-NEXT: lis r4, -15264
2009 ; CHECK-PREP10-NEXT: and r3, r3, r4
2010 ; CHECK-PREP10-NEXT: lis r4, 15258
2011 ; CHECK-PREP10-NEXT: ori r4, r4, 41712
2012 ; CHECK-PREP10-NEXT: lfiwzx f0, r3, r4
2013 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2014 ; CHECK-PREP10-NEXT: blr
2016 %and = and i64 %ptr, -1000341504
2017 %or = or i64 %and, 999990000
2018 %0 = inttoptr i64 %or to ptr
2019 %1 = load i32, ptr %0, align 16
2020 %conv = uitofp i32 %1 to float
2024 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2025 define dso_local float @ld_not_disjoint64_float_uint32_t(i64 %ptr) {
2026 ; CHECK-P10-LABEL: ld_not_disjoint64_float_uint32_t:
2027 ; CHECK-P10: # %bb.0: # %entry
2028 ; CHECK-P10-NEXT: pli r4, 232
2029 ; CHECK-P10-NEXT: pli r5, 3567587329
2030 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
2031 ; CHECK-P10-NEXT: or r3, r3, r5
2032 ; CHECK-P10-NEXT: lfiwzx f0, 0, r3
2033 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2034 ; CHECK-P10-NEXT: blr
2036 ; CHECK-PREP10-LABEL: ld_not_disjoint64_float_uint32_t:
2037 ; CHECK-PREP10: # %bb.0: # %entry
2038 ; CHECK-PREP10-NEXT: li r4, 29
2039 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
2040 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
2041 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
2042 ; CHECK-PREP10-NEXT: or r3, r3, r4
2043 ; CHECK-PREP10-NEXT: lfiwzx f0, 0, r3
2044 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2045 ; CHECK-PREP10-NEXT: blr
2047 %or = or i64 %ptr, 1000000000001
2048 %0 = inttoptr i64 %or to ptr
2049 %1 = load i32, ptr %0, align 4
2050 %conv = uitofp i32 %1 to float
2054 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2055 define dso_local float @ld_disjoint_align64_float_uint32_t(i64 %ptr) {
2056 ; CHECK-P10-LABEL: ld_disjoint_align64_float_uint32_t:
2057 ; CHECK-P10: # %bb.0: # %entry
2058 ; CHECK-P10-NEXT: pli r4, 244140625
2059 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
2060 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
2061 ; CHECK-P10-NEXT: lfiwzx f0, r3, r4
2062 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2063 ; CHECK-P10-NEXT: blr
2065 ; CHECK-PREP10-LABEL: ld_disjoint_align64_float_uint32_t:
2066 ; CHECK-PREP10: # %bb.0: # %entry
2067 ; CHECK-PREP10-NEXT: lis r4, 3725
2068 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
2069 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
2070 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
2071 ; CHECK-PREP10-NEXT: lfiwzx f0, r3, r4
2072 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2073 ; CHECK-PREP10-NEXT: blr
2075 %and = and i64 %ptr, -1099511627776
2076 %or = or i64 %and, 1000000000000
2077 %0 = inttoptr i64 %or to ptr
2078 %1 = load i32, ptr %0, align 4096
2079 %conv = uitofp i32 %1 to float
2083 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2084 define dso_local float @ld_cst_align16_float_uint32_t() {
2085 ; CHECK-LABEL: ld_cst_align16_float_uint32_t:
2086 ; CHECK: # %bb.0: # %entry
2087 ; CHECK-NEXT: li r3, 4080
2088 ; CHECK-NEXT: lfiwzx f0, 0, r3
2089 ; CHECK-NEXT: xscvuxdsp f1, f0
2092 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 16
2093 %conv = uitofp i32 %0 to float
2097 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2098 define dso_local float @ld_cst_align32_float_uint32_t() {
2099 ; CHECK-P10-LABEL: ld_cst_align32_float_uint32_t:
2100 ; CHECK-P10: # %bb.0: # %entry
2101 ; CHECK-P10-NEXT: pli r3, 9999900
2102 ; CHECK-P10-NEXT: lfiwzx f0, 0, r3
2103 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2104 ; CHECK-P10-NEXT: blr
2106 ; CHECK-PREP10-LABEL: ld_cst_align32_float_uint32_t:
2107 ; CHECK-PREP10: # %bb.0: # %entry
2108 ; CHECK-PREP10-NEXT: lis r3, 152
2109 ; CHECK-PREP10-NEXT: ori r3, r3, 38428
2110 ; CHECK-PREP10-NEXT: lfiwzx f0, 0, r3
2111 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2112 ; CHECK-PREP10-NEXT: blr
2114 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 4
2115 %conv = uitofp i32 %0 to float
2119 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2120 define dso_local float @ld_cst_align64_float_uint32_t() {
2121 ; CHECK-P10-LABEL: ld_cst_align64_float_uint32_t:
2122 ; CHECK-P10: # %bb.0: # %entry
2123 ; CHECK-P10-NEXT: pli r3, 244140625
2124 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
2125 ; CHECK-P10-NEXT: lfiwzx f0, 0, r3
2126 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2127 ; CHECK-P10-NEXT: blr
2129 ; CHECK-PREP10-LABEL: ld_cst_align64_float_uint32_t:
2130 ; CHECK-PREP10: # %bb.0: # %entry
2131 ; CHECK-PREP10-NEXT: lis r3, 3725
2132 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
2133 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
2134 ; CHECK-PREP10-NEXT: lfiwzx f0, 0, r3
2135 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2136 ; CHECK-PREP10-NEXT: blr
2138 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 4096
2139 %conv = uitofp i32 %0 to float
2143 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2144 define dso_local float @ld_0_float_int32_t(i64 %ptr) {
2145 ; CHECK-LABEL: ld_0_float_int32_t:
2146 ; CHECK: # %bb.0: # %entry
2147 ; CHECK-NEXT: lfiwax f0, 0, r3
2148 ; CHECK-NEXT: xscvsxdsp f1, f0
2151 %0 = inttoptr i64 %ptr to ptr
2152 %1 = load i32, ptr %0, align 4
2153 %conv = sitofp i32 %1 to float
2157 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2158 define dso_local float @ld_align16_float_int32_t(ptr nocapture readonly %ptr) {
2159 ; CHECK-LABEL: ld_align16_float_int32_t:
2160 ; CHECK: # %bb.0: # %entry
2161 ; CHECK-NEXT: addi r3, r3, 8
2162 ; CHECK-NEXT: lfiwax f0, 0, r3
2163 ; CHECK-NEXT: xscvsxdsp f1, f0
2166 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
2167 %0 = load i32, ptr %add.ptr, align 4
2168 %conv = sitofp i32 %0 to float
2172 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2173 define dso_local float @ld_align32_float_int32_t(ptr nocapture readonly %ptr) {
2174 ; CHECK-P10-LABEL: ld_align32_float_int32_t:
2175 ; CHECK-P10: # %bb.0: # %entry
2176 ; CHECK-P10-NEXT: pli r4, 99999000
2177 ; CHECK-P10-NEXT: lfiwax f0, r3, r4
2178 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2179 ; CHECK-P10-NEXT: blr
2181 ; CHECK-PREP10-LABEL: ld_align32_float_int32_t:
2182 ; CHECK-PREP10: # %bb.0: # %entry
2183 ; CHECK-PREP10-NEXT: lis r4, 1525
2184 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
2185 ; CHECK-PREP10-NEXT: lfiwax f0, r3, r4
2186 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2187 ; CHECK-PREP10-NEXT: blr
2189 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
2190 %0 = load i32, ptr %add.ptr, align 4
2191 %conv = sitofp i32 %0 to float
2195 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2196 define dso_local float @ld_align64_float_int32_t(ptr nocapture readonly %ptr) {
2197 ; CHECK-P10-LABEL: ld_align64_float_int32_t:
2198 ; CHECK-P10: # %bb.0: # %entry
2199 ; CHECK-P10-NEXT: pli r4, 244140625
2200 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
2201 ; CHECK-P10-NEXT: lfiwax f0, r3, r4
2202 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2203 ; CHECK-P10-NEXT: blr
2205 ; CHECK-PREP10-LABEL: ld_align64_float_int32_t:
2206 ; CHECK-PREP10: # %bb.0: # %entry
2207 ; CHECK-PREP10-NEXT: lis r4, 3725
2208 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
2209 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
2210 ; CHECK-PREP10-NEXT: lfiwax f0, r3, r4
2211 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2212 ; CHECK-PREP10-NEXT: blr
2214 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
2215 %0 = load i32, ptr %add.ptr, align 4
2216 %conv = sitofp i32 %0 to float
2220 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2221 define dso_local float @ld_reg_float_int32_t(ptr nocapture readonly %ptr, i64 %off) {
2222 ; CHECK-LABEL: ld_reg_float_int32_t:
2223 ; CHECK: # %bb.0: # %entry
2224 ; CHECK-NEXT: lfiwax f0, r3, r4
2225 ; CHECK-NEXT: xscvsxdsp f1, f0
2228 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
2229 %0 = load i32, ptr %add.ptr, align 4
2230 %conv = sitofp i32 %0 to float
2234 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2235 define dso_local float @ld_or_float_int32_t(i64 %ptr, i8 zeroext %off) {
2236 ; CHECK-LABEL: ld_or_float_int32_t:
2237 ; CHECK: # %bb.0: # %entry
2238 ; CHECK-NEXT: or r3, r4, r3
2239 ; CHECK-NEXT: lfiwax f0, 0, r3
2240 ; CHECK-NEXT: xscvsxdsp f1, f0
2243 %conv = zext i8 %off to i64
2244 %or = or i64 %conv, %ptr
2245 %0 = inttoptr i64 %or to ptr
2246 %1 = load i32, ptr %0, align 4
2247 %conv1 = sitofp i32 %1 to float
2251 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2252 define dso_local float @ld_not_disjoint16_float_int32_t(i64 %ptr) {
2253 ; CHECK-LABEL: ld_not_disjoint16_float_int32_t:
2254 ; CHECK: # %bb.0: # %entry
2255 ; CHECK-NEXT: ori r3, r3, 6
2256 ; CHECK-NEXT: lfiwax f0, 0, r3
2257 ; CHECK-NEXT: xscvsxdsp f1, f0
2260 %or = or i64 %ptr, 6
2261 %0 = inttoptr i64 %or to ptr
2262 %1 = load i32, ptr %0, align 4
2263 %conv = sitofp i32 %1 to float
2267 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2268 define dso_local float @ld_disjoint_align16_float_int32_t(i64 %ptr) {
2269 ; CHECK-LABEL: ld_disjoint_align16_float_int32_t:
2270 ; CHECK: # %bb.0: # %entry
2271 ; CHECK-NEXT: rldicr r3, r3, 0, 51
2272 ; CHECK-NEXT: ori r3, r3, 24
2273 ; CHECK-NEXT: lfiwax f0, 0, r3
2274 ; CHECK-NEXT: xscvsxdsp f1, f0
2277 %and = and i64 %ptr, -4096
2278 %or = or i64 %and, 24
2279 %0 = inttoptr i64 %or to ptr
2280 %1 = load i32, ptr %0, align 8
2281 %conv = sitofp i32 %1 to float
2285 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2286 define dso_local float @ld_not_disjoint32_float_int32_t(i64 %ptr) {
2287 ; CHECK-LABEL: ld_not_disjoint32_float_int32_t:
2288 ; CHECK: # %bb.0: # %entry
2289 ; CHECK-NEXT: ori r3, r3, 34463
2290 ; CHECK-NEXT: oris r3, r3, 1
2291 ; CHECK-NEXT: lfiwax f0, 0, r3
2292 ; CHECK-NEXT: xscvsxdsp f1, f0
2295 %or = or i64 %ptr, 99999
2296 %0 = inttoptr i64 %or to ptr
2297 %1 = load i32, ptr %0, align 4
2298 %conv = sitofp i32 %1 to float
2302 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2303 define dso_local float @ld_disjoint_align32_float_int32_t(i64 %ptr) {
2304 ; CHECK-P10-LABEL: ld_disjoint_align32_float_int32_t:
2305 ; CHECK-P10: # %bb.0: # %entry
2306 ; CHECK-P10-NEXT: lis r4, -15264
2307 ; CHECK-P10-NEXT: and r3, r3, r4
2308 ; CHECK-P10-NEXT: pli r4, 999990000
2309 ; CHECK-P10-NEXT: lfiwax f0, r3, r4
2310 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2311 ; CHECK-P10-NEXT: blr
2313 ; CHECK-PREP10-LABEL: ld_disjoint_align32_float_int32_t:
2314 ; CHECK-PREP10: # %bb.0: # %entry
2315 ; CHECK-PREP10-NEXT: lis r4, -15264
2316 ; CHECK-PREP10-NEXT: and r3, r3, r4
2317 ; CHECK-PREP10-NEXT: lis r4, 15258
2318 ; CHECK-PREP10-NEXT: ori r4, r4, 41712
2319 ; CHECK-PREP10-NEXT: lfiwax f0, r3, r4
2320 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2321 ; CHECK-PREP10-NEXT: blr
2323 %and = and i64 %ptr, -1000341504
2324 %or = or i64 %and, 999990000
2325 %0 = inttoptr i64 %or to ptr
2326 %1 = load i32, ptr %0, align 16
2327 %conv = sitofp i32 %1 to float
2331 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2332 define dso_local float @ld_not_disjoint64_float_int32_t(i64 %ptr) {
2333 ; CHECK-P10-LABEL: ld_not_disjoint64_float_int32_t:
2334 ; CHECK-P10: # %bb.0: # %entry
2335 ; CHECK-P10-NEXT: pli r4, 232
2336 ; CHECK-P10-NEXT: pli r5, 3567587329
2337 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
2338 ; CHECK-P10-NEXT: or r3, r3, r5
2339 ; CHECK-P10-NEXT: lfiwax f0, 0, r3
2340 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2341 ; CHECK-P10-NEXT: blr
2343 ; CHECK-PREP10-LABEL: ld_not_disjoint64_float_int32_t:
2344 ; CHECK-PREP10: # %bb.0: # %entry
2345 ; CHECK-PREP10-NEXT: li r4, 29
2346 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
2347 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
2348 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
2349 ; CHECK-PREP10-NEXT: or r3, r3, r4
2350 ; CHECK-PREP10-NEXT: lfiwax f0, 0, r3
2351 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2352 ; CHECK-PREP10-NEXT: blr
2354 %or = or i64 %ptr, 1000000000001
2355 %0 = inttoptr i64 %or to ptr
2356 %1 = load i32, ptr %0, align 4
2357 %conv = sitofp i32 %1 to float
2361 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2362 define dso_local float @ld_disjoint_align64_float_int32_t(i64 %ptr) {
2363 ; CHECK-P10-LABEL: ld_disjoint_align64_float_int32_t:
2364 ; CHECK-P10: # %bb.0: # %entry
2365 ; CHECK-P10-NEXT: pli r4, 244140625
2366 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
2367 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
2368 ; CHECK-P10-NEXT: lfiwax f0, r3, r4
2369 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2370 ; CHECK-P10-NEXT: blr
2372 ; CHECK-PREP10-LABEL: ld_disjoint_align64_float_int32_t:
2373 ; CHECK-PREP10: # %bb.0: # %entry
2374 ; CHECK-PREP10-NEXT: lis r4, 3725
2375 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
2376 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
2377 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
2378 ; CHECK-PREP10-NEXT: lfiwax f0, r3, r4
2379 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2380 ; CHECK-PREP10-NEXT: blr
2382 %and = and i64 %ptr, -1099511627776
2383 %or = or i64 %and, 1000000000000
2384 %0 = inttoptr i64 %or to ptr
2385 %1 = load i32, ptr %0, align 4096
2386 %conv = sitofp i32 %1 to float
2390 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2391 define dso_local float @ld_cst_align16_float_int32_t() {
2392 ; CHECK-LABEL: ld_cst_align16_float_int32_t:
2393 ; CHECK: # %bb.0: # %entry
2394 ; CHECK-NEXT: li r3, 4080
2395 ; CHECK-NEXT: lfiwax f0, 0, r3
2396 ; CHECK-NEXT: xscvsxdsp f1, f0
2399 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 16
2400 %conv = sitofp i32 %0 to float
2404 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2405 define dso_local float @ld_cst_align32_float_int32_t() {
2406 ; CHECK-P10-LABEL: ld_cst_align32_float_int32_t:
2407 ; CHECK-P10: # %bb.0: # %entry
2408 ; CHECK-P10-NEXT: pli r3, 9999900
2409 ; CHECK-P10-NEXT: lfiwax f0, 0, r3
2410 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2411 ; CHECK-P10-NEXT: blr
2413 ; CHECK-PREP10-LABEL: ld_cst_align32_float_int32_t:
2414 ; CHECK-PREP10: # %bb.0: # %entry
2415 ; CHECK-PREP10-NEXT: lis r3, 152
2416 ; CHECK-PREP10-NEXT: ori r3, r3, 38428
2417 ; CHECK-PREP10-NEXT: lfiwax f0, 0, r3
2418 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2419 ; CHECK-PREP10-NEXT: blr
2421 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 4
2422 %conv = sitofp i32 %0 to float
2426 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2427 define dso_local float @ld_cst_align64_float_int32_t() {
2428 ; CHECK-P10-LABEL: ld_cst_align64_float_int32_t:
2429 ; CHECK-P10: # %bb.0: # %entry
2430 ; CHECK-P10-NEXT: pli r3, 244140625
2431 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
2432 ; CHECK-P10-NEXT: lfiwax f0, 0, r3
2433 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2434 ; CHECK-P10-NEXT: blr
2436 ; CHECK-PREP10-LABEL: ld_cst_align64_float_int32_t:
2437 ; CHECK-PREP10: # %bb.0: # %entry
2438 ; CHECK-PREP10-NEXT: lis r3, 3725
2439 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
2440 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
2441 ; CHECK-PREP10-NEXT: lfiwax f0, 0, r3
2442 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2443 ; CHECK-PREP10-NEXT: blr
2445 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 4096
2446 %conv = sitofp i32 %0 to float
2450 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2451 define dso_local float @ld_0_float_uint64_t(i64 %ptr) {
2452 ; CHECK-LABEL: ld_0_float_uint64_t:
2453 ; CHECK: # %bb.0: # %entry
2454 ; CHECK-NEXT: lfd f0, 0(r3)
2455 ; CHECK-NEXT: xscvuxdsp f1, f0
2458 %0 = inttoptr i64 %ptr to ptr
2459 %1 = load i64, ptr %0, align 8
2460 %conv = uitofp i64 %1 to float
2464 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2465 define dso_local float @ld_align16_float_uint64_t(ptr nocapture readonly %ptr) {
2466 ; CHECK-LABEL: ld_align16_float_uint64_t:
2467 ; CHECK: # %bb.0: # %entry
2468 ; CHECK-NEXT: lfd f0, 8(r3)
2469 ; CHECK-NEXT: xscvuxdsp f1, f0
2472 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
2473 %0 = load i64, ptr %add.ptr, align 8
2474 %conv = uitofp i64 %0 to float
2478 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2479 define dso_local float @ld_align32_float_uint64_t(ptr nocapture readonly %ptr) {
2480 ; CHECK-P10-LABEL: ld_align32_float_uint64_t:
2481 ; CHECK-P10: # %bb.0: # %entry
2482 ; CHECK-P10-NEXT: plfd f0, 99999000(r3), 0
2483 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2484 ; CHECK-P10-NEXT: blr
2486 ; CHECK-PREP10-LABEL: ld_align32_float_uint64_t:
2487 ; CHECK-PREP10: # %bb.0: # %entry
2488 ; CHECK-PREP10-NEXT: lis r4, 1525
2489 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
2490 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
2491 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2492 ; CHECK-PREP10-NEXT: blr
2494 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
2495 %0 = load i64, ptr %add.ptr, align 8
2496 %conv = uitofp i64 %0 to float
2500 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2501 define dso_local float @ld_align64_float_uint64_t(ptr nocapture readonly %ptr) {
2502 ; CHECK-P10-LABEL: ld_align64_float_uint64_t:
2503 ; CHECK-P10: # %bb.0: # %entry
2504 ; CHECK-P10-NEXT: pli r4, 244140625
2505 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
2506 ; CHECK-P10-NEXT: lfdx f0, r3, r4
2507 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2508 ; CHECK-P10-NEXT: blr
2510 ; CHECK-PREP10-LABEL: ld_align64_float_uint64_t:
2511 ; CHECK-PREP10: # %bb.0: # %entry
2512 ; CHECK-PREP10-NEXT: lis r4, 3725
2513 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
2514 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
2515 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
2516 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2517 ; CHECK-PREP10-NEXT: blr
2519 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
2520 %0 = load i64, ptr %add.ptr, align 8
2521 %conv = uitofp i64 %0 to float
2525 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2526 define dso_local float @ld_reg_float_uint64_t(ptr nocapture readonly %ptr, i64 %off) {
2527 ; CHECK-LABEL: ld_reg_float_uint64_t:
2528 ; CHECK: # %bb.0: # %entry
2529 ; CHECK-NEXT: lfdx f0, r3, r4
2530 ; CHECK-NEXT: xscvuxdsp f1, f0
2533 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
2534 %0 = load i64, ptr %add.ptr, align 8
2535 %conv = uitofp i64 %0 to float
2539 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2540 define dso_local float @ld_or_float_uint64_t(i64 %ptr, i8 zeroext %off) {
2541 ; CHECK-LABEL: ld_or_float_uint64_t:
2542 ; CHECK: # %bb.0: # %entry
2543 ; CHECK-NEXT: or r3, r4, r3
2544 ; CHECK-NEXT: lfd f0, 0(r3)
2545 ; CHECK-NEXT: xscvuxdsp f1, f0
2548 %conv = zext i8 %off to i64
2549 %or = or i64 %conv, %ptr
2550 %0 = inttoptr i64 %or to ptr
2551 %1 = load i64, ptr %0, align 8
2552 %conv1 = uitofp i64 %1 to float
2556 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2557 define dso_local float @ld_not_disjoint16_float_uint64_t(i64 %ptr) {
2558 ; CHECK-LABEL: ld_not_disjoint16_float_uint64_t:
2559 ; CHECK: # %bb.0: # %entry
2560 ; CHECK-NEXT: ori r3, r3, 6
2561 ; CHECK-NEXT: lfd f0, 0(r3)
2562 ; CHECK-NEXT: xscvuxdsp f1, f0
2565 %or = or i64 %ptr, 6
2566 %0 = inttoptr i64 %or to ptr
2567 %1 = load i64, ptr %0, align 8
2568 %conv = uitofp i64 %1 to float
2572 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2573 define dso_local float @ld_disjoint_align16_float_uint64_t(i64 %ptr) {
2574 ; CHECK-LABEL: ld_disjoint_align16_float_uint64_t:
2575 ; CHECK: # %bb.0: # %entry
2576 ; CHECK-NEXT: rldicr r3, r3, 0, 51
2577 ; CHECK-NEXT: lfd f0, 24(r3)
2578 ; CHECK-NEXT: xscvuxdsp f1, f0
2581 %and = and i64 %ptr, -4096
2582 %or = or i64 %and, 24
2583 %0 = inttoptr i64 %or to ptr
2584 %1 = load i64, ptr %0, align 8
2585 %conv = uitofp i64 %1 to float
2589 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2590 define dso_local float @ld_not_disjoint32_float_uint64_t(i64 %ptr) {
2591 ; CHECK-LABEL: ld_not_disjoint32_float_uint64_t:
2592 ; CHECK: # %bb.0: # %entry
2593 ; CHECK-NEXT: ori r3, r3, 34463
2594 ; CHECK-NEXT: oris r3, r3, 1
2595 ; CHECK-NEXT: lfd f0, 0(r3)
2596 ; CHECK-NEXT: xscvuxdsp f1, f0
2599 %or = or i64 %ptr, 99999
2600 %0 = inttoptr i64 %or to ptr
2601 %1 = load i64, ptr %0, align 8
2602 %conv = uitofp i64 %1 to float
2606 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2607 define dso_local float @ld_disjoint_align32_float_uint64_t(i64 %ptr) {
2608 ; CHECK-P10-LABEL: ld_disjoint_align32_float_uint64_t:
2609 ; CHECK-P10: # %bb.0: # %entry
2610 ; CHECK-P10-NEXT: lis r4, -15264
2611 ; CHECK-P10-NEXT: and r3, r3, r4
2612 ; CHECK-P10-NEXT: plfd f0, 999990000(r3), 0
2613 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2614 ; CHECK-P10-NEXT: blr
2616 ; CHECK-PREP10-LABEL: ld_disjoint_align32_float_uint64_t:
2617 ; CHECK-PREP10: # %bb.0: # %entry
2618 ; CHECK-PREP10-NEXT: lis r4, -15264
2619 ; CHECK-PREP10-NEXT: and r3, r3, r4
2620 ; CHECK-PREP10-NEXT: lis r4, 15258
2621 ; CHECK-PREP10-NEXT: ori r4, r4, 41712
2622 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
2623 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2624 ; CHECK-PREP10-NEXT: blr
2626 %and = and i64 %ptr, -1000341504
2627 %or = or i64 %and, 999990000
2628 %0 = inttoptr i64 %or to ptr
2629 %1 = load i64, ptr %0, align 16
2630 %conv = uitofp i64 %1 to float
2634 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2635 define dso_local float @ld_not_disjoint64_float_uint64_t(i64 %ptr) {
2636 ; CHECK-P10-LABEL: ld_not_disjoint64_float_uint64_t:
2637 ; CHECK-P10: # %bb.0: # %entry
2638 ; CHECK-P10-NEXT: pli r4, 232
2639 ; CHECK-P10-NEXT: pli r5, 3567587329
2640 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
2641 ; CHECK-P10-NEXT: or r3, r3, r5
2642 ; CHECK-P10-NEXT: lfd f0, 0(r3)
2643 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2644 ; CHECK-P10-NEXT: blr
2646 ; CHECK-PREP10-LABEL: ld_not_disjoint64_float_uint64_t:
2647 ; CHECK-PREP10: # %bb.0: # %entry
2648 ; CHECK-PREP10-NEXT: li r4, 29
2649 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
2650 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
2651 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
2652 ; CHECK-PREP10-NEXT: or r3, r3, r4
2653 ; CHECK-PREP10-NEXT: lfd f0, 0(r3)
2654 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2655 ; CHECK-PREP10-NEXT: blr
2657 %or = or i64 %ptr, 1000000000001
2658 %0 = inttoptr i64 %or to ptr
2659 %1 = load i64, ptr %0, align 8
2660 %conv = uitofp i64 %1 to float
2664 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2665 define dso_local float @ld_disjoint_align64_float_uint64_t(i64 %ptr) {
2666 ; CHECK-P10-LABEL: ld_disjoint_align64_float_uint64_t:
2667 ; CHECK-P10: # %bb.0: # %entry
2668 ; CHECK-P10-NEXT: pli r4, 244140625
2669 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
2670 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
2671 ; CHECK-P10-NEXT: lfdx f0, r3, r4
2672 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2673 ; CHECK-P10-NEXT: blr
2675 ; CHECK-PREP10-LABEL: ld_disjoint_align64_float_uint64_t:
2676 ; CHECK-PREP10: # %bb.0: # %entry
2677 ; CHECK-PREP10-NEXT: lis r4, 3725
2678 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
2679 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
2680 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
2681 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
2682 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2683 ; CHECK-PREP10-NEXT: blr
2685 %and = and i64 %ptr, -1099511627776
2686 %or = or i64 %and, 1000000000000
2687 %0 = inttoptr i64 %or to ptr
2688 %1 = load i64, ptr %0, align 4096
2689 %conv = uitofp i64 %1 to float
2693 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2694 define dso_local float @ld_cst_align16_float_uint64_t() {
2695 ; CHECK-LABEL: ld_cst_align16_float_uint64_t:
2696 ; CHECK: # %bb.0: # %entry
2697 ; CHECK-NEXT: lfd f0, 4080(0)
2698 ; CHECK-NEXT: xscvuxdsp f1, f0
2701 %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 16
2702 %conv = uitofp i64 %0 to float
2706 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2707 define dso_local float @ld_cst_align32_float_uint64_t() {
2708 ; CHECK-LABEL: ld_cst_align32_float_uint64_t:
2709 ; CHECK: # %bb.0: # %entry
2710 ; CHECK-NEXT: lis r3, 153
2711 ; CHECK-NEXT: lfd f0, -27108(r3)
2712 ; CHECK-NEXT: xscvuxdsp f1, f0
2715 %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 8
2716 %conv = uitofp i64 %0 to float
2720 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2721 define dso_local float @ld_cst_align64_float_uint64_t() {
2722 ; CHECK-P10-LABEL: ld_cst_align64_float_uint64_t:
2723 ; CHECK-P10: # %bb.0: # %entry
2724 ; CHECK-P10-NEXT: pli r3, 244140625
2725 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
2726 ; CHECK-P10-NEXT: lfd f0, 0(r3)
2727 ; CHECK-P10-NEXT: xscvuxdsp f1, f0
2728 ; CHECK-P10-NEXT: blr
2730 ; CHECK-PREP10-LABEL: ld_cst_align64_float_uint64_t:
2731 ; CHECK-PREP10: # %bb.0: # %entry
2732 ; CHECK-PREP10-NEXT: lis r3, 3725
2733 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
2734 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
2735 ; CHECK-PREP10-NEXT: lfd f0, 0(r3)
2736 ; CHECK-PREP10-NEXT: xscvuxdsp f1, f0
2737 ; CHECK-PREP10-NEXT: blr
2739 %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 4096
2740 %conv = uitofp i64 %0 to float
2744 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2745 define dso_local float @ld_0_float_int64_t(i64 %ptr) {
2746 ; CHECK-LABEL: ld_0_float_int64_t:
2747 ; CHECK: # %bb.0: # %entry
2748 ; CHECK-NEXT: lfd f0, 0(r3)
2749 ; CHECK-NEXT: xscvsxdsp f1, f0
2752 %0 = inttoptr i64 %ptr to ptr
2753 %1 = load i64, ptr %0, align 8
2754 %conv = sitofp i64 %1 to float
2758 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2759 define dso_local float @ld_align16_float_int64_t(ptr nocapture readonly %ptr) {
2760 ; CHECK-LABEL: ld_align16_float_int64_t:
2761 ; CHECK: # %bb.0: # %entry
2762 ; CHECK-NEXT: lfd f0, 8(r3)
2763 ; CHECK-NEXT: xscvsxdsp f1, f0
2766 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
2767 %0 = load i64, ptr %add.ptr, align 8
2768 %conv = sitofp i64 %0 to float
2772 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2773 define dso_local float @ld_align32_float_int64_t(ptr nocapture readonly %ptr) {
2774 ; CHECK-P10-LABEL: ld_align32_float_int64_t:
2775 ; CHECK-P10: # %bb.0: # %entry
2776 ; CHECK-P10-NEXT: plfd f0, 99999000(r3), 0
2777 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2778 ; CHECK-P10-NEXT: blr
2780 ; CHECK-PREP10-LABEL: ld_align32_float_int64_t:
2781 ; CHECK-PREP10: # %bb.0: # %entry
2782 ; CHECK-PREP10-NEXT: lis r4, 1525
2783 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
2784 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
2785 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2786 ; CHECK-PREP10-NEXT: blr
2788 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
2789 %0 = load i64, ptr %add.ptr, align 8
2790 %conv = sitofp i64 %0 to float
2794 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2795 define dso_local float @ld_align64_float_int64_t(ptr nocapture readonly %ptr) {
2796 ; CHECK-P10-LABEL: ld_align64_float_int64_t:
2797 ; CHECK-P10: # %bb.0: # %entry
2798 ; CHECK-P10-NEXT: pli r4, 244140625
2799 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
2800 ; CHECK-P10-NEXT: lfdx f0, r3, r4
2801 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2802 ; CHECK-P10-NEXT: blr
2804 ; CHECK-PREP10-LABEL: ld_align64_float_int64_t:
2805 ; CHECK-PREP10: # %bb.0: # %entry
2806 ; CHECK-PREP10-NEXT: lis r4, 3725
2807 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
2808 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
2809 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
2810 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2811 ; CHECK-PREP10-NEXT: blr
2813 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
2814 %0 = load i64, ptr %add.ptr, align 8
2815 %conv = sitofp i64 %0 to float
2819 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2820 define dso_local float @ld_reg_float_int64_t(ptr nocapture readonly %ptr, i64 %off) {
2821 ; CHECK-LABEL: ld_reg_float_int64_t:
2822 ; CHECK: # %bb.0: # %entry
2823 ; CHECK-NEXT: lfdx f0, r3, r4
2824 ; CHECK-NEXT: xscvsxdsp f1, f0
2827 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
2828 %0 = load i64, ptr %add.ptr, align 8
2829 %conv = sitofp i64 %0 to float
2833 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2834 define dso_local float @ld_or_float_int64_t(i64 %ptr, i8 zeroext %off) {
2835 ; CHECK-LABEL: ld_or_float_int64_t:
2836 ; CHECK: # %bb.0: # %entry
2837 ; CHECK-NEXT: or r3, r4, r3
2838 ; CHECK-NEXT: lfd f0, 0(r3)
2839 ; CHECK-NEXT: xscvsxdsp f1, f0
2842 %conv = zext i8 %off to i64
2843 %or = or i64 %conv, %ptr
2844 %0 = inttoptr i64 %or to ptr
2845 %1 = load i64, ptr %0, align 8
2846 %conv1 = sitofp i64 %1 to float
2850 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2851 define dso_local float @ld_not_disjoint16_float_int64_t(i64 %ptr) {
2852 ; CHECK-LABEL: ld_not_disjoint16_float_int64_t:
2853 ; CHECK: # %bb.0: # %entry
2854 ; CHECK-NEXT: ori r3, r3, 6
2855 ; CHECK-NEXT: lfd f0, 0(r3)
2856 ; CHECK-NEXT: xscvsxdsp f1, f0
2859 %or = or i64 %ptr, 6
2860 %0 = inttoptr i64 %or to ptr
2861 %1 = load i64, ptr %0, align 8
2862 %conv = sitofp i64 %1 to float
2866 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2867 define dso_local float @ld_disjoint_align16_float_int64_t(i64 %ptr) {
2868 ; CHECK-LABEL: ld_disjoint_align16_float_int64_t:
2869 ; CHECK: # %bb.0: # %entry
2870 ; CHECK-NEXT: rldicr r3, r3, 0, 51
2871 ; CHECK-NEXT: lfd f0, 24(r3)
2872 ; CHECK-NEXT: xscvsxdsp f1, f0
2875 %and = and i64 %ptr, -4096
2876 %or = or i64 %and, 24
2877 %0 = inttoptr i64 %or to ptr
2878 %1 = load i64, ptr %0, align 8
2879 %conv = sitofp i64 %1 to float
2883 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2884 define dso_local float @ld_not_disjoint32_float_int64_t(i64 %ptr) {
2885 ; CHECK-LABEL: ld_not_disjoint32_float_int64_t:
2886 ; CHECK: # %bb.0: # %entry
2887 ; CHECK-NEXT: ori r3, r3, 34463
2888 ; CHECK-NEXT: oris r3, r3, 1
2889 ; CHECK-NEXT: lfd f0, 0(r3)
2890 ; CHECK-NEXT: xscvsxdsp f1, f0
2893 %or = or i64 %ptr, 99999
2894 %0 = inttoptr i64 %or to ptr
2895 %1 = load i64, ptr %0, align 8
2896 %conv = sitofp i64 %1 to float
2900 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2901 define dso_local float @ld_disjoint_align32_float_int64_t(i64 %ptr) {
2902 ; CHECK-P10-LABEL: ld_disjoint_align32_float_int64_t:
2903 ; CHECK-P10: # %bb.0: # %entry
2904 ; CHECK-P10-NEXT: lis r4, -15264
2905 ; CHECK-P10-NEXT: and r3, r3, r4
2906 ; CHECK-P10-NEXT: plfd f0, 999990000(r3), 0
2907 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2908 ; CHECK-P10-NEXT: blr
2910 ; CHECK-PREP10-LABEL: ld_disjoint_align32_float_int64_t:
2911 ; CHECK-PREP10: # %bb.0: # %entry
2912 ; CHECK-PREP10-NEXT: lis r4, -15264
2913 ; CHECK-PREP10-NEXT: and r3, r3, r4
2914 ; CHECK-PREP10-NEXT: lis r4, 15258
2915 ; CHECK-PREP10-NEXT: ori r4, r4, 41712
2916 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
2917 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2918 ; CHECK-PREP10-NEXT: blr
2920 %and = and i64 %ptr, -1000341504
2921 %or = or i64 %and, 999990000
2922 %0 = inttoptr i64 %or to ptr
2923 %1 = load i64, ptr %0, align 16
2924 %conv = sitofp i64 %1 to float
2928 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2929 define dso_local float @ld_not_disjoint64_float_int64_t(i64 %ptr) {
2930 ; CHECK-P10-LABEL: ld_not_disjoint64_float_int64_t:
2931 ; CHECK-P10: # %bb.0: # %entry
2932 ; CHECK-P10-NEXT: pli r4, 232
2933 ; CHECK-P10-NEXT: pli r5, 3567587329
2934 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
2935 ; CHECK-P10-NEXT: or r3, r3, r5
2936 ; CHECK-P10-NEXT: lfd f0, 0(r3)
2937 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2938 ; CHECK-P10-NEXT: blr
2940 ; CHECK-PREP10-LABEL: ld_not_disjoint64_float_int64_t:
2941 ; CHECK-PREP10: # %bb.0: # %entry
2942 ; CHECK-PREP10-NEXT: li r4, 29
2943 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
2944 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
2945 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
2946 ; CHECK-PREP10-NEXT: or r3, r3, r4
2947 ; CHECK-PREP10-NEXT: lfd f0, 0(r3)
2948 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2949 ; CHECK-PREP10-NEXT: blr
2951 %or = or i64 %ptr, 1000000000001
2952 %0 = inttoptr i64 %or to ptr
2953 %1 = load i64, ptr %0, align 8
2954 %conv = sitofp i64 %1 to float
2958 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2959 define dso_local float @ld_disjoint_align64_float_int64_t(i64 %ptr) {
2960 ; CHECK-P10-LABEL: ld_disjoint_align64_float_int64_t:
2961 ; CHECK-P10: # %bb.0: # %entry
2962 ; CHECK-P10-NEXT: pli r4, 244140625
2963 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
2964 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
2965 ; CHECK-P10-NEXT: lfdx f0, r3, r4
2966 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
2967 ; CHECK-P10-NEXT: blr
2969 ; CHECK-PREP10-LABEL: ld_disjoint_align64_float_int64_t:
2970 ; CHECK-PREP10: # %bb.0: # %entry
2971 ; CHECK-PREP10-NEXT: lis r4, 3725
2972 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
2973 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
2974 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
2975 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
2976 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
2977 ; CHECK-PREP10-NEXT: blr
2979 %and = and i64 %ptr, -1099511627776
2980 %or = or i64 %and, 1000000000000
2981 %0 = inttoptr i64 %or to ptr
2982 %1 = load i64, ptr %0, align 4096
2983 %conv = sitofp i64 %1 to float
2987 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
2988 define dso_local float @ld_cst_align16_float_int64_t() {
2989 ; CHECK-LABEL: ld_cst_align16_float_int64_t:
2990 ; CHECK: # %bb.0: # %entry
2991 ; CHECK-NEXT: lfd f0, 4080(0)
2992 ; CHECK-NEXT: xscvsxdsp f1, f0
2995 %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 16
2996 %conv = sitofp i64 %0 to float
3000 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3001 define dso_local float @ld_cst_align32_float_int64_t() {
3002 ; CHECK-LABEL: ld_cst_align32_float_int64_t:
3003 ; CHECK: # %bb.0: # %entry
3004 ; CHECK-NEXT: lis r3, 153
3005 ; CHECK-NEXT: lfd f0, -27108(r3)
3006 ; CHECK-NEXT: xscvsxdsp f1, f0
3009 %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 8
3010 %conv = sitofp i64 %0 to float
3014 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3015 define dso_local float @ld_cst_align64_float_int64_t() {
3016 ; CHECK-P10-LABEL: ld_cst_align64_float_int64_t:
3017 ; CHECK-P10: # %bb.0: # %entry
3018 ; CHECK-P10-NEXT: pli r3, 244140625
3019 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
3020 ; CHECK-P10-NEXT: lfd f0, 0(r3)
3021 ; CHECK-P10-NEXT: xscvsxdsp f1, f0
3022 ; CHECK-P10-NEXT: blr
3024 ; CHECK-PREP10-LABEL: ld_cst_align64_float_int64_t:
3025 ; CHECK-PREP10: # %bb.0: # %entry
3026 ; CHECK-PREP10-NEXT: lis r3, 3725
3027 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
3028 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
3029 ; CHECK-PREP10-NEXT: lfd f0, 0(r3)
3030 ; CHECK-PREP10-NEXT: xscvsxdsp f1, f0
3031 ; CHECK-PREP10-NEXT: blr
3033 %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 4096
3034 %conv = sitofp i64 %0 to float
3038 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3039 define dso_local float @ld_0_float_float(i64 %ptr) {
3040 ; CHECK-LABEL: ld_0_float_float:
3041 ; CHECK: # %bb.0: # %entry
3042 ; CHECK-NEXT: lfs f1, 0(r3)
3045 %0 = inttoptr i64 %ptr to ptr
3046 %1 = load float, ptr %0, align 4
3050 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3051 define dso_local float @ld_align16_float_float(ptr nocapture readonly %ptr) {
3052 ; CHECK-LABEL: ld_align16_float_float:
3053 ; CHECK: # %bb.0: # %entry
3054 ; CHECK-NEXT: lfs f1, 8(r3)
3057 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
3058 %0 = load float, ptr %add.ptr, align 4
3062 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3063 define dso_local float @ld_align32_float_float(ptr nocapture readonly %ptr) {
3064 ; CHECK-P10-LABEL: ld_align32_float_float:
3065 ; CHECK-P10: # %bb.0: # %entry
3066 ; CHECK-P10-NEXT: plfs f1, 99999000(r3), 0
3067 ; CHECK-P10-NEXT: blr
3069 ; CHECK-PREP10-LABEL: ld_align32_float_float:
3070 ; CHECK-PREP10: # %bb.0: # %entry
3071 ; CHECK-PREP10-NEXT: lis r4, 1525
3072 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
3073 ; CHECK-PREP10-NEXT: lfsx f1, r3, r4
3074 ; CHECK-PREP10-NEXT: blr
3076 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
3077 %0 = load float, ptr %add.ptr, align 4
3081 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3082 define dso_local float @ld_align64_float_float(ptr nocapture readonly %ptr) {
3083 ; CHECK-P10-LABEL: ld_align64_float_float:
3084 ; CHECK-P10: # %bb.0: # %entry
3085 ; CHECK-P10-NEXT: pli r4, 244140625
3086 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
3087 ; CHECK-P10-NEXT: lfsx f1, r3, r4
3088 ; CHECK-P10-NEXT: blr
3090 ; CHECK-PREP10-LABEL: ld_align64_float_float:
3091 ; CHECK-PREP10: # %bb.0: # %entry
3092 ; CHECK-PREP10-NEXT: lis r4, 3725
3093 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
3094 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
3095 ; CHECK-PREP10-NEXT: lfsx f1, r3, r4
3096 ; CHECK-PREP10-NEXT: blr
3098 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
3099 %0 = load float, ptr %add.ptr, align 4
3103 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3104 define dso_local float @ld_reg_float_float(ptr nocapture readonly %ptr, i64 %off) {
3105 ; CHECK-LABEL: ld_reg_float_float:
3106 ; CHECK: # %bb.0: # %entry
3107 ; CHECK-NEXT: lfsx f1, r3, r4
3110 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
3111 %0 = load float, ptr %add.ptr, align 4
3115 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3116 define dso_local float @ld_or_float_float(i64 %ptr, i8 zeroext %off) {
3117 ; CHECK-LABEL: ld_or_float_float:
3118 ; CHECK: # %bb.0: # %entry
3119 ; CHECK-NEXT: or r3, r4, r3
3120 ; CHECK-NEXT: lfs f1, 0(r3)
3123 %conv = zext i8 %off to i64
3124 %or = or i64 %conv, %ptr
3125 %0 = inttoptr i64 %or to ptr
3126 %1 = load float, ptr %0, align 4
3130 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3131 define dso_local float @ld_not_disjoint16_float_float(i64 %ptr) {
3132 ; CHECK-LABEL: ld_not_disjoint16_float_float:
3133 ; CHECK: # %bb.0: # %entry
3134 ; CHECK-NEXT: ori r3, r3, 6
3135 ; CHECK-NEXT: lfs f1, 0(r3)
3138 %or = or i64 %ptr, 6
3139 %0 = inttoptr i64 %or to ptr
3140 %1 = load float, ptr %0, align 4
3144 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3145 define dso_local float @ld_disjoint_align16_float_float(i64 %ptr) {
3146 ; CHECK-LABEL: ld_disjoint_align16_float_float:
3147 ; CHECK: # %bb.0: # %entry
3148 ; CHECK-NEXT: rldicr r3, r3, 0, 51
3149 ; CHECK-NEXT: lfs f1, 24(r3)
3152 %and = and i64 %ptr, -4096
3153 %or = or i64 %and, 24
3154 %0 = inttoptr i64 %or to ptr
3155 %1 = load float, ptr %0, align 8
3159 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3160 define dso_local float @ld_not_disjoint32_float_float(i64 %ptr) {
3161 ; CHECK-LABEL: ld_not_disjoint32_float_float:
3162 ; CHECK: # %bb.0: # %entry
3163 ; CHECK-NEXT: ori r3, r3, 34463
3164 ; CHECK-NEXT: oris r3, r3, 1
3165 ; CHECK-NEXT: lfs f1, 0(r3)
3168 %or = or i64 %ptr, 99999
3169 %0 = inttoptr i64 %or to ptr
3170 %1 = load float, ptr %0, align 4
3174 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3175 define dso_local float @ld_disjoint_align32_float_float(i64 %ptr) {
3176 ; CHECK-P10-LABEL: ld_disjoint_align32_float_float:
3177 ; CHECK-P10: # %bb.0: # %entry
3178 ; CHECK-P10-NEXT: lis r4, -15264
3179 ; CHECK-P10-NEXT: and r3, r3, r4
3180 ; CHECK-P10-NEXT: plfs f1, 999990000(r3), 0
3181 ; CHECK-P10-NEXT: blr
3183 ; CHECK-PREP10-LABEL: ld_disjoint_align32_float_float:
3184 ; CHECK-PREP10: # %bb.0: # %entry
3185 ; CHECK-PREP10-NEXT: lis r4, -15264
3186 ; CHECK-PREP10-NEXT: and r3, r3, r4
3187 ; CHECK-PREP10-NEXT: lis r4, 15258
3188 ; CHECK-PREP10-NEXT: ori r4, r4, 41712
3189 ; CHECK-PREP10-NEXT: lfsx f1, r3, r4
3190 ; CHECK-PREP10-NEXT: blr
3192 %and = and i64 %ptr, -1000341504
3193 %or = or i64 %and, 999990000
3194 %0 = inttoptr i64 %or to ptr
3195 %1 = load float, ptr %0, align 16
3199 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3200 define dso_local float @ld_not_disjoint64_float_float(i64 %ptr) {
3201 ; CHECK-P10-LABEL: ld_not_disjoint64_float_float:
3202 ; CHECK-P10: # %bb.0: # %entry
3203 ; CHECK-P10-NEXT: pli r4, 232
3204 ; CHECK-P10-NEXT: pli r5, 3567587329
3205 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
3206 ; CHECK-P10-NEXT: or r3, r3, r5
3207 ; CHECK-P10-NEXT: lfs f1, 0(r3)
3208 ; CHECK-P10-NEXT: blr
3210 ; CHECK-PREP10-LABEL: ld_not_disjoint64_float_float:
3211 ; CHECK-PREP10: # %bb.0: # %entry
3212 ; CHECK-PREP10-NEXT: li r4, 29
3213 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
3214 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
3215 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
3216 ; CHECK-PREP10-NEXT: or r3, r3, r4
3217 ; CHECK-PREP10-NEXT: lfs f1, 0(r3)
3218 ; CHECK-PREP10-NEXT: blr
3220 %or = or i64 %ptr, 1000000000001
3221 %0 = inttoptr i64 %or to ptr
3222 %1 = load float, ptr %0, align 4
3226 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3227 define dso_local float @ld_disjoint_align64_float_float(i64 %ptr) {
3228 ; CHECK-P10-LABEL: ld_disjoint_align64_float_float:
3229 ; CHECK-P10: # %bb.0: # %entry
3230 ; CHECK-P10-NEXT: pli r4, 244140625
3231 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
3232 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
3233 ; CHECK-P10-NEXT: lfsx f1, r3, r4
3234 ; CHECK-P10-NEXT: blr
3236 ; CHECK-PREP10-LABEL: ld_disjoint_align64_float_float:
3237 ; CHECK-PREP10: # %bb.0: # %entry
3238 ; CHECK-PREP10-NEXT: lis r4, 3725
3239 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
3240 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
3241 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
3242 ; CHECK-PREP10-NEXT: lfsx f1, r3, r4
3243 ; CHECK-PREP10-NEXT: blr
3245 %and = and i64 %ptr, -1099511627776
3246 %or = or i64 %and, 1000000000000
3247 %0 = inttoptr i64 %or to ptr
3248 %1 = load float, ptr %0, align 4096
3252 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3253 define dso_local float @ld_cst_align16_float_float() {
3254 ; CHECK-LABEL: ld_cst_align16_float_float:
3255 ; CHECK: # %bb.0: # %entry
3256 ; CHECK-NEXT: lfs f1, 4080(0)
3259 %0 = load float, ptr inttoptr (i64 4080 to ptr), align 16
3263 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3264 define dso_local float @ld_cst_align32_float_float() {
3265 ; CHECK-LABEL: ld_cst_align32_float_float:
3266 ; CHECK: # %bb.0: # %entry
3267 ; CHECK-NEXT: lis r3, 153
3268 ; CHECK-NEXT: lfs f1, -27108(r3)
3271 %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 4
3275 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3276 define dso_local float @ld_cst_align64_float_float() {
3277 ; CHECK-P10-LABEL: ld_cst_align64_float_float:
3278 ; CHECK-P10: # %bb.0: # %entry
3279 ; CHECK-P10-NEXT: pli r3, 244140625
3280 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
3281 ; CHECK-P10-NEXT: lfs f1, 0(r3)
3282 ; CHECK-P10-NEXT: blr
3284 ; CHECK-PREP10-LABEL: ld_cst_align64_float_float:
3285 ; CHECK-PREP10: # %bb.0: # %entry
3286 ; CHECK-PREP10-NEXT: lis r3, 3725
3287 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
3288 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
3289 ; CHECK-PREP10-NEXT: lfs f1, 0(r3)
3290 ; CHECK-PREP10-NEXT: blr
3292 %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 4096
3296 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3297 define dso_local float @ld_0_float_double(i64 %ptr) {
3298 ; CHECK-LABEL: ld_0_float_double:
3299 ; CHECK: # %bb.0: # %entry
3300 ; CHECK-NEXT: lfd f0, 0(r3)
3301 ; CHECK-NEXT: xsrsp f1, f0
3304 %0 = inttoptr i64 %ptr to ptr
3305 %1 = load double, ptr %0, align 8
3306 %conv = fptrunc double %1 to float
3310 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3311 define dso_local float @ld_align16_float_double(ptr nocapture readonly %ptr) {
3312 ; CHECK-LABEL: ld_align16_float_double:
3313 ; CHECK: # %bb.0: # %entry
3314 ; CHECK-NEXT: lfd f0, 8(r3)
3315 ; CHECK-NEXT: xsrsp f1, f0
3318 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
3319 %0 = load double, ptr %add.ptr, align 8
3320 %conv = fptrunc double %0 to float
3324 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3325 define dso_local float @ld_align32_float_double(ptr nocapture readonly %ptr) {
3326 ; CHECK-P10-LABEL: ld_align32_float_double:
3327 ; CHECK-P10: # %bb.0: # %entry
3328 ; CHECK-P10-NEXT: plfd f0, 99999000(r3), 0
3329 ; CHECK-P10-NEXT: xsrsp f1, f0
3330 ; CHECK-P10-NEXT: blr
3332 ; CHECK-PREP10-LABEL: ld_align32_float_double:
3333 ; CHECK-PREP10: # %bb.0: # %entry
3334 ; CHECK-PREP10-NEXT: lis r4, 1525
3335 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
3336 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
3337 ; CHECK-PREP10-NEXT: xsrsp f1, f0
3338 ; CHECK-PREP10-NEXT: blr
3340 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
3341 %0 = load double, ptr %add.ptr, align 8
3342 %conv = fptrunc double %0 to float
3346 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3347 define dso_local float @ld_align64_float_double(ptr nocapture readonly %ptr) {
3348 ; CHECK-P10-LABEL: ld_align64_float_double:
3349 ; CHECK-P10: # %bb.0: # %entry
3350 ; CHECK-P10-NEXT: pli r4, 244140625
3351 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
3352 ; CHECK-P10-NEXT: lfdx f0, r3, r4
3353 ; CHECK-P10-NEXT: xsrsp f1, f0
3354 ; CHECK-P10-NEXT: blr
3356 ; CHECK-PREP10-LABEL: ld_align64_float_double:
3357 ; CHECK-PREP10: # %bb.0: # %entry
3358 ; CHECK-PREP10-NEXT: lis r4, 3725
3359 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
3360 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
3361 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
3362 ; CHECK-PREP10-NEXT: xsrsp f1, f0
3363 ; CHECK-PREP10-NEXT: blr
3365 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
3366 %0 = load double, ptr %add.ptr, align 8
3367 %conv = fptrunc double %0 to float
3371 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3372 define dso_local float @ld_reg_float_double(ptr nocapture readonly %ptr, i64 %off) {
3373 ; CHECK-LABEL: ld_reg_float_double:
3374 ; CHECK: # %bb.0: # %entry
3375 ; CHECK-NEXT: lfdx f0, r3, r4
3376 ; CHECK-NEXT: xsrsp f1, f0
3379 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
3380 %0 = load double, ptr %add.ptr, align 8
3381 %conv = fptrunc double %0 to float
3385 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3386 define dso_local float @ld_or_float_double(i64 %ptr, i8 zeroext %off) {
3387 ; CHECK-LABEL: ld_or_float_double:
3388 ; CHECK: # %bb.0: # %entry
3389 ; CHECK-NEXT: or r3, r4, r3
3390 ; CHECK-NEXT: lfd f0, 0(r3)
3391 ; CHECK-NEXT: xsrsp f1, f0
3394 %conv = zext i8 %off to i64
3395 %or = or i64 %conv, %ptr
3396 %0 = inttoptr i64 %or to ptr
3397 %1 = load double, ptr %0, align 8
3398 %conv1 = fptrunc double %1 to float
3402 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3403 define dso_local float @ld_not_disjoint16_float_double(i64 %ptr) {
3404 ; CHECK-LABEL: ld_not_disjoint16_float_double:
3405 ; CHECK: # %bb.0: # %entry
3406 ; CHECK-NEXT: ori r3, r3, 6
3407 ; CHECK-NEXT: lfd f0, 0(r3)
3408 ; CHECK-NEXT: xsrsp f1, f0
3411 %or = or i64 %ptr, 6
3412 %0 = inttoptr i64 %or to ptr
3413 %1 = load double, ptr %0, align 8
3414 %conv = fptrunc double %1 to float
3418 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3419 define dso_local float @ld_disjoint_align16_float_double(i64 %ptr) {
3420 ; CHECK-LABEL: ld_disjoint_align16_float_double:
3421 ; CHECK: # %bb.0: # %entry
3422 ; CHECK-NEXT: rldicr r3, r3, 0, 51
3423 ; CHECK-NEXT: lfd f0, 24(r3)
3424 ; CHECK-NEXT: xsrsp f1, f0
3427 %and = and i64 %ptr, -4096
3428 %or = or i64 %and, 24
3429 %0 = inttoptr i64 %or to ptr
3430 %1 = load double, ptr %0, align 8
3431 %conv = fptrunc double %1 to float
3435 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3436 define dso_local float @ld_not_disjoint32_float_double(i64 %ptr) {
3437 ; CHECK-LABEL: ld_not_disjoint32_float_double:
3438 ; CHECK: # %bb.0: # %entry
3439 ; CHECK-NEXT: ori r3, r3, 34463
3440 ; CHECK-NEXT: oris r3, r3, 1
3441 ; CHECK-NEXT: lfd f0, 0(r3)
3442 ; CHECK-NEXT: xsrsp f1, f0
3445 %or = or i64 %ptr, 99999
3446 %0 = inttoptr i64 %or to ptr
3447 %1 = load double, ptr %0, align 8
3448 %conv = fptrunc double %1 to float
3452 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3453 define dso_local float @ld_disjoint_align32_float_double(i64 %ptr) {
3454 ; CHECK-P10-LABEL: ld_disjoint_align32_float_double:
3455 ; CHECK-P10: # %bb.0: # %entry
3456 ; CHECK-P10-NEXT: lis r4, -15264
3457 ; CHECK-P10-NEXT: and r3, r3, r4
3458 ; CHECK-P10-NEXT: plfd f0, 999990000(r3), 0
3459 ; CHECK-P10-NEXT: xsrsp f1, f0
3460 ; CHECK-P10-NEXT: blr
3462 ; CHECK-PREP10-LABEL: ld_disjoint_align32_float_double:
3463 ; CHECK-PREP10: # %bb.0: # %entry
3464 ; CHECK-PREP10-NEXT: lis r4, -15264
3465 ; CHECK-PREP10-NEXT: and r3, r3, r4
3466 ; CHECK-PREP10-NEXT: lis r4, 15258
3467 ; CHECK-PREP10-NEXT: ori r4, r4, 41712
3468 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
3469 ; CHECK-PREP10-NEXT: xsrsp f1, f0
3470 ; CHECK-PREP10-NEXT: blr
3472 %and = and i64 %ptr, -1000341504
3473 %or = or i64 %and, 999990000
3474 %0 = inttoptr i64 %or to ptr
3475 %1 = load double, ptr %0, align 16
3476 %conv = fptrunc double %1 to float
3480 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3481 define dso_local float @ld_not_disjoint64_float_double(i64 %ptr) {
3482 ; CHECK-P10-LABEL: ld_not_disjoint64_float_double:
3483 ; CHECK-P10: # %bb.0: # %entry
3484 ; CHECK-P10-NEXT: pli r4, 232
3485 ; CHECK-P10-NEXT: pli r5, 3567587329
3486 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
3487 ; CHECK-P10-NEXT: or r3, r3, r5
3488 ; CHECK-P10-NEXT: lfd f0, 0(r3)
3489 ; CHECK-P10-NEXT: xsrsp f1, f0
3490 ; CHECK-P10-NEXT: blr
3492 ; CHECK-PREP10-LABEL: ld_not_disjoint64_float_double:
3493 ; CHECK-PREP10: # %bb.0: # %entry
3494 ; CHECK-PREP10-NEXT: li r4, 29
3495 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
3496 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
3497 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
3498 ; CHECK-PREP10-NEXT: or r3, r3, r4
3499 ; CHECK-PREP10-NEXT: lfd f0, 0(r3)
3500 ; CHECK-PREP10-NEXT: xsrsp f1, f0
3501 ; CHECK-PREP10-NEXT: blr
3503 %or = or i64 %ptr, 1000000000001
3504 %0 = inttoptr i64 %or to ptr
3505 %1 = load double, ptr %0, align 8
3506 %conv = fptrunc double %1 to float
3510 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3511 define dso_local float @ld_disjoint_align64_float_double(i64 %ptr) {
3512 ; CHECK-P10-LABEL: ld_disjoint_align64_float_double:
3513 ; CHECK-P10: # %bb.0: # %entry
3514 ; CHECK-P10-NEXT: pli r4, 244140625
3515 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
3516 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
3517 ; CHECK-P10-NEXT: lfdx f0, r3, r4
3518 ; CHECK-P10-NEXT: xsrsp f1, f0
3519 ; CHECK-P10-NEXT: blr
3521 ; CHECK-PREP10-LABEL: ld_disjoint_align64_float_double:
3522 ; CHECK-PREP10: # %bb.0: # %entry
3523 ; CHECK-PREP10-NEXT: lis r4, 3725
3524 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
3525 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
3526 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
3527 ; CHECK-PREP10-NEXT: lfdx f0, r3, r4
3528 ; CHECK-PREP10-NEXT: xsrsp f1, f0
3529 ; CHECK-PREP10-NEXT: blr
3531 %and = and i64 %ptr, -1099511627776
3532 %or = or i64 %and, 1000000000000
3533 %0 = inttoptr i64 %or to ptr
3534 %1 = load double, ptr %0, align 4096
3535 %conv = fptrunc double %1 to float
3539 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3540 define dso_local float @ld_cst_align16_float_double() {
3541 ; CHECK-LABEL: ld_cst_align16_float_double:
3542 ; CHECK: # %bb.0: # %entry
3543 ; CHECK-NEXT: lfd f0, 4080(0)
3544 ; CHECK-NEXT: xsrsp f1, f0
3547 %0 = load double, ptr inttoptr (i64 4080 to ptr), align 16
3548 %conv = fptrunc double %0 to float
3552 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3553 define dso_local float @ld_cst_align32_float_double() {
3554 ; CHECK-LABEL: ld_cst_align32_float_double:
3555 ; CHECK: # %bb.0: # %entry
3556 ; CHECK-NEXT: lis r3, 153
3557 ; CHECK-NEXT: lfd f0, -27108(r3)
3558 ; CHECK-NEXT: xsrsp f1, f0
3561 %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 8
3562 %conv = fptrunc double %0 to float
3566 ; Function Attrs: norecurse nounwind readonly uwtable willreturn
3567 define dso_local float @ld_cst_align64_float_double() {
3568 ; CHECK-P10-LABEL: ld_cst_align64_float_double:
3569 ; CHECK-P10: # %bb.0: # %entry
3570 ; CHECK-P10-NEXT: pli r3, 244140625
3571 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
3572 ; CHECK-P10-NEXT: lfd f0, 0(r3)
3573 ; CHECK-P10-NEXT: xsrsp f1, f0
3574 ; CHECK-P10-NEXT: blr
3576 ; CHECK-PREP10-LABEL: ld_cst_align64_float_double:
3577 ; CHECK-PREP10: # %bb.0: # %entry
3578 ; CHECK-PREP10-NEXT: lis r3, 3725
3579 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
3580 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
3581 ; CHECK-PREP10-NEXT: lfd f0, 0(r3)
3582 ; CHECK-PREP10-NEXT: xsrsp f1, f0
3583 ; CHECK-PREP10-NEXT: blr
3585 %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 4096
3586 %conv = fptrunc double %0 to float
3590 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3591 define dso_local void @st_0_float_uint8_t(i64 %ptr, float %str) {
3592 ; CHECK-POSTP8-LABEL: st_0_float_uint8_t:
3593 ; CHECK-POSTP8: # %bb.0: # %entry
3594 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
3595 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
3596 ; CHECK-POSTP8-NEXT: blr
3598 ; CHECK-P8-LABEL: st_0_float_uint8_t:
3599 ; CHECK-P8: # %bb.0: # %entry
3600 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3601 ; CHECK-P8-NEXT: mffprwz r4, f0
3602 ; CHECK-P8-NEXT: stb r4, 0(r3)
3603 ; CHECK-P8-NEXT: blr
3605 %conv = fptoui float %str to i8
3606 %0 = inttoptr i64 %ptr to ptr
3607 store i8 %conv, ptr %0, align 1
3611 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3612 define dso_local void @st_align16_float_uint8_t(ptr nocapture %ptr, float %str) {
3613 ; CHECK-POSTP8-LABEL: st_align16_float_uint8_t:
3614 ; CHECK-POSTP8: # %bb.0: # %entry
3615 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
3616 ; CHECK-POSTP8-NEXT: addi r3, r3, 8
3617 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
3618 ; CHECK-POSTP8-NEXT: blr
3620 ; CHECK-P8-LABEL: st_align16_float_uint8_t:
3621 ; CHECK-P8: # %bb.0: # %entry
3622 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3623 ; CHECK-P8-NEXT: mffprwz r4, f0
3624 ; CHECK-P8-NEXT: stb r4, 8(r3)
3625 ; CHECK-P8-NEXT: blr
3627 %conv = fptoui float %str to i8
3628 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
3629 store i8 %conv, ptr %add.ptr, align 1
3633 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3634 define dso_local void @st_align32_float_uint8_t(ptr nocapture %ptr, float %str) {
3635 ; CHECK-P10-LABEL: st_align32_float_uint8_t:
3636 ; CHECK-P10: # %bb.0: # %entry
3637 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
3638 ; CHECK-P10-NEXT: pli r4, 99999000
3639 ; CHECK-P10-NEXT: stxsibx f0, r3, r4
3640 ; CHECK-P10-NEXT: blr
3642 ; CHECK-P9-LABEL: st_align32_float_uint8_t:
3643 ; CHECK-P9: # %bb.0: # %entry
3644 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
3645 ; CHECK-P9-NEXT: lis r4, 1525
3646 ; CHECK-P9-NEXT: ori r4, r4, 56600
3647 ; CHECK-P9-NEXT: stxsibx f0, r3, r4
3648 ; CHECK-P9-NEXT: blr
3650 ; CHECK-P8-LABEL: st_align32_float_uint8_t:
3651 ; CHECK-P8: # %bb.0: # %entry
3652 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3653 ; CHECK-P8-NEXT: lis r5, 1525
3654 ; CHECK-P8-NEXT: ori r5, r5, 56600
3655 ; CHECK-P8-NEXT: mffprwz r4, f0
3656 ; CHECK-P8-NEXT: stbx r4, r3, r5
3657 ; CHECK-P8-NEXT: blr
3659 %conv = fptoui float %str to i8
3660 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
3661 store i8 %conv, ptr %add.ptr, align 1
3665 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3666 define dso_local void @st_align64_float_uint8_t(ptr nocapture %ptr, float %str) {
3667 ; CHECK-P10-LABEL: st_align64_float_uint8_t:
3668 ; CHECK-P10: # %bb.0: # %entry
3669 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
3670 ; CHECK-P10-NEXT: pli r4, 244140625
3671 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
3672 ; CHECK-P10-NEXT: stxsibx f0, r3, r4
3673 ; CHECK-P10-NEXT: blr
3675 ; CHECK-P9-LABEL: st_align64_float_uint8_t:
3676 ; CHECK-P9: # %bb.0: # %entry
3677 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
3678 ; CHECK-P9-NEXT: lis r4, 3725
3679 ; CHECK-P9-NEXT: ori r4, r4, 19025
3680 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
3681 ; CHECK-P9-NEXT: stxsibx f0, r3, r4
3682 ; CHECK-P9-NEXT: blr
3684 ; CHECK-P8-LABEL: st_align64_float_uint8_t:
3685 ; CHECK-P8: # %bb.0: # %entry
3686 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3687 ; CHECK-P8-NEXT: lis r5, 3725
3688 ; CHECK-P8-NEXT: ori r5, r5, 19025
3689 ; CHECK-P8-NEXT: rldic r5, r5, 12, 24
3690 ; CHECK-P8-NEXT: mffprwz r4, f0
3691 ; CHECK-P8-NEXT: stbx r4, r3, r5
3692 ; CHECK-P8-NEXT: blr
3694 %conv = fptoui float %str to i8
3695 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
3696 store i8 %conv, ptr %add.ptr, align 1
3700 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3701 define dso_local void @st_reg_float_uint8_t(ptr nocapture %ptr, i64 %off, float %str) {
3702 ; CHECK-POSTP8-LABEL: st_reg_float_uint8_t:
3703 ; CHECK-POSTP8: # %bb.0: # %entry
3704 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
3705 ; CHECK-POSTP8-NEXT: stxsibx f0, r3, r4
3706 ; CHECK-POSTP8-NEXT: blr
3708 ; CHECK-P8-LABEL: st_reg_float_uint8_t:
3709 ; CHECK-P8: # %bb.0: # %entry
3710 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3711 ; CHECK-P8-NEXT: mffprwz r5, f0
3712 ; CHECK-P8-NEXT: stbx r5, r3, r4
3713 ; CHECK-P8-NEXT: blr
3715 %conv = fptoui float %str to i8
3716 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
3717 store i8 %conv, ptr %add.ptr, align 1
3721 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3722 define dso_local void @st_or1_float_uint8_t(i64 %ptr, i8 zeroext %off, float %str) {
3723 ; CHECK-POSTP8-LABEL: st_or1_float_uint8_t:
3724 ; CHECK-POSTP8: # %bb.0: # %entry
3725 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
3726 ; CHECK-POSTP8-NEXT: or r3, r4, r3
3727 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
3728 ; CHECK-POSTP8-NEXT: blr
3730 ; CHECK-P8-LABEL: st_or1_float_uint8_t:
3731 ; CHECK-P8: # %bb.0: # %entry
3732 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3733 ; CHECK-P8-NEXT: or r3, r4, r3
3734 ; CHECK-P8-NEXT: mffprwz r5, f0
3735 ; CHECK-P8-NEXT: stb r5, 0(r3)
3736 ; CHECK-P8-NEXT: blr
3738 %conv = fptoui float %str to i8
3739 %conv1 = zext i8 %off to i64
3740 %or = or i64 %conv1, %ptr
3741 %0 = inttoptr i64 %or to ptr
3742 store i8 %conv, ptr %0, align 1
3746 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3747 define dso_local void @st_not_disjoint16_float_uint8_t(i64 %ptr, float %str) {
3748 ; CHECK-POSTP8-LABEL: st_not_disjoint16_float_uint8_t:
3749 ; CHECK-POSTP8: # %bb.0: # %entry
3750 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
3751 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
3752 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
3753 ; CHECK-POSTP8-NEXT: blr
3755 ; CHECK-P8-LABEL: st_not_disjoint16_float_uint8_t:
3756 ; CHECK-P8: # %bb.0: # %entry
3757 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3758 ; CHECK-P8-NEXT: ori r3, r3, 6
3759 ; CHECK-P8-NEXT: mffprwz r4, f0
3760 ; CHECK-P8-NEXT: stb r4, 0(r3)
3761 ; CHECK-P8-NEXT: blr
3763 %conv = fptoui float %str to i8
3764 %or = or i64 %ptr, 6
3765 %0 = inttoptr i64 %or to ptr
3766 store i8 %conv, ptr %0, align 1
3770 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3771 define dso_local void @st_disjoint_align16_float_uint8_t(i64 %ptr, float %str) {
3772 ; CHECK-POSTP8-LABEL: st_disjoint_align16_float_uint8_t:
3773 ; CHECK-POSTP8: # %bb.0: # %entry
3774 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
3775 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
3776 ; CHECK-POSTP8-NEXT: ori r3, r3, 24
3777 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
3778 ; CHECK-POSTP8-NEXT: blr
3780 ; CHECK-P8-LABEL: st_disjoint_align16_float_uint8_t:
3781 ; CHECK-P8: # %bb.0: # %entry
3782 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3783 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
3784 ; CHECK-P8-NEXT: mffprwz r4, f0
3785 ; CHECK-P8-NEXT: stb r4, 24(r3)
3786 ; CHECK-P8-NEXT: blr
3788 %and = and i64 %ptr, -4096
3789 %conv = fptoui float %str to i8
3790 %or = or i64 %and, 24
3791 %0 = inttoptr i64 %or to ptr
3792 store i8 %conv, ptr %0, align 8
3796 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3797 define dso_local void @st_not_disjoint32_float_uint8_t(i64 %ptr, float %str) {
3798 ; CHECK-POSTP8-LABEL: st_not_disjoint32_float_uint8_t:
3799 ; CHECK-POSTP8: # %bb.0: # %entry
3800 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
3801 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
3802 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
3803 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
3804 ; CHECK-POSTP8-NEXT: blr
3806 ; CHECK-P8-LABEL: st_not_disjoint32_float_uint8_t:
3807 ; CHECK-P8: # %bb.0: # %entry
3808 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3809 ; CHECK-P8-NEXT: ori r3, r3, 34463
3810 ; CHECK-P8-NEXT: oris r3, r3, 1
3811 ; CHECK-P8-NEXT: mffprwz r4, f0
3812 ; CHECK-P8-NEXT: stb r4, 0(r3)
3813 ; CHECK-P8-NEXT: blr
3815 %conv = fptoui float %str to i8
3816 %or = or i64 %ptr, 99999
3817 %0 = inttoptr i64 %or to ptr
3818 store i8 %conv, ptr %0, align 1
3822 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3823 define dso_local void @st_disjoint_align32_float_uint8_t(i64 %ptr, float %str) {
3824 ; CHECK-P10-LABEL: st_disjoint_align32_float_uint8_t:
3825 ; CHECK-P10: # %bb.0: # %entry
3826 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
3827 ; CHECK-P10-NEXT: lis r4, -15264
3828 ; CHECK-P10-NEXT: and r3, r3, r4
3829 ; CHECK-P10-NEXT: pli r4, 999990000
3830 ; CHECK-P10-NEXT: stxsibx f0, r3, r4
3831 ; CHECK-P10-NEXT: blr
3833 ; CHECK-P9-LABEL: st_disjoint_align32_float_uint8_t:
3834 ; CHECK-P9: # %bb.0: # %entry
3835 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
3836 ; CHECK-P9-NEXT: lis r4, -15264
3837 ; CHECK-P9-NEXT: and r3, r3, r4
3838 ; CHECK-P9-NEXT: lis r4, 15258
3839 ; CHECK-P9-NEXT: ori r4, r4, 41712
3840 ; CHECK-P9-NEXT: stxsibx f0, r3, r4
3841 ; CHECK-P9-NEXT: blr
3843 ; CHECK-P8-LABEL: st_disjoint_align32_float_uint8_t:
3844 ; CHECK-P8: # %bb.0: # %entry
3845 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3846 ; CHECK-P8-NEXT: lis r4, -15264
3847 ; CHECK-P8-NEXT: lis r5, 15258
3848 ; CHECK-P8-NEXT: and r3, r3, r4
3849 ; CHECK-P8-NEXT: ori r5, r5, 41712
3850 ; CHECK-P8-NEXT: mffprwz r4, f0
3851 ; CHECK-P8-NEXT: stbx r4, r3, r5
3852 ; CHECK-P8-NEXT: blr
3854 %and = and i64 %ptr, -1000341504
3855 %conv = fptoui float %str to i8
3856 %or = or i64 %and, 999990000
3857 %0 = inttoptr i64 %or to ptr
3858 store i8 %conv, ptr %0, align 16
3862 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3863 define dso_local void @st_not_disjoint64_float_uint8_t(i64 %ptr, float %str) {
3864 ; CHECK-P10-LABEL: st_not_disjoint64_float_uint8_t:
3865 ; CHECK-P10: # %bb.0: # %entry
3866 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
3867 ; CHECK-P10-NEXT: pli r4, 232
3868 ; CHECK-P10-NEXT: pli r5, 3567587329
3869 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
3870 ; CHECK-P10-NEXT: or r3, r3, r5
3871 ; CHECK-P10-NEXT: stxsibx f0, 0, r3
3872 ; CHECK-P10-NEXT: blr
3874 ; CHECK-P9-LABEL: st_not_disjoint64_float_uint8_t:
3875 ; CHECK-P9: # %bb.0: # %entry
3876 ; CHECK-P9-NEXT: li r4, 29
3877 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
3878 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
3879 ; CHECK-P9-NEXT: oris r4, r4, 54437
3880 ; CHECK-P9-NEXT: ori r4, r4, 4097
3881 ; CHECK-P9-NEXT: or r3, r3, r4
3882 ; CHECK-P9-NEXT: stxsibx f0, 0, r3
3883 ; CHECK-P9-NEXT: blr
3885 ; CHECK-P8-LABEL: st_not_disjoint64_float_uint8_t:
3886 ; CHECK-P8: # %bb.0: # %entry
3887 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3888 ; CHECK-P8-NEXT: li r5, 29
3889 ; CHECK-P8-NEXT: rldic r5, r5, 35, 24
3890 ; CHECK-P8-NEXT: oris r5, r5, 54437
3891 ; CHECK-P8-NEXT: mffprwz r4, f0
3892 ; CHECK-P8-NEXT: ori r5, r5, 4097
3893 ; CHECK-P8-NEXT: or r3, r3, r5
3894 ; CHECK-P8-NEXT: stb r4, 0(r3)
3895 ; CHECK-P8-NEXT: blr
3897 %conv = fptoui float %str to i8
3898 %or = or i64 %ptr, 1000000000001
3899 %0 = inttoptr i64 %or to ptr
3900 store i8 %conv, ptr %0, align 1
3904 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3905 define dso_local void @st_disjoint_align64_float_uint8_t(i64 %ptr, float %str) {
3906 ; CHECK-P10-LABEL: st_disjoint_align64_float_uint8_t:
3907 ; CHECK-P10: # %bb.0: # %entry
3908 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
3909 ; CHECK-P10-NEXT: pli r4, 244140625
3910 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
3911 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
3912 ; CHECK-P10-NEXT: stxsibx f0, r3, r4
3913 ; CHECK-P10-NEXT: blr
3915 ; CHECK-P9-LABEL: st_disjoint_align64_float_uint8_t:
3916 ; CHECK-P9: # %bb.0: # %entry
3917 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
3918 ; CHECK-P9-NEXT: lis r4, 3725
3919 ; CHECK-P9-NEXT: rldicr r3, r3, 0, 23
3920 ; CHECK-P9-NEXT: ori r4, r4, 19025
3921 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
3922 ; CHECK-P9-NEXT: stxsibx f0, r3, r4
3923 ; CHECK-P9-NEXT: blr
3925 ; CHECK-P8-LABEL: st_disjoint_align64_float_uint8_t:
3926 ; CHECK-P8: # %bb.0: # %entry
3927 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3928 ; CHECK-P8-NEXT: lis r5, 3725
3929 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 23
3930 ; CHECK-P8-NEXT: ori r5, r5, 19025
3931 ; CHECK-P8-NEXT: rldic r5, r5, 12, 24
3932 ; CHECK-P8-NEXT: mffprwz r4, f0
3933 ; CHECK-P8-NEXT: stbx r4, r3, r5
3934 ; CHECK-P8-NEXT: blr
3936 %and = and i64 %ptr, -1099511627776
3937 %conv = fptoui float %str to i8
3938 %or = or i64 %and, 1000000000000
3939 %0 = inttoptr i64 %or to ptr
3940 store i8 %conv, ptr %0, align 4096
3944 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3945 define dso_local void @st_cst_align16_float_uint8_t(float %str) {
3946 ; CHECK-POSTP8-LABEL: st_cst_align16_float_uint8_t:
3947 ; CHECK-POSTP8: # %bb.0: # %entry
3948 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
3949 ; CHECK-POSTP8-NEXT: li r3, 4080
3950 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
3951 ; CHECK-POSTP8-NEXT: blr
3953 ; CHECK-P8-LABEL: st_cst_align16_float_uint8_t:
3954 ; CHECK-P8: # %bb.0: # %entry
3955 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3956 ; CHECK-P8-NEXT: mffprwz r3, f0
3957 ; CHECK-P8-NEXT: stb r3, 4080(0)
3958 ; CHECK-P8-NEXT: blr
3960 %conv = fptoui float %str to i8
3961 store i8 %conv, ptr inttoptr (i64 4080 to ptr), align 16
3965 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3966 define dso_local void @st_cst_align32_float_uint8_t(float %str) {
3967 ; CHECK-P10-LABEL: st_cst_align32_float_uint8_t:
3968 ; CHECK-P10: # %bb.0: # %entry
3969 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
3970 ; CHECK-P10-NEXT: pli r3, 9999900
3971 ; CHECK-P10-NEXT: stxsibx f0, 0, r3
3972 ; CHECK-P10-NEXT: blr
3974 ; CHECK-P9-LABEL: st_cst_align32_float_uint8_t:
3975 ; CHECK-P9: # %bb.0: # %entry
3976 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
3977 ; CHECK-P9-NEXT: lis r3, 152
3978 ; CHECK-P9-NEXT: ori r3, r3, 38428
3979 ; CHECK-P9-NEXT: stxsibx f0, 0, r3
3980 ; CHECK-P9-NEXT: blr
3982 ; CHECK-P8-LABEL: st_cst_align32_float_uint8_t:
3983 ; CHECK-P8: # %bb.0: # %entry
3984 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
3985 ; CHECK-P8-NEXT: lis r4, 153
3986 ; CHECK-P8-NEXT: mffprwz r3, f0
3987 ; CHECK-P8-NEXT: stb r3, -27108(r4)
3988 ; CHECK-P8-NEXT: blr
3990 %conv = fptoui float %str to i8
3991 store i8 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
3995 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
3996 define dso_local void @st_cst_align64_float_uint8_t(float %str) {
3997 ; CHECK-P10-LABEL: st_cst_align64_float_uint8_t:
3998 ; CHECK-P10: # %bb.0: # %entry
3999 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
4000 ; CHECK-P10-NEXT: pli r3, 244140625
4001 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
4002 ; CHECK-P10-NEXT: stxsibx f0, 0, r3
4003 ; CHECK-P10-NEXT: blr
4005 ; CHECK-P9-LABEL: st_cst_align64_float_uint8_t:
4006 ; CHECK-P9: # %bb.0: # %entry
4007 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
4008 ; CHECK-P9-NEXT: lis r3, 3725
4009 ; CHECK-P9-NEXT: ori r3, r3, 19025
4010 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
4011 ; CHECK-P9-NEXT: stxsibx f0, 0, r3
4012 ; CHECK-P9-NEXT: blr
4014 ; CHECK-P8-LABEL: st_cst_align64_float_uint8_t:
4015 ; CHECK-P8: # %bb.0: # %entry
4016 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4017 ; CHECK-P8-NEXT: lis r4, 3725
4018 ; CHECK-P8-NEXT: ori r4, r4, 19025
4019 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
4020 ; CHECK-P8-NEXT: mffprwz r3, f0
4021 ; CHECK-P8-NEXT: stb r3, 0(r4)
4022 ; CHECK-P8-NEXT: blr
4024 %conv = fptoui float %str to i8
4025 store i8 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
4029 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4030 define dso_local void @st_0_float_int8_t(i64 %ptr, float %str) {
4031 ; CHECK-POSTP8-LABEL: st_0_float_int8_t:
4032 ; CHECK-POSTP8: # %bb.0: # %entry
4033 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4034 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
4035 ; CHECK-POSTP8-NEXT: blr
4037 ; CHECK-P8-LABEL: st_0_float_int8_t:
4038 ; CHECK-P8: # %bb.0: # %entry
4039 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4040 ; CHECK-P8-NEXT: mffprwz r4, f0
4041 ; CHECK-P8-NEXT: stb r4, 0(r3)
4042 ; CHECK-P8-NEXT: blr
4044 %conv = fptosi float %str to i8
4045 %0 = inttoptr i64 %ptr to ptr
4046 store i8 %conv, ptr %0, align 1
4050 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4051 define dso_local void @st_align16_float_int8_t(ptr nocapture %ptr, float %str) {
4052 ; CHECK-POSTP8-LABEL: st_align16_float_int8_t:
4053 ; CHECK-POSTP8: # %bb.0: # %entry
4054 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4055 ; CHECK-POSTP8-NEXT: addi r3, r3, 8
4056 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
4057 ; CHECK-POSTP8-NEXT: blr
4059 ; CHECK-P8-LABEL: st_align16_float_int8_t:
4060 ; CHECK-P8: # %bb.0: # %entry
4061 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4062 ; CHECK-P8-NEXT: mffprwz r4, f0
4063 ; CHECK-P8-NEXT: stb r4, 8(r3)
4064 ; CHECK-P8-NEXT: blr
4066 %conv = fptosi float %str to i8
4067 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
4068 store i8 %conv, ptr %add.ptr, align 1
4072 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4073 define dso_local void @st_align32_float_int8_t(ptr nocapture %ptr, float %str) {
4074 ; CHECK-P10-LABEL: st_align32_float_int8_t:
4075 ; CHECK-P10: # %bb.0: # %entry
4076 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
4077 ; CHECK-P10-NEXT: pli r4, 99999000
4078 ; CHECK-P10-NEXT: stxsibx f0, r3, r4
4079 ; CHECK-P10-NEXT: blr
4081 ; CHECK-P9-LABEL: st_align32_float_int8_t:
4082 ; CHECK-P9: # %bb.0: # %entry
4083 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
4084 ; CHECK-P9-NEXT: lis r4, 1525
4085 ; CHECK-P9-NEXT: ori r4, r4, 56600
4086 ; CHECK-P9-NEXT: stxsibx f0, r3, r4
4087 ; CHECK-P9-NEXT: blr
4089 ; CHECK-P8-LABEL: st_align32_float_int8_t:
4090 ; CHECK-P8: # %bb.0: # %entry
4091 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4092 ; CHECK-P8-NEXT: lis r5, 1525
4093 ; CHECK-P8-NEXT: ori r5, r5, 56600
4094 ; CHECK-P8-NEXT: mffprwz r4, f0
4095 ; CHECK-P8-NEXT: stbx r4, r3, r5
4096 ; CHECK-P8-NEXT: blr
4098 %conv = fptosi float %str to i8
4099 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
4100 store i8 %conv, ptr %add.ptr, align 1
4104 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4105 define dso_local void @st_align64_float_int8_t(ptr nocapture %ptr, float %str) {
4106 ; CHECK-P10-LABEL: st_align64_float_int8_t:
4107 ; CHECK-P10: # %bb.0: # %entry
4108 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
4109 ; CHECK-P10-NEXT: pli r4, 244140625
4110 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
4111 ; CHECK-P10-NEXT: stxsibx f0, r3, r4
4112 ; CHECK-P10-NEXT: blr
4114 ; CHECK-P9-LABEL: st_align64_float_int8_t:
4115 ; CHECK-P9: # %bb.0: # %entry
4116 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
4117 ; CHECK-P9-NEXT: lis r4, 3725
4118 ; CHECK-P9-NEXT: ori r4, r4, 19025
4119 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
4120 ; CHECK-P9-NEXT: stxsibx f0, r3, r4
4121 ; CHECK-P9-NEXT: blr
4123 ; CHECK-P8-LABEL: st_align64_float_int8_t:
4124 ; CHECK-P8: # %bb.0: # %entry
4125 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4126 ; CHECK-P8-NEXT: lis r5, 3725
4127 ; CHECK-P8-NEXT: ori r5, r5, 19025
4128 ; CHECK-P8-NEXT: rldic r5, r5, 12, 24
4129 ; CHECK-P8-NEXT: mffprwz r4, f0
4130 ; CHECK-P8-NEXT: stbx r4, r3, r5
4131 ; CHECK-P8-NEXT: blr
4133 %conv = fptosi float %str to i8
4134 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
4135 store i8 %conv, ptr %add.ptr, align 1
4139 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4140 define dso_local void @st_reg_float_int8_t(ptr nocapture %ptr, i64 %off, float %str) {
4141 ; CHECK-POSTP8-LABEL: st_reg_float_int8_t:
4142 ; CHECK-POSTP8: # %bb.0: # %entry
4143 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4144 ; CHECK-POSTP8-NEXT: stxsibx f0, r3, r4
4145 ; CHECK-POSTP8-NEXT: blr
4147 ; CHECK-P8-LABEL: st_reg_float_int8_t:
4148 ; CHECK-P8: # %bb.0: # %entry
4149 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4150 ; CHECK-P8-NEXT: mffprwz r5, f0
4151 ; CHECK-P8-NEXT: stbx r5, r3, r4
4152 ; CHECK-P8-NEXT: blr
4154 %conv = fptosi float %str to i8
4155 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
4156 store i8 %conv, ptr %add.ptr, align 1
4160 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4161 define dso_local void @st_or1_float_int8_t(i64 %ptr, i8 zeroext %off, float %str) {
4162 ; CHECK-POSTP8-LABEL: st_or1_float_int8_t:
4163 ; CHECK-POSTP8: # %bb.0: # %entry
4164 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4165 ; CHECK-POSTP8-NEXT: or r3, r4, r3
4166 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
4167 ; CHECK-POSTP8-NEXT: blr
4169 ; CHECK-P8-LABEL: st_or1_float_int8_t:
4170 ; CHECK-P8: # %bb.0: # %entry
4171 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4172 ; CHECK-P8-NEXT: or r3, r4, r3
4173 ; CHECK-P8-NEXT: mffprwz r5, f0
4174 ; CHECK-P8-NEXT: stb r5, 0(r3)
4175 ; CHECK-P8-NEXT: blr
4177 %conv = fptosi float %str to i8
4178 %conv1 = zext i8 %off to i64
4179 %or = or i64 %conv1, %ptr
4180 %0 = inttoptr i64 %or to ptr
4181 store i8 %conv, ptr %0, align 1
4185 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4186 define dso_local void @st_not_disjoint16_float_int8_t(i64 %ptr, float %str) {
4187 ; CHECK-POSTP8-LABEL: st_not_disjoint16_float_int8_t:
4188 ; CHECK-POSTP8: # %bb.0: # %entry
4189 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4190 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
4191 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
4192 ; CHECK-POSTP8-NEXT: blr
4194 ; CHECK-P8-LABEL: st_not_disjoint16_float_int8_t:
4195 ; CHECK-P8: # %bb.0: # %entry
4196 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4197 ; CHECK-P8-NEXT: ori r3, r3, 6
4198 ; CHECK-P8-NEXT: mffprwz r4, f0
4199 ; CHECK-P8-NEXT: stb r4, 0(r3)
4200 ; CHECK-P8-NEXT: blr
4202 %conv = fptosi float %str to i8
4203 %or = or i64 %ptr, 6
4204 %0 = inttoptr i64 %or to ptr
4205 store i8 %conv, ptr %0, align 1
4209 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4210 define dso_local void @st_disjoint_align16_float_int8_t(i64 %ptr, float %str) {
4211 ; CHECK-POSTP8-LABEL: st_disjoint_align16_float_int8_t:
4212 ; CHECK-POSTP8: # %bb.0: # %entry
4213 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4214 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
4215 ; CHECK-POSTP8-NEXT: ori r3, r3, 24
4216 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
4217 ; CHECK-POSTP8-NEXT: blr
4219 ; CHECK-P8-LABEL: st_disjoint_align16_float_int8_t:
4220 ; CHECK-P8: # %bb.0: # %entry
4221 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4222 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
4223 ; CHECK-P8-NEXT: mffprwz r4, f0
4224 ; CHECK-P8-NEXT: stb r4, 24(r3)
4225 ; CHECK-P8-NEXT: blr
4227 %and = and i64 %ptr, -4096
4228 %conv = fptosi float %str to i8
4229 %or = or i64 %and, 24
4230 %0 = inttoptr i64 %or to ptr
4231 store i8 %conv, ptr %0, align 8
4235 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4236 define dso_local void @st_not_disjoint32_float_int8_t(i64 %ptr, float %str) {
4237 ; CHECK-POSTP8-LABEL: st_not_disjoint32_float_int8_t:
4238 ; CHECK-POSTP8: # %bb.0: # %entry
4239 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4240 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
4241 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
4242 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
4243 ; CHECK-POSTP8-NEXT: blr
4245 ; CHECK-P8-LABEL: st_not_disjoint32_float_int8_t:
4246 ; CHECK-P8: # %bb.0: # %entry
4247 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4248 ; CHECK-P8-NEXT: ori r3, r3, 34463
4249 ; CHECK-P8-NEXT: oris r3, r3, 1
4250 ; CHECK-P8-NEXT: mffprwz r4, f0
4251 ; CHECK-P8-NEXT: stb r4, 0(r3)
4252 ; CHECK-P8-NEXT: blr
4254 %conv = fptosi float %str to i8
4255 %or = or i64 %ptr, 99999
4256 %0 = inttoptr i64 %or to ptr
4257 store i8 %conv, ptr %0, align 1
4261 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4262 define dso_local void @st_disjoint_align32_float_int8_t(i64 %ptr, float %str) {
4263 ; CHECK-P10-LABEL: st_disjoint_align32_float_int8_t:
4264 ; CHECK-P10: # %bb.0: # %entry
4265 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
4266 ; CHECK-P10-NEXT: lis r4, -15264
4267 ; CHECK-P10-NEXT: and r3, r3, r4
4268 ; CHECK-P10-NEXT: pli r4, 999990000
4269 ; CHECK-P10-NEXT: stxsibx f0, r3, r4
4270 ; CHECK-P10-NEXT: blr
4272 ; CHECK-P9-LABEL: st_disjoint_align32_float_int8_t:
4273 ; CHECK-P9: # %bb.0: # %entry
4274 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
4275 ; CHECK-P9-NEXT: lis r4, -15264
4276 ; CHECK-P9-NEXT: and r3, r3, r4
4277 ; CHECK-P9-NEXT: lis r4, 15258
4278 ; CHECK-P9-NEXT: ori r4, r4, 41712
4279 ; CHECK-P9-NEXT: stxsibx f0, r3, r4
4280 ; CHECK-P9-NEXT: blr
4282 ; CHECK-P8-LABEL: st_disjoint_align32_float_int8_t:
4283 ; CHECK-P8: # %bb.0: # %entry
4284 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4285 ; CHECK-P8-NEXT: lis r4, -15264
4286 ; CHECK-P8-NEXT: lis r5, 15258
4287 ; CHECK-P8-NEXT: and r3, r3, r4
4288 ; CHECK-P8-NEXT: ori r5, r5, 41712
4289 ; CHECK-P8-NEXT: mffprwz r4, f0
4290 ; CHECK-P8-NEXT: stbx r4, r3, r5
4291 ; CHECK-P8-NEXT: blr
4293 %and = and i64 %ptr, -1000341504
4294 %conv = fptosi float %str to i8
4295 %or = or i64 %and, 999990000
4296 %0 = inttoptr i64 %or to ptr
4297 store i8 %conv, ptr %0, align 16
4301 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4302 define dso_local void @st_not_disjoint64_float_int8_t(i64 %ptr, float %str) {
4303 ; CHECK-P10-LABEL: st_not_disjoint64_float_int8_t:
4304 ; CHECK-P10: # %bb.0: # %entry
4305 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
4306 ; CHECK-P10-NEXT: pli r4, 232
4307 ; CHECK-P10-NEXT: pli r5, 3567587329
4308 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
4309 ; CHECK-P10-NEXT: or r3, r3, r5
4310 ; CHECK-P10-NEXT: stxsibx f0, 0, r3
4311 ; CHECK-P10-NEXT: blr
4313 ; CHECK-P9-LABEL: st_not_disjoint64_float_int8_t:
4314 ; CHECK-P9: # %bb.0: # %entry
4315 ; CHECK-P9-NEXT: li r4, 29
4316 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
4317 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
4318 ; CHECK-P9-NEXT: oris r4, r4, 54437
4319 ; CHECK-P9-NEXT: ori r4, r4, 4097
4320 ; CHECK-P9-NEXT: or r3, r3, r4
4321 ; CHECK-P9-NEXT: stxsibx f0, 0, r3
4322 ; CHECK-P9-NEXT: blr
4324 ; CHECK-P8-LABEL: st_not_disjoint64_float_int8_t:
4325 ; CHECK-P8: # %bb.0: # %entry
4326 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4327 ; CHECK-P8-NEXT: li r5, 29
4328 ; CHECK-P8-NEXT: rldic r5, r5, 35, 24
4329 ; CHECK-P8-NEXT: oris r5, r5, 54437
4330 ; CHECK-P8-NEXT: mffprwz r4, f0
4331 ; CHECK-P8-NEXT: ori r5, r5, 4097
4332 ; CHECK-P8-NEXT: or r3, r3, r5
4333 ; CHECK-P8-NEXT: stb r4, 0(r3)
4334 ; CHECK-P8-NEXT: blr
4336 %conv = fptosi float %str to i8
4337 %or = or i64 %ptr, 1000000000001
4338 %0 = inttoptr i64 %or to ptr
4339 store i8 %conv, ptr %0, align 1
4343 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4344 define dso_local void @st_disjoint_align64_float_int8_t(i64 %ptr, float %str) {
4345 ; CHECK-P10-LABEL: st_disjoint_align64_float_int8_t:
4346 ; CHECK-P10: # %bb.0: # %entry
4347 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
4348 ; CHECK-P10-NEXT: pli r4, 244140625
4349 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
4350 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
4351 ; CHECK-P10-NEXT: stxsibx f0, r3, r4
4352 ; CHECK-P10-NEXT: blr
4354 ; CHECK-P9-LABEL: st_disjoint_align64_float_int8_t:
4355 ; CHECK-P9: # %bb.0: # %entry
4356 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
4357 ; CHECK-P9-NEXT: lis r4, 3725
4358 ; CHECK-P9-NEXT: rldicr r3, r3, 0, 23
4359 ; CHECK-P9-NEXT: ori r4, r4, 19025
4360 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
4361 ; CHECK-P9-NEXT: stxsibx f0, r3, r4
4362 ; CHECK-P9-NEXT: blr
4364 ; CHECK-P8-LABEL: st_disjoint_align64_float_int8_t:
4365 ; CHECK-P8: # %bb.0: # %entry
4366 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4367 ; CHECK-P8-NEXT: lis r5, 3725
4368 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 23
4369 ; CHECK-P8-NEXT: ori r5, r5, 19025
4370 ; CHECK-P8-NEXT: rldic r5, r5, 12, 24
4371 ; CHECK-P8-NEXT: mffprwz r4, f0
4372 ; CHECK-P8-NEXT: stbx r4, r3, r5
4373 ; CHECK-P8-NEXT: blr
4375 %and = and i64 %ptr, -1099511627776
4376 %conv = fptosi float %str to i8
4377 %or = or i64 %and, 1000000000000
4378 %0 = inttoptr i64 %or to ptr
4379 store i8 %conv, ptr %0, align 4096
4383 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4384 define dso_local void @st_cst_align16_float_int8_t(float %str) {
4385 ; CHECK-POSTP8-LABEL: st_cst_align16_float_int8_t:
4386 ; CHECK-POSTP8: # %bb.0: # %entry
4387 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4388 ; CHECK-POSTP8-NEXT: li r3, 4080
4389 ; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3
4390 ; CHECK-POSTP8-NEXT: blr
4392 ; CHECK-P8-LABEL: st_cst_align16_float_int8_t:
4393 ; CHECK-P8: # %bb.0: # %entry
4394 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4395 ; CHECK-P8-NEXT: mffprwz r3, f0
4396 ; CHECK-P8-NEXT: stb r3, 4080(0)
4397 ; CHECK-P8-NEXT: blr
4399 %conv = fptosi float %str to i8
4400 store i8 %conv, ptr inttoptr (i64 4080 to ptr), align 16
4404 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4405 define dso_local void @st_cst_align32_float_int8_t(float %str) {
4406 ; CHECK-P10-LABEL: st_cst_align32_float_int8_t:
4407 ; CHECK-P10: # %bb.0: # %entry
4408 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
4409 ; CHECK-P10-NEXT: pli r3, 9999900
4410 ; CHECK-P10-NEXT: stxsibx f0, 0, r3
4411 ; CHECK-P10-NEXT: blr
4413 ; CHECK-P9-LABEL: st_cst_align32_float_int8_t:
4414 ; CHECK-P9: # %bb.0: # %entry
4415 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
4416 ; CHECK-P9-NEXT: lis r3, 152
4417 ; CHECK-P9-NEXT: ori r3, r3, 38428
4418 ; CHECK-P9-NEXT: stxsibx f0, 0, r3
4419 ; CHECK-P9-NEXT: blr
4421 ; CHECK-P8-LABEL: st_cst_align32_float_int8_t:
4422 ; CHECK-P8: # %bb.0: # %entry
4423 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4424 ; CHECK-P8-NEXT: lis r4, 153
4425 ; CHECK-P8-NEXT: mffprwz r3, f0
4426 ; CHECK-P8-NEXT: stb r3, -27108(r4)
4427 ; CHECK-P8-NEXT: blr
4429 %conv = fptosi float %str to i8
4430 store i8 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
4434 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4435 define dso_local void @st_cst_align64_float_int8_t(float %str) {
4436 ; CHECK-P10-LABEL: st_cst_align64_float_int8_t:
4437 ; CHECK-P10: # %bb.0: # %entry
4438 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
4439 ; CHECK-P10-NEXT: pli r3, 244140625
4440 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
4441 ; CHECK-P10-NEXT: stxsibx f0, 0, r3
4442 ; CHECK-P10-NEXT: blr
4444 ; CHECK-P9-LABEL: st_cst_align64_float_int8_t:
4445 ; CHECK-P9: # %bb.0: # %entry
4446 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
4447 ; CHECK-P9-NEXT: lis r3, 3725
4448 ; CHECK-P9-NEXT: ori r3, r3, 19025
4449 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
4450 ; CHECK-P9-NEXT: stxsibx f0, 0, r3
4451 ; CHECK-P9-NEXT: blr
4453 ; CHECK-P8-LABEL: st_cst_align64_float_int8_t:
4454 ; CHECK-P8: # %bb.0: # %entry
4455 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4456 ; CHECK-P8-NEXT: lis r4, 3725
4457 ; CHECK-P8-NEXT: ori r4, r4, 19025
4458 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
4459 ; CHECK-P8-NEXT: mffprwz r3, f0
4460 ; CHECK-P8-NEXT: stb r3, 0(r4)
4461 ; CHECK-P8-NEXT: blr
4463 %conv = fptosi float %str to i8
4464 store i8 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
4468 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4469 define dso_local void @st_0_float_uint16_t(i64 %ptr, float %str) {
4470 ; CHECK-POSTP8-LABEL: st_0_float_uint16_t:
4471 ; CHECK-POSTP8: # %bb.0: # %entry
4472 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
4473 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
4474 ; CHECK-POSTP8-NEXT: blr
4476 ; CHECK-P8-LABEL: st_0_float_uint16_t:
4477 ; CHECK-P8: # %bb.0: # %entry
4478 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4479 ; CHECK-P8-NEXT: mffprwz r4, f0
4480 ; CHECK-P8-NEXT: sth r4, 0(r3)
4481 ; CHECK-P8-NEXT: blr
4483 %conv = fptoui float %str to i16
4484 %0 = inttoptr i64 %ptr to ptr
4485 store i16 %conv, ptr %0, align 2
4489 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4490 define dso_local void @st_align16_float_uint16_t(ptr nocapture %ptr, float %str) {
4491 ; CHECK-POSTP8-LABEL: st_align16_float_uint16_t:
4492 ; CHECK-POSTP8: # %bb.0: # %entry
4493 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
4494 ; CHECK-POSTP8-NEXT: addi r3, r3, 8
4495 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
4496 ; CHECK-POSTP8-NEXT: blr
4498 ; CHECK-P8-LABEL: st_align16_float_uint16_t:
4499 ; CHECK-P8: # %bb.0: # %entry
4500 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4501 ; CHECK-P8-NEXT: mffprwz r4, f0
4502 ; CHECK-P8-NEXT: sth r4, 8(r3)
4503 ; CHECK-P8-NEXT: blr
4505 %conv = fptoui float %str to i16
4506 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
4507 store i16 %conv, ptr %add.ptr, align 2
4511 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4512 define dso_local void @st_align32_float_uint16_t(ptr nocapture %ptr, float %str) {
4513 ; CHECK-P10-LABEL: st_align32_float_uint16_t:
4514 ; CHECK-P10: # %bb.0: # %entry
4515 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
4516 ; CHECK-P10-NEXT: pli r4, 99999000
4517 ; CHECK-P10-NEXT: stxsihx f0, r3, r4
4518 ; CHECK-P10-NEXT: blr
4520 ; CHECK-P9-LABEL: st_align32_float_uint16_t:
4521 ; CHECK-P9: # %bb.0: # %entry
4522 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
4523 ; CHECK-P9-NEXT: lis r4, 1525
4524 ; CHECK-P9-NEXT: ori r4, r4, 56600
4525 ; CHECK-P9-NEXT: stxsihx f0, r3, r4
4526 ; CHECK-P9-NEXT: blr
4528 ; CHECK-P8-LABEL: st_align32_float_uint16_t:
4529 ; CHECK-P8: # %bb.0: # %entry
4530 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4531 ; CHECK-P8-NEXT: lis r5, 1525
4532 ; CHECK-P8-NEXT: ori r5, r5, 56600
4533 ; CHECK-P8-NEXT: mffprwz r4, f0
4534 ; CHECK-P8-NEXT: sthx r4, r3, r5
4535 ; CHECK-P8-NEXT: blr
4537 %conv = fptoui float %str to i16
4538 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
4539 store i16 %conv, ptr %add.ptr, align 2
4543 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4544 define dso_local void @st_align64_float_uint16_t(ptr nocapture %ptr, float %str) {
4545 ; CHECK-P10-LABEL: st_align64_float_uint16_t:
4546 ; CHECK-P10: # %bb.0: # %entry
4547 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
4548 ; CHECK-P10-NEXT: pli r4, 244140625
4549 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
4550 ; CHECK-P10-NEXT: stxsihx f0, r3, r4
4551 ; CHECK-P10-NEXT: blr
4553 ; CHECK-P9-LABEL: st_align64_float_uint16_t:
4554 ; CHECK-P9: # %bb.0: # %entry
4555 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
4556 ; CHECK-P9-NEXT: lis r4, 3725
4557 ; CHECK-P9-NEXT: ori r4, r4, 19025
4558 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
4559 ; CHECK-P9-NEXT: stxsihx f0, r3, r4
4560 ; CHECK-P9-NEXT: blr
4562 ; CHECK-P8-LABEL: st_align64_float_uint16_t:
4563 ; CHECK-P8: # %bb.0: # %entry
4564 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4565 ; CHECK-P8-NEXT: lis r5, 3725
4566 ; CHECK-P8-NEXT: ori r5, r5, 19025
4567 ; CHECK-P8-NEXT: rldic r5, r5, 12, 24
4568 ; CHECK-P8-NEXT: mffprwz r4, f0
4569 ; CHECK-P8-NEXT: sthx r4, r3, r5
4570 ; CHECK-P8-NEXT: blr
4572 %conv = fptoui float %str to i16
4573 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
4574 store i16 %conv, ptr %add.ptr, align 2
4578 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4579 define dso_local void @st_reg_float_uint16_t(ptr nocapture %ptr, i64 %off, float %str) {
4580 ; CHECK-POSTP8-LABEL: st_reg_float_uint16_t:
4581 ; CHECK-POSTP8: # %bb.0: # %entry
4582 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
4583 ; CHECK-POSTP8-NEXT: stxsihx f0, r3, r4
4584 ; CHECK-POSTP8-NEXT: blr
4586 ; CHECK-P8-LABEL: st_reg_float_uint16_t:
4587 ; CHECK-P8: # %bb.0: # %entry
4588 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4589 ; CHECK-P8-NEXT: mffprwz r5, f0
4590 ; CHECK-P8-NEXT: sthx r5, r3, r4
4591 ; CHECK-P8-NEXT: blr
4593 %conv = fptoui float %str to i16
4594 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
4595 store i16 %conv, ptr %add.ptr, align 2
4599 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4600 define dso_local void @st_or1_float_uint16_t(i64 %ptr, i8 zeroext %off, float %str) {
4601 ; CHECK-POSTP8-LABEL: st_or1_float_uint16_t:
4602 ; CHECK-POSTP8: # %bb.0: # %entry
4603 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
4604 ; CHECK-POSTP8-NEXT: or r3, r4, r3
4605 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
4606 ; CHECK-POSTP8-NEXT: blr
4608 ; CHECK-P8-LABEL: st_or1_float_uint16_t:
4609 ; CHECK-P8: # %bb.0: # %entry
4610 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4611 ; CHECK-P8-NEXT: or r3, r4, r3
4612 ; CHECK-P8-NEXT: mffprwz r5, f0
4613 ; CHECK-P8-NEXT: sth r5, 0(r3)
4614 ; CHECK-P8-NEXT: blr
4616 %conv = fptoui float %str to i16
4617 %conv1 = zext i8 %off to i64
4618 %or = or i64 %conv1, %ptr
4619 %0 = inttoptr i64 %or to ptr
4620 store i16 %conv, ptr %0, align 2
4624 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4625 define dso_local void @st_not_disjoint16_float_uint16_t(i64 %ptr, float %str) {
4626 ; CHECK-POSTP8-LABEL: st_not_disjoint16_float_uint16_t:
4627 ; CHECK-POSTP8: # %bb.0: # %entry
4628 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
4629 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
4630 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
4631 ; CHECK-POSTP8-NEXT: blr
4633 ; CHECK-P8-LABEL: st_not_disjoint16_float_uint16_t:
4634 ; CHECK-P8: # %bb.0: # %entry
4635 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4636 ; CHECK-P8-NEXT: ori r3, r3, 6
4637 ; CHECK-P8-NEXT: mffprwz r4, f0
4638 ; CHECK-P8-NEXT: sth r4, 0(r3)
4639 ; CHECK-P8-NEXT: blr
4641 %conv = fptoui float %str to i16
4642 %or = or i64 %ptr, 6
4643 %0 = inttoptr i64 %or to ptr
4644 store i16 %conv, ptr %0, align 2
4648 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4649 define dso_local void @st_disjoint_align16_float_uint16_t(i64 %ptr, float %str) {
4650 ; CHECK-POSTP8-LABEL: st_disjoint_align16_float_uint16_t:
4651 ; CHECK-POSTP8: # %bb.0: # %entry
4652 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
4653 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
4654 ; CHECK-POSTP8-NEXT: ori r3, r3, 24
4655 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
4656 ; CHECK-POSTP8-NEXT: blr
4658 ; CHECK-P8-LABEL: st_disjoint_align16_float_uint16_t:
4659 ; CHECK-P8: # %bb.0: # %entry
4660 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4661 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
4662 ; CHECK-P8-NEXT: mffprwz r4, f0
4663 ; CHECK-P8-NEXT: sth r4, 24(r3)
4664 ; CHECK-P8-NEXT: blr
4666 %and = and i64 %ptr, -4096
4667 %conv = fptoui float %str to i16
4668 %or = or i64 %and, 24
4669 %0 = inttoptr i64 %or to ptr
4670 store i16 %conv, ptr %0, align 8
4674 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4675 define dso_local void @st_not_disjoint32_float_uint16_t(i64 %ptr, float %str) {
4676 ; CHECK-POSTP8-LABEL: st_not_disjoint32_float_uint16_t:
4677 ; CHECK-POSTP8: # %bb.0: # %entry
4678 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
4679 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
4680 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
4681 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
4682 ; CHECK-POSTP8-NEXT: blr
4684 ; CHECK-P8-LABEL: st_not_disjoint32_float_uint16_t:
4685 ; CHECK-P8: # %bb.0: # %entry
4686 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4687 ; CHECK-P8-NEXT: ori r3, r3, 34463
4688 ; CHECK-P8-NEXT: oris r3, r3, 1
4689 ; CHECK-P8-NEXT: mffprwz r4, f0
4690 ; CHECK-P8-NEXT: sth r4, 0(r3)
4691 ; CHECK-P8-NEXT: blr
4693 %conv = fptoui float %str to i16
4694 %or = or i64 %ptr, 99999
4695 %0 = inttoptr i64 %or to ptr
4696 store i16 %conv, ptr %0, align 2
4700 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4701 define dso_local void @st_disjoint_align32_float_uint16_t(i64 %ptr, float %str) {
4702 ; CHECK-P10-LABEL: st_disjoint_align32_float_uint16_t:
4703 ; CHECK-P10: # %bb.0: # %entry
4704 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
4705 ; CHECK-P10-NEXT: lis r4, -15264
4706 ; CHECK-P10-NEXT: and r3, r3, r4
4707 ; CHECK-P10-NEXT: pli r4, 999990000
4708 ; CHECK-P10-NEXT: stxsihx f0, r3, r4
4709 ; CHECK-P10-NEXT: blr
4711 ; CHECK-P9-LABEL: st_disjoint_align32_float_uint16_t:
4712 ; CHECK-P9: # %bb.0: # %entry
4713 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
4714 ; CHECK-P9-NEXT: lis r4, -15264
4715 ; CHECK-P9-NEXT: and r3, r3, r4
4716 ; CHECK-P9-NEXT: lis r4, 15258
4717 ; CHECK-P9-NEXT: ori r4, r4, 41712
4718 ; CHECK-P9-NEXT: stxsihx f0, r3, r4
4719 ; CHECK-P9-NEXT: blr
4721 ; CHECK-P8-LABEL: st_disjoint_align32_float_uint16_t:
4722 ; CHECK-P8: # %bb.0: # %entry
4723 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4724 ; CHECK-P8-NEXT: lis r4, -15264
4725 ; CHECK-P8-NEXT: lis r5, 15258
4726 ; CHECK-P8-NEXT: and r3, r3, r4
4727 ; CHECK-P8-NEXT: ori r5, r5, 41712
4728 ; CHECK-P8-NEXT: mffprwz r4, f0
4729 ; CHECK-P8-NEXT: sthx r4, r3, r5
4730 ; CHECK-P8-NEXT: blr
4732 %and = and i64 %ptr, -1000341504
4733 %conv = fptoui float %str to i16
4734 %or = or i64 %and, 999990000
4735 %0 = inttoptr i64 %or to ptr
4736 store i16 %conv, ptr %0, align 16
4740 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4741 define dso_local void @st_not_disjoint64_float_uint16_t(i64 %ptr, float %str) {
4742 ; CHECK-P10-LABEL: st_not_disjoint64_float_uint16_t:
4743 ; CHECK-P10: # %bb.0: # %entry
4744 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
4745 ; CHECK-P10-NEXT: pli r4, 232
4746 ; CHECK-P10-NEXT: pli r5, 3567587329
4747 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
4748 ; CHECK-P10-NEXT: or r3, r3, r5
4749 ; CHECK-P10-NEXT: stxsihx f0, 0, r3
4750 ; CHECK-P10-NEXT: blr
4752 ; CHECK-P9-LABEL: st_not_disjoint64_float_uint16_t:
4753 ; CHECK-P9: # %bb.0: # %entry
4754 ; CHECK-P9-NEXT: li r4, 29
4755 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
4756 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
4757 ; CHECK-P9-NEXT: oris r4, r4, 54437
4758 ; CHECK-P9-NEXT: ori r4, r4, 4097
4759 ; CHECK-P9-NEXT: or r3, r3, r4
4760 ; CHECK-P9-NEXT: stxsihx f0, 0, r3
4761 ; CHECK-P9-NEXT: blr
4763 ; CHECK-P8-LABEL: st_not_disjoint64_float_uint16_t:
4764 ; CHECK-P8: # %bb.0: # %entry
4765 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4766 ; CHECK-P8-NEXT: li r5, 29
4767 ; CHECK-P8-NEXT: rldic r5, r5, 35, 24
4768 ; CHECK-P8-NEXT: oris r5, r5, 54437
4769 ; CHECK-P8-NEXT: mffprwz r4, f0
4770 ; CHECK-P8-NEXT: ori r5, r5, 4097
4771 ; CHECK-P8-NEXT: or r3, r3, r5
4772 ; CHECK-P8-NEXT: sth r4, 0(r3)
4773 ; CHECK-P8-NEXT: blr
4775 %conv = fptoui float %str to i16
4776 %or = or i64 %ptr, 1000000000001
4777 %0 = inttoptr i64 %or to ptr
4778 store i16 %conv, ptr %0, align 2
4782 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4783 define dso_local void @st_disjoint_align64_float_uint16_t(i64 %ptr, float %str) {
4784 ; CHECK-P10-LABEL: st_disjoint_align64_float_uint16_t:
4785 ; CHECK-P10: # %bb.0: # %entry
4786 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
4787 ; CHECK-P10-NEXT: pli r4, 244140625
4788 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
4789 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
4790 ; CHECK-P10-NEXT: stxsihx f0, r3, r4
4791 ; CHECK-P10-NEXT: blr
4793 ; CHECK-P9-LABEL: st_disjoint_align64_float_uint16_t:
4794 ; CHECK-P9: # %bb.0: # %entry
4795 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
4796 ; CHECK-P9-NEXT: lis r4, 3725
4797 ; CHECK-P9-NEXT: rldicr r3, r3, 0, 23
4798 ; CHECK-P9-NEXT: ori r4, r4, 19025
4799 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
4800 ; CHECK-P9-NEXT: stxsihx f0, r3, r4
4801 ; CHECK-P9-NEXT: blr
4803 ; CHECK-P8-LABEL: st_disjoint_align64_float_uint16_t:
4804 ; CHECK-P8: # %bb.0: # %entry
4805 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4806 ; CHECK-P8-NEXT: lis r5, 3725
4807 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 23
4808 ; CHECK-P8-NEXT: ori r5, r5, 19025
4809 ; CHECK-P8-NEXT: rldic r5, r5, 12, 24
4810 ; CHECK-P8-NEXT: mffprwz r4, f0
4811 ; CHECK-P8-NEXT: sthx r4, r3, r5
4812 ; CHECK-P8-NEXT: blr
4814 %and = and i64 %ptr, -1099511627776
4815 %conv = fptoui float %str to i16
4816 %or = or i64 %and, 1000000000000
4817 %0 = inttoptr i64 %or to ptr
4818 store i16 %conv, ptr %0, align 4096
4822 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4823 define dso_local void @st_cst_align16_float_uint16_t(float %str) {
4824 ; CHECK-POSTP8-LABEL: st_cst_align16_float_uint16_t:
4825 ; CHECK-POSTP8: # %bb.0: # %entry
4826 ; CHECK-POSTP8-NEXT: xscvdpuxds f0, f1
4827 ; CHECK-POSTP8-NEXT: li r3, 4080
4828 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
4829 ; CHECK-POSTP8-NEXT: blr
4831 ; CHECK-P8-LABEL: st_cst_align16_float_uint16_t:
4832 ; CHECK-P8: # %bb.0: # %entry
4833 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4834 ; CHECK-P8-NEXT: mffprwz r3, f0
4835 ; CHECK-P8-NEXT: sth r3, 4080(0)
4836 ; CHECK-P8-NEXT: blr
4838 %conv = fptoui float %str to i16
4839 store i16 %conv, ptr inttoptr (i64 4080 to ptr), align 16
4843 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4844 define dso_local void @st_cst_align32_float_uint16_t(float %str) {
4845 ; CHECK-P10-LABEL: st_cst_align32_float_uint16_t:
4846 ; CHECK-P10: # %bb.0: # %entry
4847 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
4848 ; CHECK-P10-NEXT: pli r3, 9999900
4849 ; CHECK-P10-NEXT: stxsihx f0, 0, r3
4850 ; CHECK-P10-NEXT: blr
4852 ; CHECK-P9-LABEL: st_cst_align32_float_uint16_t:
4853 ; CHECK-P9: # %bb.0: # %entry
4854 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
4855 ; CHECK-P9-NEXT: lis r3, 152
4856 ; CHECK-P9-NEXT: ori r3, r3, 38428
4857 ; CHECK-P9-NEXT: stxsihx f0, 0, r3
4858 ; CHECK-P9-NEXT: blr
4860 ; CHECK-P8-LABEL: st_cst_align32_float_uint16_t:
4861 ; CHECK-P8: # %bb.0: # %entry
4862 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4863 ; CHECK-P8-NEXT: lis r4, 153
4864 ; CHECK-P8-NEXT: mffprwz r3, f0
4865 ; CHECK-P8-NEXT: sth r3, -27108(r4)
4866 ; CHECK-P8-NEXT: blr
4868 %conv = fptoui float %str to i16
4869 store i16 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
4873 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4874 define dso_local void @st_cst_align64_float_uint16_t(float %str) {
4875 ; CHECK-P10-LABEL: st_cst_align64_float_uint16_t:
4876 ; CHECK-P10: # %bb.0: # %entry
4877 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
4878 ; CHECK-P10-NEXT: pli r3, 244140625
4879 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
4880 ; CHECK-P10-NEXT: stxsihx f0, 0, r3
4881 ; CHECK-P10-NEXT: blr
4883 ; CHECK-P9-LABEL: st_cst_align64_float_uint16_t:
4884 ; CHECK-P9: # %bb.0: # %entry
4885 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
4886 ; CHECK-P9-NEXT: lis r3, 3725
4887 ; CHECK-P9-NEXT: ori r3, r3, 19025
4888 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
4889 ; CHECK-P9-NEXT: stxsihx f0, 0, r3
4890 ; CHECK-P9-NEXT: blr
4892 ; CHECK-P8-LABEL: st_cst_align64_float_uint16_t:
4893 ; CHECK-P8: # %bb.0: # %entry
4894 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4895 ; CHECK-P8-NEXT: lis r4, 3725
4896 ; CHECK-P8-NEXT: ori r4, r4, 19025
4897 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
4898 ; CHECK-P8-NEXT: mffprwz r3, f0
4899 ; CHECK-P8-NEXT: sth r3, 0(r4)
4900 ; CHECK-P8-NEXT: blr
4902 %conv = fptoui float %str to i16
4903 store i16 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
4907 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4908 define dso_local void @st_0_float_int16_t(i64 %ptr, float %str) {
4909 ; CHECK-POSTP8-LABEL: st_0_float_int16_t:
4910 ; CHECK-POSTP8: # %bb.0: # %entry
4911 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4912 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
4913 ; CHECK-POSTP8-NEXT: blr
4915 ; CHECK-P8-LABEL: st_0_float_int16_t:
4916 ; CHECK-P8: # %bb.0: # %entry
4917 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4918 ; CHECK-P8-NEXT: mffprwz r4, f0
4919 ; CHECK-P8-NEXT: sth r4, 0(r3)
4920 ; CHECK-P8-NEXT: blr
4922 %conv = fptosi float %str to i16
4923 %0 = inttoptr i64 %ptr to ptr
4924 store i16 %conv, ptr %0, align 2
4928 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4929 define dso_local void @st_align16_float_int16_t(ptr nocapture %ptr, float %str) {
4930 ; CHECK-POSTP8-LABEL: st_align16_float_int16_t:
4931 ; CHECK-POSTP8: # %bb.0: # %entry
4932 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
4933 ; CHECK-POSTP8-NEXT: addi r3, r3, 8
4934 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
4935 ; CHECK-POSTP8-NEXT: blr
4937 ; CHECK-P8-LABEL: st_align16_float_int16_t:
4938 ; CHECK-P8: # %bb.0: # %entry
4939 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4940 ; CHECK-P8-NEXT: mffprwz r4, f0
4941 ; CHECK-P8-NEXT: sth r4, 8(r3)
4942 ; CHECK-P8-NEXT: blr
4944 %conv = fptosi float %str to i16
4945 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
4946 store i16 %conv, ptr %add.ptr, align 2
4950 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4951 define dso_local void @st_align32_float_int16_t(ptr nocapture %ptr, float %str) {
4952 ; CHECK-P10-LABEL: st_align32_float_int16_t:
4953 ; CHECK-P10: # %bb.0: # %entry
4954 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
4955 ; CHECK-P10-NEXT: pli r4, 99999000
4956 ; CHECK-P10-NEXT: stxsihx f0, r3, r4
4957 ; CHECK-P10-NEXT: blr
4959 ; CHECK-P9-LABEL: st_align32_float_int16_t:
4960 ; CHECK-P9: # %bb.0: # %entry
4961 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
4962 ; CHECK-P9-NEXT: lis r4, 1525
4963 ; CHECK-P9-NEXT: ori r4, r4, 56600
4964 ; CHECK-P9-NEXT: stxsihx f0, r3, r4
4965 ; CHECK-P9-NEXT: blr
4967 ; CHECK-P8-LABEL: st_align32_float_int16_t:
4968 ; CHECK-P8: # %bb.0: # %entry
4969 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
4970 ; CHECK-P8-NEXT: lis r5, 1525
4971 ; CHECK-P8-NEXT: ori r5, r5, 56600
4972 ; CHECK-P8-NEXT: mffprwz r4, f0
4973 ; CHECK-P8-NEXT: sthx r4, r3, r5
4974 ; CHECK-P8-NEXT: blr
4976 %conv = fptosi float %str to i16
4977 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
4978 store i16 %conv, ptr %add.ptr, align 2
4982 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
4983 define dso_local void @st_align64_float_int16_t(ptr nocapture %ptr, float %str) {
4984 ; CHECK-P10-LABEL: st_align64_float_int16_t:
4985 ; CHECK-P10: # %bb.0: # %entry
4986 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
4987 ; CHECK-P10-NEXT: pli r4, 244140625
4988 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
4989 ; CHECK-P10-NEXT: stxsihx f0, r3, r4
4990 ; CHECK-P10-NEXT: blr
4992 ; CHECK-P9-LABEL: st_align64_float_int16_t:
4993 ; CHECK-P9: # %bb.0: # %entry
4994 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
4995 ; CHECK-P9-NEXT: lis r4, 3725
4996 ; CHECK-P9-NEXT: ori r4, r4, 19025
4997 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
4998 ; CHECK-P9-NEXT: stxsihx f0, r3, r4
4999 ; CHECK-P9-NEXT: blr
5001 ; CHECK-P8-LABEL: st_align64_float_int16_t:
5002 ; CHECK-P8: # %bb.0: # %entry
5003 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5004 ; CHECK-P8-NEXT: lis r5, 3725
5005 ; CHECK-P8-NEXT: ori r5, r5, 19025
5006 ; CHECK-P8-NEXT: rldic r5, r5, 12, 24
5007 ; CHECK-P8-NEXT: mffprwz r4, f0
5008 ; CHECK-P8-NEXT: sthx r4, r3, r5
5009 ; CHECK-P8-NEXT: blr
5011 %conv = fptosi float %str to i16
5012 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
5013 store i16 %conv, ptr %add.ptr, align 2
5017 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5018 define dso_local void @st_reg_float_int16_t(ptr nocapture %ptr, i64 %off, float %str) {
5019 ; CHECK-POSTP8-LABEL: st_reg_float_int16_t:
5020 ; CHECK-POSTP8: # %bb.0: # %entry
5021 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
5022 ; CHECK-POSTP8-NEXT: stxsihx f0, r3, r4
5023 ; CHECK-POSTP8-NEXT: blr
5025 ; CHECK-P8-LABEL: st_reg_float_int16_t:
5026 ; CHECK-P8: # %bb.0: # %entry
5027 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5028 ; CHECK-P8-NEXT: mffprwz r5, f0
5029 ; CHECK-P8-NEXT: sthx r5, r3, r4
5030 ; CHECK-P8-NEXT: blr
5032 %conv = fptosi float %str to i16
5033 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
5034 store i16 %conv, ptr %add.ptr, align 2
5038 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5039 define dso_local void @st_or1_float_int16_t(i64 %ptr, i8 zeroext %off, float %str) {
5040 ; CHECK-POSTP8-LABEL: st_or1_float_int16_t:
5041 ; CHECK-POSTP8: # %bb.0: # %entry
5042 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
5043 ; CHECK-POSTP8-NEXT: or r3, r4, r3
5044 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
5045 ; CHECK-POSTP8-NEXT: blr
5047 ; CHECK-P8-LABEL: st_or1_float_int16_t:
5048 ; CHECK-P8: # %bb.0: # %entry
5049 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5050 ; CHECK-P8-NEXT: or r3, r4, r3
5051 ; CHECK-P8-NEXT: mffprwz r5, f0
5052 ; CHECK-P8-NEXT: sth r5, 0(r3)
5053 ; CHECK-P8-NEXT: blr
5055 %conv = fptosi float %str to i16
5056 %conv1 = zext i8 %off to i64
5057 %or = or i64 %conv1, %ptr
5058 %0 = inttoptr i64 %or to ptr
5059 store i16 %conv, ptr %0, align 2
5063 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5064 define dso_local void @st_not_disjoint16_float_int16_t(i64 %ptr, float %str) {
5065 ; CHECK-POSTP8-LABEL: st_not_disjoint16_float_int16_t:
5066 ; CHECK-POSTP8: # %bb.0: # %entry
5067 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
5068 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
5069 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
5070 ; CHECK-POSTP8-NEXT: blr
5072 ; CHECK-P8-LABEL: st_not_disjoint16_float_int16_t:
5073 ; CHECK-P8: # %bb.0: # %entry
5074 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5075 ; CHECK-P8-NEXT: ori r3, r3, 6
5076 ; CHECK-P8-NEXT: mffprwz r4, f0
5077 ; CHECK-P8-NEXT: sth r4, 0(r3)
5078 ; CHECK-P8-NEXT: blr
5080 %conv = fptosi float %str to i16
5081 %or = or i64 %ptr, 6
5082 %0 = inttoptr i64 %or to ptr
5083 store i16 %conv, ptr %0, align 2
5087 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5088 define dso_local void @st_disjoint_align16_float_int16_t(i64 %ptr, float %str) {
5089 ; CHECK-POSTP8-LABEL: st_disjoint_align16_float_int16_t:
5090 ; CHECK-POSTP8: # %bb.0: # %entry
5091 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
5092 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
5093 ; CHECK-POSTP8-NEXT: ori r3, r3, 24
5094 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
5095 ; CHECK-POSTP8-NEXT: blr
5097 ; CHECK-P8-LABEL: st_disjoint_align16_float_int16_t:
5098 ; CHECK-P8: # %bb.0: # %entry
5099 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5100 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
5101 ; CHECK-P8-NEXT: mffprwz r4, f0
5102 ; CHECK-P8-NEXT: sth r4, 24(r3)
5103 ; CHECK-P8-NEXT: blr
5105 %and = and i64 %ptr, -4096
5106 %conv = fptosi float %str to i16
5107 %or = or i64 %and, 24
5108 %0 = inttoptr i64 %or to ptr
5109 store i16 %conv, ptr %0, align 8
5113 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5114 define dso_local void @st_not_disjoint32_float_int16_t(i64 %ptr, float %str) {
5115 ; CHECK-POSTP8-LABEL: st_not_disjoint32_float_int16_t:
5116 ; CHECK-POSTP8: # %bb.0: # %entry
5117 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
5118 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
5119 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
5120 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
5121 ; CHECK-POSTP8-NEXT: blr
5123 ; CHECK-P8-LABEL: st_not_disjoint32_float_int16_t:
5124 ; CHECK-P8: # %bb.0: # %entry
5125 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5126 ; CHECK-P8-NEXT: ori r3, r3, 34463
5127 ; CHECK-P8-NEXT: oris r3, r3, 1
5128 ; CHECK-P8-NEXT: mffprwz r4, f0
5129 ; CHECK-P8-NEXT: sth r4, 0(r3)
5130 ; CHECK-P8-NEXT: blr
5132 %conv = fptosi float %str to i16
5133 %or = or i64 %ptr, 99999
5134 %0 = inttoptr i64 %or to ptr
5135 store i16 %conv, ptr %0, align 2
5139 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5140 define dso_local void @st_disjoint_align32_float_int16_t(i64 %ptr, float %str) {
5141 ; CHECK-P10-LABEL: st_disjoint_align32_float_int16_t:
5142 ; CHECK-P10: # %bb.0: # %entry
5143 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
5144 ; CHECK-P10-NEXT: lis r4, -15264
5145 ; CHECK-P10-NEXT: and r3, r3, r4
5146 ; CHECK-P10-NEXT: pli r4, 999990000
5147 ; CHECK-P10-NEXT: stxsihx f0, r3, r4
5148 ; CHECK-P10-NEXT: blr
5150 ; CHECK-P9-LABEL: st_disjoint_align32_float_int16_t:
5151 ; CHECK-P9: # %bb.0: # %entry
5152 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
5153 ; CHECK-P9-NEXT: lis r4, -15264
5154 ; CHECK-P9-NEXT: and r3, r3, r4
5155 ; CHECK-P9-NEXT: lis r4, 15258
5156 ; CHECK-P9-NEXT: ori r4, r4, 41712
5157 ; CHECK-P9-NEXT: stxsihx f0, r3, r4
5158 ; CHECK-P9-NEXT: blr
5160 ; CHECK-P8-LABEL: st_disjoint_align32_float_int16_t:
5161 ; CHECK-P8: # %bb.0: # %entry
5162 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5163 ; CHECK-P8-NEXT: lis r4, -15264
5164 ; CHECK-P8-NEXT: lis r5, 15258
5165 ; CHECK-P8-NEXT: and r3, r3, r4
5166 ; CHECK-P8-NEXT: ori r5, r5, 41712
5167 ; CHECK-P8-NEXT: mffprwz r4, f0
5168 ; CHECK-P8-NEXT: sthx r4, r3, r5
5169 ; CHECK-P8-NEXT: blr
5171 %and = and i64 %ptr, -1000341504
5172 %conv = fptosi float %str to i16
5173 %or = or i64 %and, 999990000
5174 %0 = inttoptr i64 %or to ptr
5175 store i16 %conv, ptr %0, align 16
5179 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5180 define dso_local void @st_not_disjoint64_float_int16_t(i64 %ptr, float %str) {
5181 ; CHECK-P10-LABEL: st_not_disjoint64_float_int16_t:
5182 ; CHECK-P10: # %bb.0: # %entry
5183 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
5184 ; CHECK-P10-NEXT: pli r4, 232
5185 ; CHECK-P10-NEXT: pli r5, 3567587329
5186 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
5187 ; CHECK-P10-NEXT: or r3, r3, r5
5188 ; CHECK-P10-NEXT: stxsihx f0, 0, r3
5189 ; CHECK-P10-NEXT: blr
5191 ; CHECK-P9-LABEL: st_not_disjoint64_float_int16_t:
5192 ; CHECK-P9: # %bb.0: # %entry
5193 ; CHECK-P9-NEXT: li r4, 29
5194 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
5195 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
5196 ; CHECK-P9-NEXT: oris r4, r4, 54437
5197 ; CHECK-P9-NEXT: ori r4, r4, 4097
5198 ; CHECK-P9-NEXT: or r3, r3, r4
5199 ; CHECK-P9-NEXT: stxsihx f0, 0, r3
5200 ; CHECK-P9-NEXT: blr
5202 ; CHECK-P8-LABEL: st_not_disjoint64_float_int16_t:
5203 ; CHECK-P8: # %bb.0: # %entry
5204 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5205 ; CHECK-P8-NEXT: li r5, 29
5206 ; CHECK-P8-NEXT: rldic r5, r5, 35, 24
5207 ; CHECK-P8-NEXT: oris r5, r5, 54437
5208 ; CHECK-P8-NEXT: mffprwz r4, f0
5209 ; CHECK-P8-NEXT: ori r5, r5, 4097
5210 ; CHECK-P8-NEXT: or r3, r3, r5
5211 ; CHECK-P8-NEXT: sth r4, 0(r3)
5212 ; CHECK-P8-NEXT: blr
5214 %conv = fptosi float %str to i16
5215 %or = or i64 %ptr, 1000000000001
5216 %0 = inttoptr i64 %or to ptr
5217 store i16 %conv, ptr %0, align 2
5221 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5222 define dso_local void @st_disjoint_align64_float_int16_t(i64 %ptr, float %str) {
5223 ; CHECK-P10-LABEL: st_disjoint_align64_float_int16_t:
5224 ; CHECK-P10: # %bb.0: # %entry
5225 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
5226 ; CHECK-P10-NEXT: pli r4, 244140625
5227 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
5228 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
5229 ; CHECK-P10-NEXT: stxsihx f0, r3, r4
5230 ; CHECK-P10-NEXT: blr
5232 ; CHECK-P9-LABEL: st_disjoint_align64_float_int16_t:
5233 ; CHECK-P9: # %bb.0: # %entry
5234 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
5235 ; CHECK-P9-NEXT: lis r4, 3725
5236 ; CHECK-P9-NEXT: rldicr r3, r3, 0, 23
5237 ; CHECK-P9-NEXT: ori r4, r4, 19025
5238 ; CHECK-P9-NEXT: rldic r4, r4, 12, 24
5239 ; CHECK-P9-NEXT: stxsihx f0, r3, r4
5240 ; CHECK-P9-NEXT: blr
5242 ; CHECK-P8-LABEL: st_disjoint_align64_float_int16_t:
5243 ; CHECK-P8: # %bb.0: # %entry
5244 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5245 ; CHECK-P8-NEXT: lis r5, 3725
5246 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 23
5247 ; CHECK-P8-NEXT: ori r5, r5, 19025
5248 ; CHECK-P8-NEXT: rldic r5, r5, 12, 24
5249 ; CHECK-P8-NEXT: mffprwz r4, f0
5250 ; CHECK-P8-NEXT: sthx r4, r3, r5
5251 ; CHECK-P8-NEXT: blr
5253 %and = and i64 %ptr, -1099511627776
5254 %conv = fptosi float %str to i16
5255 %or = or i64 %and, 1000000000000
5256 %0 = inttoptr i64 %or to ptr
5257 store i16 %conv, ptr %0, align 4096
5261 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5262 define dso_local void @st_cst_align16_float_int16_t(float %str) {
5263 ; CHECK-POSTP8-LABEL: st_cst_align16_float_int16_t:
5264 ; CHECK-POSTP8: # %bb.0: # %entry
5265 ; CHECK-POSTP8-NEXT: xscvdpsxds f0, f1
5266 ; CHECK-POSTP8-NEXT: li r3, 4080
5267 ; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3
5268 ; CHECK-POSTP8-NEXT: blr
5270 ; CHECK-P8-LABEL: st_cst_align16_float_int16_t:
5271 ; CHECK-P8: # %bb.0: # %entry
5272 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5273 ; CHECK-P8-NEXT: mffprwz r3, f0
5274 ; CHECK-P8-NEXT: sth r3, 4080(0)
5275 ; CHECK-P8-NEXT: blr
5277 %conv = fptosi float %str to i16
5278 store i16 %conv, ptr inttoptr (i64 4080 to ptr), align 16
5282 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5283 define dso_local void @st_cst_align32_float_int16_t(float %str) {
5284 ; CHECK-P10-LABEL: st_cst_align32_float_int16_t:
5285 ; CHECK-P10: # %bb.0: # %entry
5286 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
5287 ; CHECK-P10-NEXT: pli r3, 9999900
5288 ; CHECK-P10-NEXT: stxsihx f0, 0, r3
5289 ; CHECK-P10-NEXT: blr
5291 ; CHECK-P9-LABEL: st_cst_align32_float_int16_t:
5292 ; CHECK-P9: # %bb.0: # %entry
5293 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
5294 ; CHECK-P9-NEXT: lis r3, 152
5295 ; CHECK-P9-NEXT: ori r3, r3, 38428
5296 ; CHECK-P9-NEXT: stxsihx f0, 0, r3
5297 ; CHECK-P9-NEXT: blr
5299 ; CHECK-P8-LABEL: st_cst_align32_float_int16_t:
5300 ; CHECK-P8: # %bb.0: # %entry
5301 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5302 ; CHECK-P8-NEXT: lis r4, 153
5303 ; CHECK-P8-NEXT: mffprwz r3, f0
5304 ; CHECK-P8-NEXT: sth r3, -27108(r4)
5305 ; CHECK-P8-NEXT: blr
5307 %conv = fptosi float %str to i16
5308 store i16 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
5312 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5313 define dso_local void @st_cst_align64_float_int16_t(float %str) {
5314 ; CHECK-P10-LABEL: st_cst_align64_float_int16_t:
5315 ; CHECK-P10: # %bb.0: # %entry
5316 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
5317 ; CHECK-P10-NEXT: pli r3, 244140625
5318 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
5319 ; CHECK-P10-NEXT: stxsihx f0, 0, r3
5320 ; CHECK-P10-NEXT: blr
5322 ; CHECK-P9-LABEL: st_cst_align64_float_int16_t:
5323 ; CHECK-P9: # %bb.0: # %entry
5324 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
5325 ; CHECK-P9-NEXT: lis r3, 3725
5326 ; CHECK-P9-NEXT: ori r3, r3, 19025
5327 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
5328 ; CHECK-P9-NEXT: stxsihx f0, 0, r3
5329 ; CHECK-P9-NEXT: blr
5331 ; CHECK-P8-LABEL: st_cst_align64_float_int16_t:
5332 ; CHECK-P8: # %bb.0: # %entry
5333 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5334 ; CHECK-P8-NEXT: lis r4, 3725
5335 ; CHECK-P8-NEXT: ori r4, r4, 19025
5336 ; CHECK-P8-NEXT: rldic r4, r4, 12, 24
5337 ; CHECK-P8-NEXT: mffprwz r3, f0
5338 ; CHECK-P8-NEXT: sth r3, 0(r4)
5339 ; CHECK-P8-NEXT: blr
5341 %conv = fptosi float %str to i16
5342 store i16 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
5346 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5347 define dso_local void @st_0_float_uint32_t(i64 %ptr, float %str) {
5348 ; CHECK-LABEL: st_0_float_uint32_t:
5349 ; CHECK: # %bb.0: # %entry
5350 ; CHECK-NEXT: xscvdpuxws f0, f1
5351 ; CHECK-NEXT: stfiwx f0, 0, r3
5354 %conv = fptoui float %str to i32
5355 %0 = inttoptr i64 %ptr to ptr
5356 store i32 %conv, ptr %0, align 4
5360 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5361 define dso_local void @st_align16_float_uint32_t(ptr nocapture %ptr, float %str) {
5362 ; CHECK-LABEL: st_align16_float_uint32_t:
5363 ; CHECK: # %bb.0: # %entry
5364 ; CHECK-NEXT: xscvdpuxws f0, f1
5365 ; CHECK-NEXT: addi r3, r3, 8
5366 ; CHECK-NEXT: stfiwx f0, 0, r3
5369 %conv = fptoui float %str to i32
5370 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
5371 store i32 %conv, ptr %add.ptr, align 4
5375 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5376 define dso_local void @st_align32_float_uint32_t(ptr nocapture %ptr, float %str) {
5377 ; CHECK-P10-LABEL: st_align32_float_uint32_t:
5378 ; CHECK-P10: # %bb.0: # %entry
5379 ; CHECK-P10-NEXT: xscvdpuxws f0, f1
5380 ; CHECK-P10-NEXT: pli r4, 99999000
5381 ; CHECK-P10-NEXT: stfiwx f0, r3, r4
5382 ; CHECK-P10-NEXT: blr
5384 ; CHECK-PREP10-LABEL: st_align32_float_uint32_t:
5385 ; CHECK-PREP10: # %bb.0: # %entry
5386 ; CHECK-PREP10-NEXT: xscvdpuxws f0, f1
5387 ; CHECK-PREP10-NEXT: lis r4, 1525
5388 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
5389 ; CHECK-PREP10-NEXT: stfiwx f0, r3, r4
5390 ; CHECK-PREP10-NEXT: blr
5392 %conv = fptoui float %str to i32
5393 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
5394 store i32 %conv, ptr %add.ptr, align 4
5398 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5399 define dso_local void @st_align64_float_uint32_t(ptr nocapture %ptr, float %str) {
5400 ; CHECK-P10-LABEL: st_align64_float_uint32_t:
5401 ; CHECK-P10: # %bb.0: # %entry
5402 ; CHECK-P10-NEXT: xscvdpuxws f0, f1
5403 ; CHECK-P10-NEXT: pli r4, 244140625
5404 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
5405 ; CHECK-P10-NEXT: stfiwx f0, r3, r4
5406 ; CHECK-P10-NEXT: blr
5408 ; CHECK-PREP10-LABEL: st_align64_float_uint32_t:
5409 ; CHECK-PREP10: # %bb.0: # %entry
5410 ; CHECK-PREP10-NEXT: xscvdpuxws f0, f1
5411 ; CHECK-PREP10-NEXT: lis r4, 3725
5412 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
5413 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
5414 ; CHECK-PREP10-NEXT: stfiwx f0, r3, r4
5415 ; CHECK-PREP10-NEXT: blr
5417 %conv = fptoui float %str to i32
5418 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
5419 store i32 %conv, ptr %add.ptr, align 4
5423 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5424 define dso_local void @st_reg_float_uint32_t(ptr nocapture %ptr, i64 %off, float %str) {
5425 ; CHECK-LABEL: st_reg_float_uint32_t:
5426 ; CHECK: # %bb.0: # %entry
5427 ; CHECK-NEXT: xscvdpuxws f0, f1
5428 ; CHECK-NEXT: stfiwx f0, r3, r4
5431 %conv = fptoui float %str to i32
5432 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
5433 store i32 %conv, ptr %add.ptr, align 4
5437 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5438 define dso_local void @st_or1_float_uint32_t(i64 %ptr, i8 zeroext %off, float %str) {
5439 ; CHECK-LABEL: st_or1_float_uint32_t:
5440 ; CHECK: # %bb.0: # %entry
5441 ; CHECK-NEXT: xscvdpuxws f0, f1
5442 ; CHECK-NEXT: or r3, r4, r3
5443 ; CHECK-NEXT: stfiwx f0, 0, r3
5446 %conv = fptoui float %str to i32
5447 %conv1 = zext i8 %off to i64
5448 %or = or i64 %conv1, %ptr
5449 %0 = inttoptr i64 %or to ptr
5450 store i32 %conv, ptr %0, align 4
5454 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5455 define dso_local void @st_not_disjoint16_float_uint32_t(i64 %ptr, float %str) {
5456 ; CHECK-LABEL: st_not_disjoint16_float_uint32_t:
5457 ; CHECK: # %bb.0: # %entry
5458 ; CHECK-NEXT: xscvdpuxws f0, f1
5459 ; CHECK-NEXT: ori r3, r3, 6
5460 ; CHECK-NEXT: stfiwx f0, 0, r3
5463 %conv = fptoui float %str to i32
5464 %or = or i64 %ptr, 6
5465 %0 = inttoptr i64 %or to ptr
5466 store i32 %conv, ptr %0, align 4
5470 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5471 define dso_local void @st_disjoint_align16_float_uint32_t(i64 %ptr, float %str) {
5472 ; CHECK-LABEL: st_disjoint_align16_float_uint32_t:
5473 ; CHECK: # %bb.0: # %entry
5474 ; CHECK-NEXT: xscvdpuxws f0, f1
5475 ; CHECK-NEXT: rldicr r3, r3, 0, 51
5476 ; CHECK-NEXT: ori r3, r3, 24
5477 ; CHECK-NEXT: stfiwx f0, 0, r3
5480 %and = and i64 %ptr, -4096
5481 %conv = fptoui float %str to i32
5482 %or = or i64 %and, 24
5483 %0 = inttoptr i64 %or to ptr
5484 store i32 %conv, ptr %0, align 8
5488 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5489 define dso_local void @st_not_disjoint32_float_uint32_t(i64 %ptr, float %str) {
5490 ; CHECK-LABEL: st_not_disjoint32_float_uint32_t:
5491 ; CHECK: # %bb.0: # %entry
5492 ; CHECK-NEXT: xscvdpuxws f0, f1
5493 ; CHECK-NEXT: ori r3, r3, 34463
5494 ; CHECK-NEXT: oris r3, r3, 1
5495 ; CHECK-NEXT: stfiwx f0, 0, r3
5498 %conv = fptoui float %str to i32
5499 %or = or i64 %ptr, 99999
5500 %0 = inttoptr i64 %or to ptr
5501 store i32 %conv, ptr %0, align 4
5505 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5506 define dso_local void @st_disjoint_align32_float_uint32_t(i64 %ptr, float %str) {
5507 ; CHECK-P10-LABEL: st_disjoint_align32_float_uint32_t:
5508 ; CHECK-P10: # %bb.0: # %entry
5509 ; CHECK-P10-NEXT: xscvdpuxws f0, f1
5510 ; CHECK-P10-NEXT: lis r4, -15264
5511 ; CHECK-P10-NEXT: and r3, r3, r4
5512 ; CHECK-P10-NEXT: pli r4, 999990000
5513 ; CHECK-P10-NEXT: stfiwx f0, r3, r4
5514 ; CHECK-P10-NEXT: blr
5516 ; CHECK-P9-LABEL: st_disjoint_align32_float_uint32_t:
5517 ; CHECK-P9: # %bb.0: # %entry
5518 ; CHECK-P9-NEXT: xscvdpuxws f0, f1
5519 ; CHECK-P9-NEXT: lis r4, -15264
5520 ; CHECK-P9-NEXT: and r3, r3, r4
5521 ; CHECK-P9-NEXT: lis r4, 15258
5522 ; CHECK-P9-NEXT: ori r4, r4, 41712
5523 ; CHECK-P9-NEXT: stfiwx f0, r3, r4
5524 ; CHECK-P9-NEXT: blr
5526 ; CHECK-P8-LABEL: st_disjoint_align32_float_uint32_t:
5527 ; CHECK-P8: # %bb.0: # %entry
5528 ; CHECK-P8-NEXT: lis r4, -15264
5529 ; CHECK-P8-NEXT: xscvdpuxws f0, f1
5530 ; CHECK-P8-NEXT: and r3, r3, r4
5531 ; CHECK-P8-NEXT: lis r4, 15258
5532 ; CHECK-P8-NEXT: ori r4, r4, 41712
5533 ; CHECK-P8-NEXT: stfiwx f0, r3, r4
5534 ; CHECK-P8-NEXT: blr
5536 %and = and i64 %ptr, -1000341504
5537 %conv = fptoui float %str to i32
5538 %or = or i64 %and, 999990000
5539 %0 = inttoptr i64 %or to ptr
5540 store i32 %conv, ptr %0, align 16
5544 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5545 define dso_local void @st_not_disjoint64_float_uint32_t(i64 %ptr, float %str) {
5546 ; CHECK-P10-LABEL: st_not_disjoint64_float_uint32_t:
5547 ; CHECK-P10: # %bb.0: # %entry
5548 ; CHECK-P10-NEXT: xscvdpuxws f0, f1
5549 ; CHECK-P10-NEXT: pli r4, 232
5550 ; CHECK-P10-NEXT: pli r5, 3567587329
5551 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
5552 ; CHECK-P10-NEXT: or r3, r3, r5
5553 ; CHECK-P10-NEXT: stfiwx f0, 0, r3
5554 ; CHECK-P10-NEXT: blr
5556 ; CHECK-PREP10-LABEL: st_not_disjoint64_float_uint32_t:
5557 ; CHECK-PREP10: # %bb.0: # %entry
5558 ; CHECK-PREP10-NEXT: li r4, 29
5559 ; CHECK-PREP10-NEXT: xscvdpuxws f0, f1
5560 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
5561 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
5562 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
5563 ; CHECK-PREP10-NEXT: or r3, r3, r4
5564 ; CHECK-PREP10-NEXT: stfiwx f0, 0, r3
5565 ; CHECK-PREP10-NEXT: blr
5567 %conv = fptoui float %str to i32
5568 %or = or i64 %ptr, 1000000000001
5569 %0 = inttoptr i64 %or to ptr
5570 store i32 %conv, ptr %0, align 4
5574 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5575 define dso_local void @st_disjoint_align64_float_uint32_t(i64 %ptr, float %str) {
5576 ; CHECK-P10-LABEL: st_disjoint_align64_float_uint32_t:
5577 ; CHECK-P10: # %bb.0: # %entry
5578 ; CHECK-P10-NEXT: xscvdpuxws f0, f1
5579 ; CHECK-P10-NEXT: pli r4, 244140625
5580 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
5581 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
5582 ; CHECK-P10-NEXT: stfiwx f0, r3, r4
5583 ; CHECK-P10-NEXT: blr
5585 ; CHECK-PREP10-LABEL: st_disjoint_align64_float_uint32_t:
5586 ; CHECK-PREP10: # %bb.0: # %entry
5587 ; CHECK-PREP10-NEXT: xscvdpuxws f0, f1
5588 ; CHECK-PREP10-NEXT: lis r4, 3725
5589 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
5590 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
5591 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
5592 ; CHECK-PREP10-NEXT: stfiwx f0, r3, r4
5593 ; CHECK-PREP10-NEXT: blr
5595 %and = and i64 %ptr, -1099511627776
5596 %conv = fptoui float %str to i32
5597 %or = or i64 %and, 1000000000000
5598 %0 = inttoptr i64 %or to ptr
5599 store i32 %conv, ptr %0, align 4096
5603 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5604 define dso_local void @st_cst_align16_float_uint32_t(float %str) {
5605 ; CHECK-LABEL: st_cst_align16_float_uint32_t:
5606 ; CHECK: # %bb.0: # %entry
5607 ; CHECK-NEXT: xscvdpuxws f0, f1
5608 ; CHECK-NEXT: li r3, 4080
5609 ; CHECK-NEXT: stfiwx f0, 0, r3
5612 %conv = fptoui float %str to i32
5613 store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 16
5617 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5618 define dso_local void @st_cst_align32_float_uint32_t(float %str) {
5619 ; CHECK-P10-LABEL: st_cst_align32_float_uint32_t:
5620 ; CHECK-P10: # %bb.0: # %entry
5621 ; CHECK-P10-NEXT: xscvdpuxws f0, f1
5622 ; CHECK-P10-NEXT: pli r3, 9999900
5623 ; CHECK-P10-NEXT: stfiwx f0, 0, r3
5624 ; CHECK-P10-NEXT: blr
5626 ; CHECK-PREP10-LABEL: st_cst_align32_float_uint32_t:
5627 ; CHECK-PREP10: # %bb.0: # %entry
5628 ; CHECK-PREP10-NEXT: xscvdpuxws f0, f1
5629 ; CHECK-PREP10-NEXT: lis r3, 152
5630 ; CHECK-PREP10-NEXT: ori r3, r3, 38428
5631 ; CHECK-PREP10-NEXT: stfiwx f0, 0, r3
5632 ; CHECK-PREP10-NEXT: blr
5634 %conv = fptoui float %str to i32
5635 store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
5639 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5640 define dso_local void @st_cst_align64_float_uint32_t(float %str) {
5641 ; CHECK-P10-LABEL: st_cst_align64_float_uint32_t:
5642 ; CHECK-P10: # %bb.0: # %entry
5643 ; CHECK-P10-NEXT: xscvdpuxws f0, f1
5644 ; CHECK-P10-NEXT: pli r3, 244140625
5645 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
5646 ; CHECK-P10-NEXT: stfiwx f0, 0, r3
5647 ; CHECK-P10-NEXT: blr
5649 ; CHECK-PREP10-LABEL: st_cst_align64_float_uint32_t:
5650 ; CHECK-PREP10: # %bb.0: # %entry
5651 ; CHECK-PREP10-NEXT: xscvdpuxws f0, f1
5652 ; CHECK-PREP10-NEXT: lis r3, 3725
5653 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
5654 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
5655 ; CHECK-PREP10-NEXT: stfiwx f0, 0, r3
5656 ; CHECK-PREP10-NEXT: blr
5658 %conv = fptoui float %str to i32
5659 store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
5663 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5664 define dso_local void @st_0_float_int32_t(i64 %ptr, float %str) {
5665 ; CHECK-LABEL: st_0_float_int32_t:
5666 ; CHECK: # %bb.0: # %entry
5667 ; CHECK-NEXT: xscvdpsxws f0, f1
5668 ; CHECK-NEXT: stfiwx f0, 0, r3
5671 %conv = fptosi float %str to i32
5672 %0 = inttoptr i64 %ptr to ptr
5673 store i32 %conv, ptr %0, align 4
5677 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5678 define dso_local void @st_align16_float_int32_t(ptr nocapture %ptr, float %str) {
5679 ; CHECK-LABEL: st_align16_float_int32_t:
5680 ; CHECK: # %bb.0: # %entry
5681 ; CHECK-NEXT: xscvdpsxws f0, f1
5682 ; CHECK-NEXT: addi r3, r3, 8
5683 ; CHECK-NEXT: stfiwx f0, 0, r3
5686 %conv = fptosi float %str to i32
5687 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
5688 store i32 %conv, ptr %add.ptr, align 4
5692 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5693 define dso_local void @st_align32_float_int32_t(ptr nocapture %ptr, float %str) {
5694 ; CHECK-P10-LABEL: st_align32_float_int32_t:
5695 ; CHECK-P10: # %bb.0: # %entry
5696 ; CHECK-P10-NEXT: xscvdpsxws f0, f1
5697 ; CHECK-P10-NEXT: pli r4, 99999000
5698 ; CHECK-P10-NEXT: stfiwx f0, r3, r4
5699 ; CHECK-P10-NEXT: blr
5701 ; CHECK-PREP10-LABEL: st_align32_float_int32_t:
5702 ; CHECK-PREP10: # %bb.0: # %entry
5703 ; CHECK-PREP10-NEXT: xscvdpsxws f0, f1
5704 ; CHECK-PREP10-NEXT: lis r4, 1525
5705 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
5706 ; CHECK-PREP10-NEXT: stfiwx f0, r3, r4
5707 ; CHECK-PREP10-NEXT: blr
5709 %conv = fptosi float %str to i32
5710 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
5711 store i32 %conv, ptr %add.ptr, align 4
5715 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5716 define dso_local void @st_align64_float_int32_t(ptr nocapture %ptr, float %str) {
5717 ; CHECK-P10-LABEL: st_align64_float_int32_t:
5718 ; CHECK-P10: # %bb.0: # %entry
5719 ; CHECK-P10-NEXT: xscvdpsxws f0, f1
5720 ; CHECK-P10-NEXT: pli r4, 244140625
5721 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
5722 ; CHECK-P10-NEXT: stfiwx f0, r3, r4
5723 ; CHECK-P10-NEXT: blr
5725 ; CHECK-PREP10-LABEL: st_align64_float_int32_t:
5726 ; CHECK-PREP10: # %bb.0: # %entry
5727 ; CHECK-PREP10-NEXT: xscvdpsxws f0, f1
5728 ; CHECK-PREP10-NEXT: lis r4, 3725
5729 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
5730 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
5731 ; CHECK-PREP10-NEXT: stfiwx f0, r3, r4
5732 ; CHECK-PREP10-NEXT: blr
5734 %conv = fptosi float %str to i32
5735 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
5736 store i32 %conv, ptr %add.ptr, align 4
5740 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5741 define dso_local void @st_reg_float_int32_t(ptr nocapture %ptr, i64 %off, float %str) {
5742 ; CHECK-LABEL: st_reg_float_int32_t:
5743 ; CHECK: # %bb.0: # %entry
5744 ; CHECK-NEXT: xscvdpsxws f0, f1
5745 ; CHECK-NEXT: stfiwx f0, r3, r4
5748 %conv = fptosi float %str to i32
5749 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
5750 store i32 %conv, ptr %add.ptr, align 4
5754 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5755 define dso_local void @st_or1_float_int32_t(i64 %ptr, i8 zeroext %off, float %str) {
5756 ; CHECK-LABEL: st_or1_float_int32_t:
5757 ; CHECK: # %bb.0: # %entry
5758 ; CHECK-NEXT: xscvdpsxws f0, f1
5759 ; CHECK-NEXT: or r3, r4, r3
5760 ; CHECK-NEXT: stfiwx f0, 0, r3
5763 %conv = fptosi float %str to i32
5764 %conv1 = zext i8 %off to i64
5765 %or = or i64 %conv1, %ptr
5766 %0 = inttoptr i64 %or to ptr
5767 store i32 %conv, ptr %0, align 4
5771 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5772 define dso_local void @st_not_disjoint16_float_int32_t(i64 %ptr, float %str) {
5773 ; CHECK-LABEL: st_not_disjoint16_float_int32_t:
5774 ; CHECK: # %bb.0: # %entry
5775 ; CHECK-NEXT: xscvdpsxws f0, f1
5776 ; CHECK-NEXT: ori r3, r3, 6
5777 ; CHECK-NEXT: stfiwx f0, 0, r3
5780 %conv = fptosi float %str to i32
5781 %or = or i64 %ptr, 6
5782 %0 = inttoptr i64 %or to ptr
5783 store i32 %conv, ptr %0, align 4
5787 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5788 define dso_local void @st_disjoint_align16_float_int32_t(i64 %ptr, float %str) {
5789 ; CHECK-LABEL: st_disjoint_align16_float_int32_t:
5790 ; CHECK: # %bb.0: # %entry
5791 ; CHECK-NEXT: xscvdpsxws f0, f1
5792 ; CHECK-NEXT: rldicr r3, r3, 0, 51
5793 ; CHECK-NEXT: ori r3, r3, 24
5794 ; CHECK-NEXT: stfiwx f0, 0, r3
5797 %and = and i64 %ptr, -4096
5798 %conv = fptosi float %str to i32
5799 %or = or i64 %and, 24
5800 %0 = inttoptr i64 %or to ptr
5801 store i32 %conv, ptr %0, align 8
5805 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5806 define dso_local void @st_not_disjoint32_float_int32_t(i64 %ptr, float %str) {
5807 ; CHECK-LABEL: st_not_disjoint32_float_int32_t:
5808 ; CHECK: # %bb.0: # %entry
5809 ; CHECK-NEXT: xscvdpsxws f0, f1
5810 ; CHECK-NEXT: ori r3, r3, 34463
5811 ; CHECK-NEXT: oris r3, r3, 1
5812 ; CHECK-NEXT: stfiwx f0, 0, r3
5815 %conv = fptosi float %str to i32
5816 %or = or i64 %ptr, 99999
5817 %0 = inttoptr i64 %or to ptr
5818 store i32 %conv, ptr %0, align 4
5822 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5823 define dso_local void @st_disjoint_align32_float_int32_t(i64 %ptr, float %str) {
5824 ; CHECK-P10-LABEL: st_disjoint_align32_float_int32_t:
5825 ; CHECK-P10: # %bb.0: # %entry
5826 ; CHECK-P10-NEXT: xscvdpsxws f0, f1
5827 ; CHECK-P10-NEXT: lis r4, -15264
5828 ; CHECK-P10-NEXT: and r3, r3, r4
5829 ; CHECK-P10-NEXT: pli r4, 999990000
5830 ; CHECK-P10-NEXT: stfiwx f0, r3, r4
5831 ; CHECK-P10-NEXT: blr
5833 ; CHECK-P9-LABEL: st_disjoint_align32_float_int32_t:
5834 ; CHECK-P9: # %bb.0: # %entry
5835 ; CHECK-P9-NEXT: xscvdpsxws f0, f1
5836 ; CHECK-P9-NEXT: lis r4, -15264
5837 ; CHECK-P9-NEXT: and r3, r3, r4
5838 ; CHECK-P9-NEXT: lis r4, 15258
5839 ; CHECK-P9-NEXT: ori r4, r4, 41712
5840 ; CHECK-P9-NEXT: stfiwx f0, r3, r4
5841 ; CHECK-P9-NEXT: blr
5843 ; CHECK-P8-LABEL: st_disjoint_align32_float_int32_t:
5844 ; CHECK-P8: # %bb.0: # %entry
5845 ; CHECK-P8-NEXT: lis r4, -15264
5846 ; CHECK-P8-NEXT: xscvdpsxws f0, f1
5847 ; CHECK-P8-NEXT: and r3, r3, r4
5848 ; CHECK-P8-NEXT: lis r4, 15258
5849 ; CHECK-P8-NEXT: ori r4, r4, 41712
5850 ; CHECK-P8-NEXT: stfiwx f0, r3, r4
5851 ; CHECK-P8-NEXT: blr
5853 %and = and i64 %ptr, -1000341504
5854 %conv = fptosi float %str to i32
5855 %or = or i64 %and, 999990000
5856 %0 = inttoptr i64 %or to ptr
5857 store i32 %conv, ptr %0, align 16
5861 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5862 define dso_local void @st_not_disjoint64_float_int32_t(i64 %ptr, float %str) {
5863 ; CHECK-P10-LABEL: st_not_disjoint64_float_int32_t:
5864 ; CHECK-P10: # %bb.0: # %entry
5865 ; CHECK-P10-NEXT: xscvdpsxws f0, f1
5866 ; CHECK-P10-NEXT: pli r4, 232
5867 ; CHECK-P10-NEXT: pli r5, 3567587329
5868 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
5869 ; CHECK-P10-NEXT: or r3, r3, r5
5870 ; CHECK-P10-NEXT: stfiwx f0, 0, r3
5871 ; CHECK-P10-NEXT: blr
5873 ; CHECK-PREP10-LABEL: st_not_disjoint64_float_int32_t:
5874 ; CHECK-PREP10: # %bb.0: # %entry
5875 ; CHECK-PREP10-NEXT: li r4, 29
5876 ; CHECK-PREP10-NEXT: xscvdpsxws f0, f1
5877 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
5878 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
5879 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
5880 ; CHECK-PREP10-NEXT: or r3, r3, r4
5881 ; CHECK-PREP10-NEXT: stfiwx f0, 0, r3
5882 ; CHECK-PREP10-NEXT: blr
5884 %conv = fptosi float %str to i32
5885 %or = or i64 %ptr, 1000000000001
5886 %0 = inttoptr i64 %or to ptr
5887 store i32 %conv, ptr %0, align 4
5891 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5892 define dso_local void @st_disjoint_align64_float_int32_t(i64 %ptr, float %str) {
5893 ; CHECK-P10-LABEL: st_disjoint_align64_float_int32_t:
5894 ; CHECK-P10: # %bb.0: # %entry
5895 ; CHECK-P10-NEXT: xscvdpsxws f0, f1
5896 ; CHECK-P10-NEXT: pli r4, 244140625
5897 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
5898 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
5899 ; CHECK-P10-NEXT: stfiwx f0, r3, r4
5900 ; CHECK-P10-NEXT: blr
5902 ; CHECK-PREP10-LABEL: st_disjoint_align64_float_int32_t:
5903 ; CHECK-PREP10: # %bb.0: # %entry
5904 ; CHECK-PREP10-NEXT: xscvdpsxws f0, f1
5905 ; CHECK-PREP10-NEXT: lis r4, 3725
5906 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
5907 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
5908 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
5909 ; CHECK-PREP10-NEXT: stfiwx f0, r3, r4
5910 ; CHECK-PREP10-NEXT: blr
5912 %and = and i64 %ptr, -1099511627776
5913 %conv = fptosi float %str to i32
5914 %or = or i64 %and, 1000000000000
5915 %0 = inttoptr i64 %or to ptr
5916 store i32 %conv, ptr %0, align 4096
5920 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5921 define dso_local void @st_cst_align16_float_int32_t(float %str) {
5922 ; CHECK-LABEL: st_cst_align16_float_int32_t:
5923 ; CHECK: # %bb.0: # %entry
5924 ; CHECK-NEXT: xscvdpsxws f0, f1
5925 ; CHECK-NEXT: li r3, 4080
5926 ; CHECK-NEXT: stfiwx f0, 0, r3
5929 %conv = fptosi float %str to i32
5930 store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 16
5934 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5935 define dso_local void @st_cst_align32_float_int32_t(float %str) {
5936 ; CHECK-P10-LABEL: st_cst_align32_float_int32_t:
5937 ; CHECK-P10: # %bb.0: # %entry
5938 ; CHECK-P10-NEXT: xscvdpsxws f0, f1
5939 ; CHECK-P10-NEXT: pli r3, 9999900
5940 ; CHECK-P10-NEXT: stfiwx f0, 0, r3
5941 ; CHECK-P10-NEXT: blr
5943 ; CHECK-PREP10-LABEL: st_cst_align32_float_int32_t:
5944 ; CHECK-PREP10: # %bb.0: # %entry
5945 ; CHECK-PREP10-NEXT: xscvdpsxws f0, f1
5946 ; CHECK-PREP10-NEXT: lis r3, 152
5947 ; CHECK-PREP10-NEXT: ori r3, r3, 38428
5948 ; CHECK-PREP10-NEXT: stfiwx f0, 0, r3
5949 ; CHECK-PREP10-NEXT: blr
5951 %conv = fptosi float %str to i32
5952 store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
5956 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5957 define dso_local void @st_cst_align64_float_int32_t(float %str) {
5958 ; CHECK-P10-LABEL: st_cst_align64_float_int32_t:
5959 ; CHECK-P10: # %bb.0: # %entry
5960 ; CHECK-P10-NEXT: xscvdpsxws f0, f1
5961 ; CHECK-P10-NEXT: pli r3, 244140625
5962 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
5963 ; CHECK-P10-NEXT: stfiwx f0, 0, r3
5964 ; CHECK-P10-NEXT: blr
5966 ; CHECK-PREP10-LABEL: st_cst_align64_float_int32_t:
5967 ; CHECK-PREP10: # %bb.0: # %entry
5968 ; CHECK-PREP10-NEXT: xscvdpsxws f0, f1
5969 ; CHECK-PREP10-NEXT: lis r3, 3725
5970 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
5971 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
5972 ; CHECK-PREP10-NEXT: stfiwx f0, 0, r3
5973 ; CHECK-PREP10-NEXT: blr
5975 %conv = fptosi float %str to i32
5976 store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
5980 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
5981 define dso_local void @st_0_float_uint64_t(i64 %ptr, float %str) {
5982 ; CHECK-POSTP8-LABEL: st_0_float_uint64_t:
5983 ; CHECK-POSTP8: # %bb.0: # %entry
5984 ; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1
5985 ; CHECK-POSTP8-NEXT: stxsd v2, 0(r3)
5986 ; CHECK-POSTP8-NEXT: blr
5988 ; CHECK-P8-LABEL: st_0_float_uint64_t:
5989 ; CHECK-P8: # %bb.0: # %entry
5990 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
5991 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
5992 ; CHECK-P8-NEXT: blr
5994 %conv = fptoui float %str to i64
5995 %0 = inttoptr i64 %ptr to ptr
5996 store i64 %conv, ptr %0, align 8
6000 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6001 define dso_local void @st_align16_float_uint64_t(ptr nocapture %ptr, float %str) {
6002 ; CHECK-POSTP8-LABEL: st_align16_float_uint64_t:
6003 ; CHECK-POSTP8: # %bb.0: # %entry
6004 ; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1
6005 ; CHECK-POSTP8-NEXT: stxsd v2, 8(r3)
6006 ; CHECK-POSTP8-NEXT: blr
6008 ; CHECK-P8-LABEL: st_align16_float_uint64_t:
6009 ; CHECK-P8: # %bb.0: # %entry
6010 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6011 ; CHECK-P8-NEXT: li r4, 8
6012 ; CHECK-P8-NEXT: stxsdx f0, r3, r4
6013 ; CHECK-P8-NEXT: blr
6015 %conv = fptoui float %str to i64
6016 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
6017 store i64 %conv, ptr %add.ptr, align 8
6021 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6022 define dso_local void @st_align32_float_uint64_t(ptr nocapture %ptr, float %str) {
6023 ; CHECK-P10-LABEL: st_align32_float_uint64_t:
6024 ; CHECK-P10: # %bb.0: # %entry
6025 ; CHECK-P10-NEXT: xscvdpuxds v2, f1
6026 ; CHECK-P10-NEXT: pstxsd v2, 99999000(r3), 0
6027 ; CHECK-P10-NEXT: blr
6029 ; CHECK-PREP10-LABEL: st_align32_float_uint64_t:
6030 ; CHECK-PREP10: # %bb.0: # %entry
6031 ; CHECK-PREP10-NEXT: xscvdpuxds f0, f1
6032 ; CHECK-PREP10-NEXT: lis r4, 1525
6033 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
6034 ; CHECK-PREP10-NEXT: stxsdx f0, r3, r4
6035 ; CHECK-PREP10-NEXT: blr
6037 %conv = fptoui float %str to i64
6038 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
6039 store i64 %conv, ptr %add.ptr, align 8
6043 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6044 define dso_local void @st_align64_float_uint64_t(ptr nocapture %ptr, float %str) {
6045 ; CHECK-P10-LABEL: st_align64_float_uint64_t:
6046 ; CHECK-P10: # %bb.0: # %entry
6047 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
6048 ; CHECK-P10-NEXT: pli r4, 244140625
6049 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
6050 ; CHECK-P10-NEXT: stxsdx f0, r3, r4
6051 ; CHECK-P10-NEXT: blr
6053 ; CHECK-PREP10-LABEL: st_align64_float_uint64_t:
6054 ; CHECK-PREP10: # %bb.0: # %entry
6055 ; CHECK-PREP10-NEXT: xscvdpuxds f0, f1
6056 ; CHECK-PREP10-NEXT: lis r4, 3725
6057 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
6058 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
6059 ; CHECK-PREP10-NEXT: stxsdx f0, r3, r4
6060 ; CHECK-PREP10-NEXT: blr
6062 %conv = fptoui float %str to i64
6063 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
6064 store i64 %conv, ptr %add.ptr, align 8
6068 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6069 define dso_local void @st_reg_float_uint64_t(ptr nocapture %ptr, i64 %off, float %str) {
6070 ; CHECK-LABEL: st_reg_float_uint64_t:
6071 ; CHECK: # %bb.0: # %entry
6072 ; CHECK-NEXT: xscvdpuxds f0, f1
6073 ; CHECK-NEXT: stxsdx f0, r3, r4
6076 %conv = fptoui float %str to i64
6077 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
6078 store i64 %conv, ptr %add.ptr, align 8
6082 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6083 define dso_local void @st_or1_float_uint64_t(i64 %ptr, i8 zeroext %off, float %str) {
6084 ; CHECK-POSTP8-LABEL: st_or1_float_uint64_t:
6085 ; CHECK-POSTP8: # %bb.0: # %entry
6086 ; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1
6087 ; CHECK-POSTP8-NEXT: or r3, r4, r3
6088 ; CHECK-POSTP8-NEXT: stxsd v2, 0(r3)
6089 ; CHECK-POSTP8-NEXT: blr
6091 ; CHECK-P8-LABEL: st_or1_float_uint64_t:
6092 ; CHECK-P8: # %bb.0: # %entry
6093 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6094 ; CHECK-P8-NEXT: or r3, r4, r3
6095 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6096 ; CHECK-P8-NEXT: blr
6098 %conv = fptoui float %str to i64
6099 %conv1 = zext i8 %off to i64
6100 %or = or i64 %conv1, %ptr
6101 %0 = inttoptr i64 %or to ptr
6102 store i64 %conv, ptr %0, align 8
6106 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6107 define dso_local void @st_not_disjoint16_float_uint64_t(i64 %ptr, float %str) {
6108 ; CHECK-POSTP8-LABEL: st_not_disjoint16_float_uint64_t:
6109 ; CHECK-POSTP8: # %bb.0: # %entry
6110 ; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1
6111 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
6112 ; CHECK-POSTP8-NEXT: stxsd v2, 0(r3)
6113 ; CHECK-POSTP8-NEXT: blr
6115 ; CHECK-P8-LABEL: st_not_disjoint16_float_uint64_t:
6116 ; CHECK-P8: # %bb.0: # %entry
6117 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6118 ; CHECK-P8-NEXT: ori r3, r3, 6
6119 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6120 ; CHECK-P8-NEXT: blr
6122 %conv = fptoui float %str to i64
6123 %or = or i64 %ptr, 6
6124 %0 = inttoptr i64 %or to ptr
6125 store i64 %conv, ptr %0, align 8
6129 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6130 define dso_local void @st_disjoint_align16_float_uint64_t(i64 %ptr, float %str) {
6131 ; CHECK-POSTP8-LABEL: st_disjoint_align16_float_uint64_t:
6132 ; CHECK-POSTP8: # %bb.0: # %entry
6133 ; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1
6134 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
6135 ; CHECK-POSTP8-NEXT: stxsd v2, 24(r3)
6136 ; CHECK-POSTP8-NEXT: blr
6138 ; CHECK-P8-LABEL: st_disjoint_align16_float_uint64_t:
6139 ; CHECK-P8: # %bb.0: # %entry
6140 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6141 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
6142 ; CHECK-P8-NEXT: ori r3, r3, 24
6143 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6144 ; CHECK-P8-NEXT: blr
6146 %and = and i64 %ptr, -4096
6147 %conv = fptoui float %str to i64
6148 %or = or i64 %and, 24
6149 %0 = inttoptr i64 %or to ptr
6150 store i64 %conv, ptr %0, align 8
6154 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6155 define dso_local void @st_not_disjoint32_float_uint64_t(i64 %ptr, float %str) {
6156 ; CHECK-POSTP8-LABEL: st_not_disjoint32_float_uint64_t:
6157 ; CHECK-POSTP8: # %bb.0: # %entry
6158 ; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1
6159 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
6160 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
6161 ; CHECK-POSTP8-NEXT: stxsd v2, 0(r3)
6162 ; CHECK-POSTP8-NEXT: blr
6164 ; CHECK-P8-LABEL: st_not_disjoint32_float_uint64_t:
6165 ; CHECK-P8: # %bb.0: # %entry
6166 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6167 ; CHECK-P8-NEXT: ori r3, r3, 34463
6168 ; CHECK-P8-NEXT: oris r3, r3, 1
6169 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6170 ; CHECK-P8-NEXT: blr
6172 %conv = fptoui float %str to i64
6173 %or = or i64 %ptr, 99999
6174 %0 = inttoptr i64 %or to ptr
6175 store i64 %conv, ptr %0, align 8
6179 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6180 define dso_local void @st_disjoint_align32_float_uint64_t(i64 %ptr, float %str) {
6181 ; CHECK-P10-LABEL: st_disjoint_align32_float_uint64_t:
6182 ; CHECK-P10: # %bb.0: # %entry
6183 ; CHECK-P10-NEXT: xscvdpuxds v2, f1
6184 ; CHECK-P10-NEXT: lis r4, -15264
6185 ; CHECK-P10-NEXT: and r3, r3, r4
6186 ; CHECK-P10-NEXT: pstxsd v2, 999990000(r3), 0
6187 ; CHECK-P10-NEXT: blr
6189 ; CHECK-P9-LABEL: st_disjoint_align32_float_uint64_t:
6190 ; CHECK-P9: # %bb.0: # %entry
6191 ; CHECK-P9-NEXT: xscvdpuxds f0, f1
6192 ; CHECK-P9-NEXT: lis r4, -15264
6193 ; CHECK-P9-NEXT: and r3, r3, r4
6194 ; CHECK-P9-NEXT: lis r4, 15258
6195 ; CHECK-P9-NEXT: ori r4, r4, 41712
6196 ; CHECK-P9-NEXT: stxsdx f0, r3, r4
6197 ; CHECK-P9-NEXT: blr
6199 ; CHECK-P8-LABEL: st_disjoint_align32_float_uint64_t:
6200 ; CHECK-P8: # %bb.0: # %entry
6201 ; CHECK-P8-NEXT: lis r4, -15264
6202 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6203 ; CHECK-P8-NEXT: and r3, r3, r4
6204 ; CHECK-P8-NEXT: lis r4, 15258
6205 ; CHECK-P8-NEXT: ori r4, r4, 41712
6206 ; CHECK-P8-NEXT: stxsdx f0, r3, r4
6207 ; CHECK-P8-NEXT: blr
6209 %and = and i64 %ptr, -1000341504
6210 %conv = fptoui float %str to i64
6211 %or = or i64 %and, 999990000
6212 %0 = inttoptr i64 %or to ptr
6213 store i64 %conv, ptr %0, align 16
6217 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6218 define dso_local void @st_not_disjoint64_float_uint64_t(i64 %ptr, float %str) {
6219 ; CHECK-P10-LABEL: st_not_disjoint64_float_uint64_t:
6220 ; CHECK-P10: # %bb.0: # %entry
6221 ; CHECK-P10-NEXT: xscvdpuxds v2, f1
6222 ; CHECK-P10-NEXT: pli r4, 232
6223 ; CHECK-P10-NEXT: pli r5, 3567587329
6224 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
6225 ; CHECK-P10-NEXT: or r3, r3, r5
6226 ; CHECK-P10-NEXT: stxsd v2, 0(r3)
6227 ; CHECK-P10-NEXT: blr
6229 ; CHECK-P9-LABEL: st_not_disjoint64_float_uint64_t:
6230 ; CHECK-P9: # %bb.0: # %entry
6231 ; CHECK-P9-NEXT: li r4, 29
6232 ; CHECK-P9-NEXT: xscvdpuxds v2, f1
6233 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
6234 ; CHECK-P9-NEXT: oris r4, r4, 54437
6235 ; CHECK-P9-NEXT: ori r4, r4, 4097
6236 ; CHECK-P9-NEXT: or r3, r3, r4
6237 ; CHECK-P9-NEXT: stxsd v2, 0(r3)
6238 ; CHECK-P9-NEXT: blr
6240 ; CHECK-P8-LABEL: st_not_disjoint64_float_uint64_t:
6241 ; CHECK-P8: # %bb.0: # %entry
6242 ; CHECK-P8-NEXT: li r4, 29
6243 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6244 ; CHECK-P8-NEXT: rldic r4, r4, 35, 24
6245 ; CHECK-P8-NEXT: oris r4, r4, 54437
6246 ; CHECK-P8-NEXT: ori r4, r4, 4097
6247 ; CHECK-P8-NEXT: or r3, r3, r4
6248 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6249 ; CHECK-P8-NEXT: blr
6251 %conv = fptoui float %str to i64
6252 %or = or i64 %ptr, 1000000000001
6253 %0 = inttoptr i64 %or to ptr
6254 store i64 %conv, ptr %0, align 8
6258 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6259 define dso_local void @st_disjoint_align64_float_uint64_t(i64 %ptr, float %str) {
6260 ; CHECK-P10-LABEL: st_disjoint_align64_float_uint64_t:
6261 ; CHECK-P10: # %bb.0: # %entry
6262 ; CHECK-P10-NEXT: xscvdpuxds f0, f1
6263 ; CHECK-P10-NEXT: pli r4, 244140625
6264 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
6265 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
6266 ; CHECK-P10-NEXT: stxsdx f0, r3, r4
6267 ; CHECK-P10-NEXT: blr
6269 ; CHECK-PREP10-LABEL: st_disjoint_align64_float_uint64_t:
6270 ; CHECK-PREP10: # %bb.0: # %entry
6271 ; CHECK-PREP10-NEXT: xscvdpuxds f0, f1
6272 ; CHECK-PREP10-NEXT: lis r4, 3725
6273 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
6274 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
6275 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
6276 ; CHECK-PREP10-NEXT: stxsdx f0, r3, r4
6277 ; CHECK-PREP10-NEXT: blr
6279 %and = and i64 %ptr, -1099511627776
6280 %conv = fptoui float %str to i64
6281 %or = or i64 %and, 1000000000000
6282 %0 = inttoptr i64 %or to ptr
6283 store i64 %conv, ptr %0, align 4096
6287 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6288 define dso_local void @st_cst_align16_float_uint64_t(float %str) {
6289 ; CHECK-POSTP8-LABEL: st_cst_align16_float_uint64_t:
6290 ; CHECK-POSTP8: # %bb.0: # %entry
6291 ; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1
6292 ; CHECK-POSTP8-NEXT: stxsd v2, 4080(0)
6293 ; CHECK-POSTP8-NEXT: blr
6295 ; CHECK-P8-LABEL: st_cst_align16_float_uint64_t:
6296 ; CHECK-P8: # %bb.0: # %entry
6297 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6298 ; CHECK-P8-NEXT: li r3, 4080
6299 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6300 ; CHECK-P8-NEXT: blr
6302 %conv = fptoui float %str to i64
6303 store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 16
6307 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6308 define dso_local void @st_cst_align32_float_uint64_t(float %str) {
6309 ; CHECK-POSTP8-LABEL: st_cst_align32_float_uint64_t:
6310 ; CHECK-POSTP8: # %bb.0: # %entry
6311 ; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1
6312 ; CHECK-POSTP8-NEXT: lis r3, 153
6313 ; CHECK-POSTP8-NEXT: stxsd v2, -27108(r3)
6314 ; CHECK-POSTP8-NEXT: blr
6316 ; CHECK-P8-LABEL: st_cst_align32_float_uint64_t:
6317 ; CHECK-P8: # %bb.0: # %entry
6318 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6319 ; CHECK-P8-NEXT: lis r3, 152
6320 ; CHECK-P8-NEXT: ori r3, r3, 38428
6321 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6322 ; CHECK-P8-NEXT: blr
6324 %conv = fptoui float %str to i64
6325 store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 8
6329 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6330 define dso_local void @st_cst_align64_float_uint64_t(float %str) {
6331 ; CHECK-P10-LABEL: st_cst_align64_float_uint64_t:
6332 ; CHECK-P10: # %bb.0: # %entry
6333 ; CHECK-P10-NEXT: xscvdpuxds v2, f1
6334 ; CHECK-P10-NEXT: pli r3, 244140625
6335 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
6336 ; CHECK-P10-NEXT: stxsd v2, 0(r3)
6337 ; CHECK-P10-NEXT: blr
6339 ; CHECK-P9-LABEL: st_cst_align64_float_uint64_t:
6340 ; CHECK-P9: # %bb.0: # %entry
6341 ; CHECK-P9-NEXT: xscvdpuxds v2, f1
6342 ; CHECK-P9-NEXT: lis r3, 3725
6343 ; CHECK-P9-NEXT: ori r3, r3, 19025
6344 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
6345 ; CHECK-P9-NEXT: stxsd v2, 0(r3)
6346 ; CHECK-P9-NEXT: blr
6348 ; CHECK-P8-LABEL: st_cst_align64_float_uint64_t:
6349 ; CHECK-P8: # %bb.0: # %entry
6350 ; CHECK-P8-NEXT: xscvdpuxds f0, f1
6351 ; CHECK-P8-NEXT: lis r3, 3725
6352 ; CHECK-P8-NEXT: ori r3, r3, 19025
6353 ; CHECK-P8-NEXT: rldic r3, r3, 12, 24
6354 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6355 ; CHECK-P8-NEXT: blr
6357 %conv = fptoui float %str to i64
6358 store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
6362 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6363 define dso_local void @st_0_float_int64_t(i64 %ptr, float %str) {
6364 ; CHECK-POSTP8-LABEL: st_0_float_int64_t:
6365 ; CHECK-POSTP8: # %bb.0: # %entry
6366 ; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1
6367 ; CHECK-POSTP8-NEXT: stxsd v2, 0(r3)
6368 ; CHECK-POSTP8-NEXT: blr
6370 ; CHECK-P8-LABEL: st_0_float_int64_t:
6371 ; CHECK-P8: # %bb.0: # %entry
6372 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6373 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6374 ; CHECK-P8-NEXT: blr
6376 %conv = fptosi float %str to i64
6377 %0 = inttoptr i64 %ptr to ptr
6378 store i64 %conv, ptr %0, align 8
6382 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6383 define dso_local void @st_align16_float_int64_t(ptr nocapture %ptr, float %str) {
6384 ; CHECK-POSTP8-LABEL: st_align16_float_int64_t:
6385 ; CHECK-POSTP8: # %bb.0: # %entry
6386 ; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1
6387 ; CHECK-POSTP8-NEXT: stxsd v2, 8(r3)
6388 ; CHECK-POSTP8-NEXT: blr
6390 ; CHECK-P8-LABEL: st_align16_float_int64_t:
6391 ; CHECK-P8: # %bb.0: # %entry
6392 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6393 ; CHECK-P8-NEXT: li r4, 8
6394 ; CHECK-P8-NEXT: stxsdx f0, r3, r4
6395 ; CHECK-P8-NEXT: blr
6397 %conv = fptosi float %str to i64
6398 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
6399 store i64 %conv, ptr %add.ptr, align 8
6403 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6404 define dso_local void @st_align32_float_int64_t(ptr nocapture %ptr, float %str) {
6405 ; CHECK-P10-LABEL: st_align32_float_int64_t:
6406 ; CHECK-P10: # %bb.0: # %entry
6407 ; CHECK-P10-NEXT: xscvdpsxds v2, f1
6408 ; CHECK-P10-NEXT: pstxsd v2, 99999000(r3), 0
6409 ; CHECK-P10-NEXT: blr
6411 ; CHECK-PREP10-LABEL: st_align32_float_int64_t:
6412 ; CHECK-PREP10: # %bb.0: # %entry
6413 ; CHECK-PREP10-NEXT: xscvdpsxds f0, f1
6414 ; CHECK-PREP10-NEXT: lis r4, 1525
6415 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
6416 ; CHECK-PREP10-NEXT: stxsdx f0, r3, r4
6417 ; CHECK-PREP10-NEXT: blr
6419 %conv = fptosi float %str to i64
6420 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
6421 store i64 %conv, ptr %add.ptr, align 8
6425 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6426 define dso_local void @st_align64_float_int64_t(ptr nocapture %ptr, float %str) {
6427 ; CHECK-P10-LABEL: st_align64_float_int64_t:
6428 ; CHECK-P10: # %bb.0: # %entry
6429 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
6430 ; CHECK-P10-NEXT: pli r4, 244140625
6431 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
6432 ; CHECK-P10-NEXT: stxsdx f0, r3, r4
6433 ; CHECK-P10-NEXT: blr
6435 ; CHECK-PREP10-LABEL: st_align64_float_int64_t:
6436 ; CHECK-PREP10: # %bb.0: # %entry
6437 ; CHECK-PREP10-NEXT: xscvdpsxds f0, f1
6438 ; CHECK-PREP10-NEXT: lis r4, 3725
6439 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
6440 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
6441 ; CHECK-PREP10-NEXT: stxsdx f0, r3, r4
6442 ; CHECK-PREP10-NEXT: blr
6444 %conv = fptosi float %str to i64
6445 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
6446 store i64 %conv, ptr %add.ptr, align 8
6450 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6451 define dso_local void @st_reg_float_int64_t(ptr nocapture %ptr, i64 %off, float %str) {
6452 ; CHECK-LABEL: st_reg_float_int64_t:
6453 ; CHECK: # %bb.0: # %entry
6454 ; CHECK-NEXT: xscvdpsxds f0, f1
6455 ; CHECK-NEXT: stxsdx f0, r3, r4
6458 %conv = fptosi float %str to i64
6459 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
6460 store i64 %conv, ptr %add.ptr, align 8
6464 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6465 define dso_local void @st_or1_float_int64_t(i64 %ptr, i8 zeroext %off, float %str) {
6466 ; CHECK-POSTP8-LABEL: st_or1_float_int64_t:
6467 ; CHECK-POSTP8: # %bb.0: # %entry
6468 ; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1
6469 ; CHECK-POSTP8-NEXT: or r3, r4, r3
6470 ; CHECK-POSTP8-NEXT: stxsd v2, 0(r3)
6471 ; CHECK-POSTP8-NEXT: blr
6473 ; CHECK-P8-LABEL: st_or1_float_int64_t:
6474 ; CHECK-P8: # %bb.0: # %entry
6475 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6476 ; CHECK-P8-NEXT: or r3, r4, r3
6477 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6478 ; CHECK-P8-NEXT: blr
6480 %conv = fptosi float %str to i64
6481 %conv1 = zext i8 %off to i64
6482 %or = or i64 %conv1, %ptr
6483 %0 = inttoptr i64 %or to ptr
6484 store i64 %conv, ptr %0, align 8
6488 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6489 define dso_local void @st_not_disjoint16_float_int64_t(i64 %ptr, float %str) {
6490 ; CHECK-POSTP8-LABEL: st_not_disjoint16_float_int64_t:
6491 ; CHECK-POSTP8: # %bb.0: # %entry
6492 ; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1
6493 ; CHECK-POSTP8-NEXT: ori r3, r3, 6
6494 ; CHECK-POSTP8-NEXT: stxsd v2, 0(r3)
6495 ; CHECK-POSTP8-NEXT: blr
6497 ; CHECK-P8-LABEL: st_not_disjoint16_float_int64_t:
6498 ; CHECK-P8: # %bb.0: # %entry
6499 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6500 ; CHECK-P8-NEXT: ori r3, r3, 6
6501 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6502 ; CHECK-P8-NEXT: blr
6504 %conv = fptosi float %str to i64
6505 %or = or i64 %ptr, 6
6506 %0 = inttoptr i64 %or to ptr
6507 store i64 %conv, ptr %0, align 8
6511 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6512 define dso_local void @st_disjoint_align16_float_int64_t(i64 %ptr, float %str) {
6513 ; CHECK-POSTP8-LABEL: st_disjoint_align16_float_int64_t:
6514 ; CHECK-POSTP8: # %bb.0: # %entry
6515 ; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1
6516 ; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51
6517 ; CHECK-POSTP8-NEXT: stxsd v2, 24(r3)
6518 ; CHECK-POSTP8-NEXT: blr
6520 ; CHECK-P8-LABEL: st_disjoint_align16_float_int64_t:
6521 ; CHECK-P8: # %bb.0: # %entry
6522 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6523 ; CHECK-P8-NEXT: rldicr r3, r3, 0, 51
6524 ; CHECK-P8-NEXT: ori r3, r3, 24
6525 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6526 ; CHECK-P8-NEXT: blr
6528 %and = and i64 %ptr, -4096
6529 %conv = fptosi float %str to i64
6530 %or = or i64 %and, 24
6531 %0 = inttoptr i64 %or to ptr
6532 store i64 %conv, ptr %0, align 8
6536 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6537 define dso_local void @st_not_disjoint32_float_int64_t(i64 %ptr, float %str) {
6538 ; CHECK-POSTP8-LABEL: st_not_disjoint32_float_int64_t:
6539 ; CHECK-POSTP8: # %bb.0: # %entry
6540 ; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1
6541 ; CHECK-POSTP8-NEXT: ori r3, r3, 34463
6542 ; CHECK-POSTP8-NEXT: oris r3, r3, 1
6543 ; CHECK-POSTP8-NEXT: stxsd v2, 0(r3)
6544 ; CHECK-POSTP8-NEXT: blr
6546 ; CHECK-P8-LABEL: st_not_disjoint32_float_int64_t:
6547 ; CHECK-P8: # %bb.0: # %entry
6548 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6549 ; CHECK-P8-NEXT: ori r3, r3, 34463
6550 ; CHECK-P8-NEXT: oris r3, r3, 1
6551 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6552 ; CHECK-P8-NEXT: blr
6554 %conv = fptosi float %str to i64
6555 %or = or i64 %ptr, 99999
6556 %0 = inttoptr i64 %or to ptr
6557 store i64 %conv, ptr %0, align 8
6561 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6562 define dso_local void @st_disjoint_align32_float_int64_t(i64 %ptr, float %str) {
6563 ; CHECK-P10-LABEL: st_disjoint_align32_float_int64_t:
6564 ; CHECK-P10: # %bb.0: # %entry
6565 ; CHECK-P10-NEXT: xscvdpsxds v2, f1
6566 ; CHECK-P10-NEXT: lis r4, -15264
6567 ; CHECK-P10-NEXT: and r3, r3, r4
6568 ; CHECK-P10-NEXT: pstxsd v2, 999990000(r3), 0
6569 ; CHECK-P10-NEXT: blr
6571 ; CHECK-P9-LABEL: st_disjoint_align32_float_int64_t:
6572 ; CHECK-P9: # %bb.0: # %entry
6573 ; CHECK-P9-NEXT: xscvdpsxds f0, f1
6574 ; CHECK-P9-NEXT: lis r4, -15264
6575 ; CHECK-P9-NEXT: and r3, r3, r4
6576 ; CHECK-P9-NEXT: lis r4, 15258
6577 ; CHECK-P9-NEXT: ori r4, r4, 41712
6578 ; CHECK-P9-NEXT: stxsdx f0, r3, r4
6579 ; CHECK-P9-NEXT: blr
6581 ; CHECK-P8-LABEL: st_disjoint_align32_float_int64_t:
6582 ; CHECK-P8: # %bb.0: # %entry
6583 ; CHECK-P8-NEXT: lis r4, -15264
6584 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6585 ; CHECK-P8-NEXT: and r3, r3, r4
6586 ; CHECK-P8-NEXT: lis r4, 15258
6587 ; CHECK-P8-NEXT: ori r4, r4, 41712
6588 ; CHECK-P8-NEXT: stxsdx f0, r3, r4
6589 ; CHECK-P8-NEXT: blr
6591 %and = and i64 %ptr, -1000341504
6592 %conv = fptosi float %str to i64
6593 %or = or i64 %and, 999990000
6594 %0 = inttoptr i64 %or to ptr
6595 store i64 %conv, ptr %0, align 16
6599 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6600 define dso_local void @st_not_disjoint64_float_int64_t(i64 %ptr, float %str) {
6601 ; CHECK-P10-LABEL: st_not_disjoint64_float_int64_t:
6602 ; CHECK-P10: # %bb.0: # %entry
6603 ; CHECK-P10-NEXT: xscvdpsxds v2, f1
6604 ; CHECK-P10-NEXT: pli r4, 232
6605 ; CHECK-P10-NEXT: pli r5, 3567587329
6606 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
6607 ; CHECK-P10-NEXT: or r3, r3, r5
6608 ; CHECK-P10-NEXT: stxsd v2, 0(r3)
6609 ; CHECK-P10-NEXT: blr
6611 ; CHECK-P9-LABEL: st_not_disjoint64_float_int64_t:
6612 ; CHECK-P9: # %bb.0: # %entry
6613 ; CHECK-P9-NEXT: li r4, 29
6614 ; CHECK-P9-NEXT: xscvdpsxds v2, f1
6615 ; CHECK-P9-NEXT: rldic r4, r4, 35, 24
6616 ; CHECK-P9-NEXT: oris r4, r4, 54437
6617 ; CHECK-P9-NEXT: ori r4, r4, 4097
6618 ; CHECK-P9-NEXT: or r3, r3, r4
6619 ; CHECK-P9-NEXT: stxsd v2, 0(r3)
6620 ; CHECK-P9-NEXT: blr
6622 ; CHECK-P8-LABEL: st_not_disjoint64_float_int64_t:
6623 ; CHECK-P8: # %bb.0: # %entry
6624 ; CHECK-P8-NEXT: li r4, 29
6625 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6626 ; CHECK-P8-NEXT: rldic r4, r4, 35, 24
6627 ; CHECK-P8-NEXT: oris r4, r4, 54437
6628 ; CHECK-P8-NEXT: ori r4, r4, 4097
6629 ; CHECK-P8-NEXT: or r3, r3, r4
6630 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6631 ; CHECK-P8-NEXT: blr
6633 %conv = fptosi float %str to i64
6634 %or = or i64 %ptr, 1000000000001
6635 %0 = inttoptr i64 %or to ptr
6636 store i64 %conv, ptr %0, align 8
6640 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6641 define dso_local void @st_disjoint_align64_float_int64_t(i64 %ptr, float %str) {
6642 ; CHECK-P10-LABEL: st_disjoint_align64_float_int64_t:
6643 ; CHECK-P10: # %bb.0: # %entry
6644 ; CHECK-P10-NEXT: xscvdpsxds f0, f1
6645 ; CHECK-P10-NEXT: pli r4, 244140625
6646 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
6647 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
6648 ; CHECK-P10-NEXT: stxsdx f0, r3, r4
6649 ; CHECK-P10-NEXT: blr
6651 ; CHECK-PREP10-LABEL: st_disjoint_align64_float_int64_t:
6652 ; CHECK-PREP10: # %bb.0: # %entry
6653 ; CHECK-PREP10-NEXT: xscvdpsxds f0, f1
6654 ; CHECK-PREP10-NEXT: lis r4, 3725
6655 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
6656 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
6657 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
6658 ; CHECK-PREP10-NEXT: stxsdx f0, r3, r4
6659 ; CHECK-PREP10-NEXT: blr
6661 %and = and i64 %ptr, -1099511627776
6662 %conv = fptosi float %str to i64
6663 %or = or i64 %and, 1000000000000
6664 %0 = inttoptr i64 %or to ptr
6665 store i64 %conv, ptr %0, align 4096
6669 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6670 define dso_local void @st_cst_align16_float_int64_t(float %str) {
6671 ; CHECK-POSTP8-LABEL: st_cst_align16_float_int64_t:
6672 ; CHECK-POSTP8: # %bb.0: # %entry
6673 ; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1
6674 ; CHECK-POSTP8-NEXT: stxsd v2, 4080(0)
6675 ; CHECK-POSTP8-NEXT: blr
6677 ; CHECK-P8-LABEL: st_cst_align16_float_int64_t:
6678 ; CHECK-P8: # %bb.0: # %entry
6679 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6680 ; CHECK-P8-NEXT: li r3, 4080
6681 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6682 ; CHECK-P8-NEXT: blr
6684 %conv = fptosi float %str to i64
6685 store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 16
6689 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6690 define dso_local void @st_cst_align32_float_int64_t(float %str) {
6691 ; CHECK-POSTP8-LABEL: st_cst_align32_float_int64_t:
6692 ; CHECK-POSTP8: # %bb.0: # %entry
6693 ; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1
6694 ; CHECK-POSTP8-NEXT: lis r3, 153
6695 ; CHECK-POSTP8-NEXT: stxsd v2, -27108(r3)
6696 ; CHECK-POSTP8-NEXT: blr
6698 ; CHECK-P8-LABEL: st_cst_align32_float_int64_t:
6699 ; CHECK-P8: # %bb.0: # %entry
6700 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6701 ; CHECK-P8-NEXT: lis r3, 152
6702 ; CHECK-P8-NEXT: ori r3, r3, 38428
6703 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6704 ; CHECK-P8-NEXT: blr
6706 %conv = fptosi float %str to i64
6707 store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 8
6711 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6712 define dso_local void @st_cst_align64_float_int64_t(float %str) {
6713 ; CHECK-P10-LABEL: st_cst_align64_float_int64_t:
6714 ; CHECK-P10: # %bb.0: # %entry
6715 ; CHECK-P10-NEXT: xscvdpsxds v2, f1
6716 ; CHECK-P10-NEXT: pli r3, 244140625
6717 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
6718 ; CHECK-P10-NEXT: stxsd v2, 0(r3)
6719 ; CHECK-P10-NEXT: blr
6721 ; CHECK-P9-LABEL: st_cst_align64_float_int64_t:
6722 ; CHECK-P9: # %bb.0: # %entry
6723 ; CHECK-P9-NEXT: xscvdpsxds v2, f1
6724 ; CHECK-P9-NEXT: lis r3, 3725
6725 ; CHECK-P9-NEXT: ori r3, r3, 19025
6726 ; CHECK-P9-NEXT: rldic r3, r3, 12, 24
6727 ; CHECK-P9-NEXT: stxsd v2, 0(r3)
6728 ; CHECK-P9-NEXT: blr
6730 ; CHECK-P8-LABEL: st_cst_align64_float_int64_t:
6731 ; CHECK-P8: # %bb.0: # %entry
6732 ; CHECK-P8-NEXT: xscvdpsxds f0, f1
6733 ; CHECK-P8-NEXT: lis r3, 3725
6734 ; CHECK-P8-NEXT: ori r3, r3, 19025
6735 ; CHECK-P8-NEXT: rldic r3, r3, 12, 24
6736 ; CHECK-P8-NEXT: stxsdx f0, 0, r3
6737 ; CHECK-P8-NEXT: blr
6739 %conv = fptosi float %str to i64
6740 store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
6744 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6745 define dso_local void @st_0_float_float(i64 %ptr, float %str) {
6746 ; CHECK-LABEL: st_0_float_float:
6747 ; CHECK: # %bb.0: # %entry
6748 ; CHECK-NEXT: stfs f1, 0(r3)
6751 %0 = inttoptr i64 %ptr to ptr
6752 store float %str, ptr %0, align 4
6756 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6757 define dso_local void @st_align16_float_float(ptr nocapture %ptr, float %str) {
6758 ; CHECK-LABEL: st_align16_float_float:
6759 ; CHECK: # %bb.0: # %entry
6760 ; CHECK-NEXT: stfs f1, 8(r3)
6763 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
6764 store float %str, ptr %add.ptr, align 4
6768 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6769 define dso_local void @st_align32_float_float(ptr nocapture %ptr, float %str) {
6770 ; CHECK-P10-LABEL: st_align32_float_float:
6771 ; CHECK-P10: # %bb.0: # %entry
6772 ; CHECK-P10-NEXT: pstfs f1, 99999000(r3), 0
6773 ; CHECK-P10-NEXT: blr
6775 ; CHECK-PREP10-LABEL: st_align32_float_float:
6776 ; CHECK-PREP10: # %bb.0: # %entry
6777 ; CHECK-PREP10-NEXT: lis r4, 1525
6778 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
6779 ; CHECK-PREP10-NEXT: stfsx f1, r3, r4
6780 ; CHECK-PREP10-NEXT: blr
6782 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
6783 store float %str, ptr %add.ptr, align 4
6787 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6788 define dso_local void @st_align64_float_float(ptr nocapture %ptr, float %str) {
6789 ; CHECK-P10-LABEL: st_align64_float_float:
6790 ; CHECK-P10: # %bb.0: # %entry
6791 ; CHECK-P10-NEXT: pli r4, 244140625
6792 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
6793 ; CHECK-P10-NEXT: stfsx f1, r3, r4
6794 ; CHECK-P10-NEXT: blr
6796 ; CHECK-PREP10-LABEL: st_align64_float_float:
6797 ; CHECK-PREP10: # %bb.0: # %entry
6798 ; CHECK-PREP10-NEXT: lis r4, 3725
6799 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
6800 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
6801 ; CHECK-PREP10-NEXT: stfsx f1, r3, r4
6802 ; CHECK-PREP10-NEXT: blr
6804 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
6805 store float %str, ptr %add.ptr, align 4
6809 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6810 define dso_local void @st_reg_float_float(ptr nocapture %ptr, i64 %off, float %str) {
6811 ; CHECK-LABEL: st_reg_float_float:
6812 ; CHECK: # %bb.0: # %entry
6813 ; CHECK-NEXT: stfsx f1, r3, r4
6816 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
6817 store float %str, ptr %add.ptr, align 4
6821 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6822 define dso_local void @st_or1_float_float(i64 %ptr, i8 zeroext %off, float %str) {
6823 ; CHECK-LABEL: st_or1_float_float:
6824 ; CHECK: # %bb.0: # %entry
6825 ; CHECK-NEXT: or r3, r4, r3
6826 ; CHECK-NEXT: stfs f1, 0(r3)
6829 %conv = zext i8 %off to i64
6830 %or = or i64 %conv, %ptr
6831 %0 = inttoptr i64 %or to ptr
6832 store float %str, ptr %0, align 4
6836 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6837 define dso_local void @st_not_disjoint16_float_float(i64 %ptr, float %str) {
6838 ; CHECK-LABEL: st_not_disjoint16_float_float:
6839 ; CHECK: # %bb.0: # %entry
6840 ; CHECK-NEXT: ori r3, r3, 6
6841 ; CHECK-NEXT: stfs f1, 0(r3)
6844 %or = or i64 %ptr, 6
6845 %0 = inttoptr i64 %or to ptr
6846 store float %str, ptr %0, align 4
6850 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6851 define dso_local void @st_disjoint_align16_float_float(i64 %ptr, float %str) {
6852 ; CHECK-LABEL: st_disjoint_align16_float_float:
6853 ; CHECK: # %bb.0: # %entry
6854 ; CHECK-NEXT: rldicr r3, r3, 0, 51
6855 ; CHECK-NEXT: stfs f1, 24(r3)
6858 %and = and i64 %ptr, -4096
6859 %or = or i64 %and, 24
6860 %0 = inttoptr i64 %or to ptr
6861 store float %str, ptr %0, align 8
6865 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6866 define dso_local void @st_not_disjoint32_float_float(i64 %ptr, float %str) {
6867 ; CHECK-LABEL: st_not_disjoint32_float_float:
6868 ; CHECK: # %bb.0: # %entry
6869 ; CHECK-NEXT: ori r3, r3, 34463
6870 ; CHECK-NEXT: oris r3, r3, 1
6871 ; CHECK-NEXT: stfs f1, 0(r3)
6874 %or = or i64 %ptr, 99999
6875 %0 = inttoptr i64 %or to ptr
6876 store float %str, ptr %0, align 4
6880 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6881 define dso_local void @st_disjoint_align32_float_float(i64 %ptr, float %str) {
6882 ; CHECK-P10-LABEL: st_disjoint_align32_float_float:
6883 ; CHECK-P10: # %bb.0: # %entry
6884 ; CHECK-P10-NEXT: lis r4, -15264
6885 ; CHECK-P10-NEXT: and r3, r3, r4
6886 ; CHECK-P10-NEXT: pstfs f1, 999990000(r3), 0
6887 ; CHECK-P10-NEXT: blr
6889 ; CHECK-PREP10-LABEL: st_disjoint_align32_float_float:
6890 ; CHECK-PREP10: # %bb.0: # %entry
6891 ; CHECK-PREP10-NEXT: lis r4, -15264
6892 ; CHECK-PREP10-NEXT: and r3, r3, r4
6893 ; CHECK-PREP10-NEXT: lis r4, 15258
6894 ; CHECK-PREP10-NEXT: ori r4, r4, 41712
6895 ; CHECK-PREP10-NEXT: stfsx f1, r3, r4
6896 ; CHECK-PREP10-NEXT: blr
6898 %and = and i64 %ptr, -1000341504
6899 %or = or i64 %and, 999990000
6900 %0 = inttoptr i64 %or to ptr
6901 store float %str, ptr %0, align 16
6905 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6906 define dso_local void @st_not_disjoint64_float_float(i64 %ptr, float %str) {
6907 ; CHECK-P10-LABEL: st_not_disjoint64_float_float:
6908 ; CHECK-P10: # %bb.0: # %entry
6909 ; CHECK-P10-NEXT: pli r4, 232
6910 ; CHECK-P10-NEXT: pli r5, 3567587329
6911 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
6912 ; CHECK-P10-NEXT: or r3, r3, r5
6913 ; CHECK-P10-NEXT: stfs f1, 0(r3)
6914 ; CHECK-P10-NEXT: blr
6916 ; CHECK-PREP10-LABEL: st_not_disjoint64_float_float:
6917 ; CHECK-PREP10: # %bb.0: # %entry
6918 ; CHECK-PREP10-NEXT: li r4, 29
6919 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
6920 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
6921 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
6922 ; CHECK-PREP10-NEXT: or r3, r3, r4
6923 ; CHECK-PREP10-NEXT: stfs f1, 0(r3)
6924 ; CHECK-PREP10-NEXT: blr
6926 %or = or i64 %ptr, 1000000000001
6927 %0 = inttoptr i64 %or to ptr
6928 store float %str, ptr %0, align 4
6932 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6933 define dso_local void @st_disjoint_align64_float_float(i64 %ptr, float %str) {
6934 ; CHECK-P10-LABEL: st_disjoint_align64_float_float:
6935 ; CHECK-P10: # %bb.0: # %entry
6936 ; CHECK-P10-NEXT: pli r4, 244140625
6937 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
6938 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
6939 ; CHECK-P10-NEXT: stfsx f1, r3, r4
6940 ; CHECK-P10-NEXT: blr
6942 ; CHECK-PREP10-LABEL: st_disjoint_align64_float_float:
6943 ; CHECK-PREP10: # %bb.0: # %entry
6944 ; CHECK-PREP10-NEXT: lis r4, 3725
6945 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
6946 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
6947 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
6948 ; CHECK-PREP10-NEXT: stfsx f1, r3, r4
6949 ; CHECK-PREP10-NEXT: blr
6951 %and = and i64 %ptr, -1099511627776
6952 %or = or i64 %and, 1000000000000
6953 %0 = inttoptr i64 %or to ptr
6954 store float %str, ptr %0, align 4096
6958 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6959 define dso_local void @st_cst_align16_float_float(float %str) {
6960 ; CHECK-LABEL: st_cst_align16_float_float:
6961 ; CHECK: # %bb.0: # %entry
6962 ; CHECK-NEXT: stfs f1, 4080(0)
6965 store float %str, ptr inttoptr (i64 4080 to ptr), align 16
6969 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6970 define dso_local void @st_cst_align32_float_float(float %str) {
6971 ; CHECK-LABEL: st_cst_align32_float_float:
6972 ; CHECK: # %bb.0: # %entry
6973 ; CHECK-NEXT: lis r3, 153
6974 ; CHECK-NEXT: stfs f1, -27108(r3)
6977 store float %str, ptr inttoptr (i64 9999900 to ptr), align 4
6981 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
6982 define dso_local void @st_cst_align64_float_float(float %str) {
6983 ; CHECK-P10-LABEL: st_cst_align64_float_float:
6984 ; CHECK-P10: # %bb.0: # %entry
6985 ; CHECK-P10-NEXT: pli r3, 244140625
6986 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
6987 ; CHECK-P10-NEXT: stfs f1, 0(r3)
6988 ; CHECK-P10-NEXT: blr
6990 ; CHECK-PREP10-LABEL: st_cst_align64_float_float:
6991 ; CHECK-PREP10: # %bb.0: # %entry
6992 ; CHECK-PREP10-NEXT: lis r3, 3725
6993 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
6994 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
6995 ; CHECK-PREP10-NEXT: stfs f1, 0(r3)
6996 ; CHECK-PREP10-NEXT: blr
6998 store float %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096
7002 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7003 define dso_local void @st_0_float_double(i64 %ptr, float %str) {
7004 ; CHECK-LABEL: st_0_float_double:
7005 ; CHECK: # %bb.0: # %entry
7006 ; CHECK-NEXT: stfd f1, 0(r3)
7009 %conv = fpext float %str to double
7010 %0 = inttoptr i64 %ptr to ptr
7011 store double %conv, ptr %0, align 8
7015 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7016 define dso_local void @st_align16_float_double(ptr nocapture %ptr, float %str) {
7017 ; CHECK-LABEL: st_align16_float_double:
7018 ; CHECK: # %bb.0: # %entry
7019 ; CHECK-NEXT: stfd f1, 8(r3)
7022 %conv = fpext float %str to double
7023 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
7024 store double %conv, ptr %add.ptr, align 8
7028 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7029 define dso_local void @st_align32_float_double(ptr nocapture %ptr, float %str) {
7030 ; CHECK-P10-LABEL: st_align32_float_double:
7031 ; CHECK-P10: # %bb.0: # %entry
7032 ; CHECK-P10-NEXT: pstfd f1, 99999000(r3), 0
7033 ; CHECK-P10-NEXT: blr
7035 ; CHECK-PREP10-LABEL: st_align32_float_double:
7036 ; CHECK-PREP10: # %bb.0: # %entry
7037 ; CHECK-PREP10-NEXT: lis r4, 1525
7038 ; CHECK-PREP10-NEXT: ori r4, r4, 56600
7039 ; CHECK-PREP10-NEXT: stfdx f1, r3, r4
7040 ; CHECK-PREP10-NEXT: blr
7042 %conv = fpext float %str to double
7043 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
7044 store double %conv, ptr %add.ptr, align 8
7048 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7049 define dso_local void @st_align64_float_double(ptr nocapture %ptr, float %str) {
7050 ; CHECK-P10-LABEL: st_align64_float_double:
7051 ; CHECK-P10: # %bb.0: # %entry
7052 ; CHECK-P10-NEXT: pli r4, 244140625
7053 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
7054 ; CHECK-P10-NEXT: stfdx f1, r3, r4
7055 ; CHECK-P10-NEXT: blr
7057 ; CHECK-PREP10-LABEL: st_align64_float_double:
7058 ; CHECK-PREP10: # %bb.0: # %entry
7059 ; CHECK-PREP10-NEXT: lis r4, 3725
7060 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
7061 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
7062 ; CHECK-PREP10-NEXT: stfdx f1, r3, r4
7063 ; CHECK-PREP10-NEXT: blr
7065 %conv = fpext float %str to double
7066 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
7067 store double %conv, ptr %add.ptr, align 8
7071 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7072 define dso_local void @st_reg_float_double(ptr nocapture %ptr, i64 %off, float %str) {
7073 ; CHECK-LABEL: st_reg_float_double:
7074 ; CHECK: # %bb.0: # %entry
7075 ; CHECK-NEXT: stfdx f1, r3, r4
7078 %conv = fpext float %str to double
7079 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
7080 store double %conv, ptr %add.ptr, align 8
7084 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7085 define dso_local void @st_or1_float_double(i64 %ptr, i8 zeroext %off, float %str) {
7086 ; CHECK-LABEL: st_or1_float_double:
7087 ; CHECK: # %bb.0: # %entry
7088 ; CHECK-NEXT: or r3, r4, r3
7089 ; CHECK-NEXT: stfd f1, 0(r3)
7092 %conv = fpext float %str to double
7093 %conv1 = zext i8 %off to i64
7094 %or = or i64 %conv1, %ptr
7095 %0 = inttoptr i64 %or to ptr
7096 store double %conv, ptr %0, align 8
7100 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7101 define dso_local void @st_not_disjoint16_float_double(i64 %ptr, float %str) {
7102 ; CHECK-LABEL: st_not_disjoint16_float_double:
7103 ; CHECK: # %bb.0: # %entry
7104 ; CHECK-NEXT: ori r3, r3, 6
7105 ; CHECK-NEXT: stfd f1, 0(r3)
7108 %conv = fpext float %str to double
7109 %or = or i64 %ptr, 6
7110 %0 = inttoptr i64 %or to ptr
7111 store double %conv, ptr %0, align 8
7115 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7116 define dso_local void @st_disjoint_align16_float_double(i64 %ptr, float %str) {
7117 ; CHECK-LABEL: st_disjoint_align16_float_double:
7118 ; CHECK: # %bb.0: # %entry
7119 ; CHECK-NEXT: rldicr r3, r3, 0, 51
7120 ; CHECK-NEXT: stfd f1, 24(r3)
7123 %and = and i64 %ptr, -4096
7124 %conv = fpext float %str to double
7125 %or = or i64 %and, 24
7126 %0 = inttoptr i64 %or to ptr
7127 store double %conv, ptr %0, align 8
7131 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7132 define dso_local void @st_not_disjoint32_float_double(i64 %ptr, float %str) {
7133 ; CHECK-LABEL: st_not_disjoint32_float_double:
7134 ; CHECK: # %bb.0: # %entry
7135 ; CHECK-NEXT: ori r3, r3, 34463
7136 ; CHECK-NEXT: oris r3, r3, 1
7137 ; CHECK-NEXT: stfd f1, 0(r3)
7140 %conv = fpext float %str to double
7141 %or = or i64 %ptr, 99999
7142 %0 = inttoptr i64 %or to ptr
7143 store double %conv, ptr %0, align 8
7147 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7148 define dso_local void @st_disjoint_align32_float_double(i64 %ptr, float %str) {
7149 ; CHECK-P10-LABEL: st_disjoint_align32_float_double:
7150 ; CHECK-P10: # %bb.0: # %entry
7151 ; CHECK-P10-NEXT: lis r4, -15264
7152 ; CHECK-P10-NEXT: and r3, r3, r4
7153 ; CHECK-P10-NEXT: pstfd f1, 999990000(r3), 0
7154 ; CHECK-P10-NEXT: blr
7156 ; CHECK-PREP10-LABEL: st_disjoint_align32_float_double:
7157 ; CHECK-PREP10: # %bb.0: # %entry
7158 ; CHECK-PREP10-NEXT: lis r4, -15264
7159 ; CHECK-PREP10-NEXT: and r3, r3, r4
7160 ; CHECK-PREP10-NEXT: lis r4, 15258
7161 ; CHECK-PREP10-NEXT: ori r4, r4, 41712
7162 ; CHECK-PREP10-NEXT: stfdx f1, r3, r4
7163 ; CHECK-PREP10-NEXT: blr
7165 %and = and i64 %ptr, -1000341504
7166 %conv = fpext float %str to double
7167 %or = or i64 %and, 999990000
7168 %0 = inttoptr i64 %or to ptr
7169 store double %conv, ptr %0, align 16
7173 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7174 define dso_local void @st_not_disjoint64_float_double(i64 %ptr, float %str) {
7175 ; CHECK-P10-LABEL: st_not_disjoint64_float_double:
7176 ; CHECK-P10: # %bb.0: # %entry
7177 ; CHECK-P10-NEXT: pli r4, 232
7178 ; CHECK-P10-NEXT: pli r5, 3567587329
7179 ; CHECK-P10-NEXT: rldimi r5, r4, 32, 0
7180 ; CHECK-P10-NEXT: or r3, r3, r5
7181 ; CHECK-P10-NEXT: stfd f1, 0(r3)
7182 ; CHECK-P10-NEXT: blr
7184 ; CHECK-PREP10-LABEL: st_not_disjoint64_float_double:
7185 ; CHECK-PREP10: # %bb.0: # %entry
7186 ; CHECK-PREP10-NEXT: li r4, 29
7187 ; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24
7188 ; CHECK-PREP10-NEXT: oris r4, r4, 54437
7189 ; CHECK-PREP10-NEXT: ori r4, r4, 4097
7190 ; CHECK-PREP10-NEXT: or r3, r3, r4
7191 ; CHECK-PREP10-NEXT: stfd f1, 0(r3)
7192 ; CHECK-PREP10-NEXT: blr
7194 %conv = fpext float %str to double
7195 %or = or i64 %ptr, 1000000000001
7196 %0 = inttoptr i64 %or to ptr
7197 store double %conv, ptr %0, align 8
7201 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7202 define dso_local void @st_disjoint_align64_float_double(i64 %ptr, float %str) {
7203 ; CHECK-P10-LABEL: st_disjoint_align64_float_double:
7204 ; CHECK-P10: # %bb.0: # %entry
7205 ; CHECK-P10-NEXT: pli r4, 244140625
7206 ; CHECK-P10-NEXT: rldicr r3, r3, 0, 23
7207 ; CHECK-P10-NEXT: rldic r4, r4, 12, 24
7208 ; CHECK-P10-NEXT: stfdx f1, r3, r4
7209 ; CHECK-P10-NEXT: blr
7211 ; CHECK-PREP10-LABEL: st_disjoint_align64_float_double:
7212 ; CHECK-PREP10: # %bb.0: # %entry
7213 ; CHECK-PREP10-NEXT: lis r4, 3725
7214 ; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23
7215 ; CHECK-PREP10-NEXT: ori r4, r4, 19025
7216 ; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24
7217 ; CHECK-PREP10-NEXT: stfdx f1, r3, r4
7218 ; CHECK-PREP10-NEXT: blr
7220 %and = and i64 %ptr, -1099511627776
7221 %conv = fpext float %str to double
7222 %or = or i64 %and, 1000000000000
7223 %0 = inttoptr i64 %or to ptr
7224 store double %conv, ptr %0, align 4096
7228 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7229 define dso_local void @st_cst_align16_float_double(float %str) {
7230 ; CHECK-LABEL: st_cst_align16_float_double:
7231 ; CHECK: # %bb.0: # %entry
7232 ; CHECK-NEXT: stfd f1, 4080(0)
7235 %conv = fpext float %str to double
7236 store double %conv, ptr inttoptr (i64 4080 to ptr), align 16
7240 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7241 define dso_local void @st_cst_align32_float_double(float %str) {
7242 ; CHECK-LABEL: st_cst_align32_float_double:
7243 ; CHECK: # %bb.0: # %entry
7244 ; CHECK-NEXT: lis r3, 153
7245 ; CHECK-NEXT: stfd f1, -27108(r3)
7248 %conv = fpext float %str to double
7249 store double %conv, ptr inttoptr (i64 9999900 to ptr), align 8
7253 ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly
7254 define dso_local void @st_cst_align64_float_double(float %str) {
7255 ; CHECK-P10-LABEL: st_cst_align64_float_double:
7256 ; CHECK-P10: # %bb.0: # %entry
7257 ; CHECK-P10-NEXT: pli r3, 244140625
7258 ; CHECK-P10-NEXT: rldic r3, r3, 12, 24
7259 ; CHECK-P10-NEXT: stfd f1, 0(r3)
7260 ; CHECK-P10-NEXT: blr
7262 ; CHECK-PREP10-LABEL: st_cst_align64_float_double:
7263 ; CHECK-PREP10: # %bb.0: # %entry
7264 ; CHECK-PREP10-NEXT: lis r3, 3725
7265 ; CHECK-PREP10-NEXT: ori r3, r3, 19025
7266 ; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24
7267 ; CHECK-PREP10-NEXT: stfd f1, 0(r3)
7268 ; CHECK-PREP10-NEXT: blr
7270 %conv = fpext float %str to double
7271 store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096