[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / scalar-float-ldst.ll
blob824dd4c4db6cb70d2e52175d6cc3f92c143e66fc
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
34 ; CHECK-P8-NEXT:    blr
35 entry:
36   %0 = inttoptr i64 %ptr to ptr
37   %1 = load i8, ptr %0, align 1
38   %conv = uitofp i8 %1 to float
39   ret float %conv
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
56 ; CHECK-P8-NEXT:    blr
57 entry:
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
61   ret float %conv
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
71 ; CHECK-P10-NEXT:    blr
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
79 ; CHECK-P9-NEXT:    blr
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
88 ; CHECK-P8-NEXT:    blr
89 entry:
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
93   ret float %conv
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
113 ; CHECK-P9-NEXT:    blr
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
123 ; CHECK-P8-NEXT:    blr
124 entry:
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
128   ret float %conv
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
144 ; CHECK-P8-NEXT:    blr
145 entry:
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
149   ret float %conv
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
167 ; CHECK-P8-NEXT:    blr
168 entry:
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
174   ret float %conv1
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
192 ; CHECK-P8-NEXT:    blr
193 entry:
194   %or = or i64 %ptr, 6
195   %0 = inttoptr i64 %or to ptr
196   %1 = load i8, ptr %0, align 1
197   %conv = uitofp i8 %1 to float
198   ret float %conv
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
217 ; CHECK-P8-NEXT:    blr
218 entry:
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
224   ret float %conv
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
244 ; CHECK-P8-NEXT:    blr
245 entry:
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
250   ret float %conv
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
272 ; CHECK-P9-NEXT:    blr
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
283 ; CHECK-P8-NEXT:    blr
284 entry:
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
290   ret float %conv
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
314 ; CHECK-P9-NEXT:    blr
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
326 ; CHECK-P8-NEXT:    blr
327 entry:
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
332   ret float %conv
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
354 ; CHECK-P9-NEXT:    blr
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
365 ; CHECK-P8-NEXT:    blr
366 entry:
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
372   ret float %conv
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
389 ; CHECK-P8-NEXT:    blr
390 entry:
391   %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16
392   %conv = uitofp i8 %0 to float
393   ret float %conv
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
411 ; CHECK-P9-NEXT:    blr
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
419 ; CHECK-P8-NEXT:    blr
420 entry:
421   %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4
422   %conv = uitofp i8 %0 to float
423   ret float %conv
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
443 ; CHECK-P9-NEXT:    blr
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
453 ; CHECK-P8-NEXT:    blr
454 entry:
455   %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096
456   %conv = uitofp i8 %0 to float
457   ret float %conv
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
475 ; CHECK-P8-NEXT:    blr
476 entry:
477   %0 = inttoptr i64 %ptr to ptr
478   %1 = load i8, ptr %0, align 1
479   %conv = sitofp i8 %1 to float
480   ret float %conv
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
499 ; CHECK-P8-NEXT:    blr
500 entry:
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
504   ret float %conv
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
524 ; CHECK-P9-NEXT:    blr
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
534 ; CHECK-P8-NEXT:    blr
535 entry:
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
539   ret float %conv
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
561 ; CHECK-P9-NEXT:    blr
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
572 ; CHECK-P8-NEXT:    blr
573 entry:
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
577   ret float %conv
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
595 ; CHECK-P8-NEXT:    blr
596 entry:
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
600   ret float %conv
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
620 ; CHECK-P8-NEXT:    blr
621 entry:
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
627   ret float %conv1
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
647 ; CHECK-P8-NEXT:    blr
648 entry:
649   %or = or i64 %ptr, 6
650   %0 = inttoptr i64 %or to ptr
651   %1 = load i8, ptr %0, align 1
652   %conv = sitofp i8 %1 to float
653   ret float %conv
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
674 ; CHECK-P8-NEXT:    blr
675 entry:
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
681   ret float %conv
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
703 ; CHECK-P8-NEXT:    blr
704 entry:
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
709   ret float %conv
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
733 ; CHECK-P9-NEXT:    blr
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
745 ; CHECK-P8-NEXT:    blr
746 entry:
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
752   ret float %conv
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
778 ; CHECK-P9-NEXT:    blr
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
791 ; CHECK-P8-NEXT:    blr
792 entry:
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
797   ret float %conv
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
821 ; CHECK-P9-NEXT:    blr
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
833 ; CHECK-P8-NEXT:    blr
834 entry:
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
840   ret float %conv
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
859 ; CHECK-P8-NEXT:    blr
860 entry:
861   %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16
862   %conv = sitofp i8 %0 to float
863   ret float %conv
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
883 ; CHECK-P9-NEXT:    blr
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
892 ; CHECK-P8-NEXT:    blr
893 entry:
894   %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4
895   %conv = sitofp i8 %0 to float
896   ret float %conv
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
918 ; CHECK-P9-NEXT:    blr
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
929 ; CHECK-P8-NEXT:    blr
930 entry:
931   %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096
932   %conv = sitofp i8 %0 to float
933   ret float %conv
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
949 ; CHECK-P8-NEXT:    blr
950 entry:
951   %0 = inttoptr i64 %ptr to ptr
952   %1 = load i16, ptr %0, align 2
953   %conv = uitofp i16 %1 to float
954   ret float %conv
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
971 ; CHECK-P8-NEXT:    blr
972 entry:
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
976   ret float %conv
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
994 ; CHECK-P9-NEXT:    blr
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
1004 entry:
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
1008   ret float %conv
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
1039 entry:
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
1043   ret float %conv
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
1060 entry:
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
1064   ret float %conv
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
1083 entry:
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
1089   ret float %conv1
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
1108 entry:
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
1113   ret float %conv
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
1133 entry:
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
1139   ret float %conv
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
1160 entry:
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
1165   ret float %conv
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
1199 entry:
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
1205   ret float %conv
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
1242 entry:
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
1247   ret float %conv
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
1281 entry:
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
1287   ret float %conv
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
1305 entry:
1306   %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 16
1307   %conv = uitofp i16 %0 to float
1308   ret float %conv
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
1335 entry:
1336   %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 4
1337   %conv = uitofp i16 %0 to float
1338   ret float %conv
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
1369 entry:
1370   %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 4096
1371   %conv = uitofp i16 %0 to float
1372   ret float %conv
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
1390 entry:
1391   %0 = inttoptr i64 %ptr to ptr
1392   %1 = load i16, ptr %0, align 2
1393   %conv = sitofp i16 %1 to float
1394   ret float %conv
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
1413 entry:
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
1417   ret float %conv
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
1447 entry:
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
1451   ret float %conv
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
1484 entry:
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
1488   ret float %conv
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
1506 entry:
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
1510   ret float %conv
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
1530 entry:
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
1536   ret float %conv1
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
1556 entry:
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
1561   ret float %conv
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
1582 entry:
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
1588   ret float %conv
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
1610 entry:
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
1615   ret float %conv
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
1651 entry:
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
1657   ret float %conv
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
1696 entry:
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
1701   ret float %conv
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
1737 entry:
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
1743   ret float %conv
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
1762 entry:
1763   %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 16
1764   %conv = sitofp i16 %0 to float
1765   ret float %conv
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
1794 entry:
1795   %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 4
1796   %conv = sitofp i16 %0 to float
1797   ret float %conv
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
1830 entry:
1831   %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 4096
1832   %conv = sitofp i16 %0 to float
1833   ret float %conv
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
1842 ; CHECK-NEXT:    blr
1843 entry:
1844   %0 = inttoptr i64 %ptr to ptr
1845   %1 = load i32, ptr %0, align 4
1846   %conv = uitofp i32 %1 to float
1847   ret float %conv
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
1857 ; CHECK-NEXT:    blr
1858 entry:
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
1862   ret float %conv
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
1881 entry:
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
1885   ret float %conv
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
1906 entry:
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
1910   ret float %conv
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
1919 ; CHECK-NEXT:    blr
1920 entry:
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
1924   ret float %conv
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
1934 ; CHECK-NEXT:    blr
1935 entry:
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
1941   ret float %conv1
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
1951 ; CHECK-NEXT:    blr
1952 entry:
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
1957   ret float %conv
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
1968 ; CHECK-NEXT:    blr
1969 entry:
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
1975   ret float %conv
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
1986 ; CHECK-NEXT:    blr
1987 entry:
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
1992   ret float %conv
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
2015 entry:
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
2021   ret float %conv
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
2046 entry:
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
2051   ret float %conv
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
2074 entry:
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
2080   ret float %conv
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
2090 ; CHECK-NEXT:    blr
2091 entry:
2092   %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 16
2093   %conv = uitofp i32 %0 to float
2094   ret float %conv
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
2113 entry:
2114   %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 4
2115   %conv = uitofp i32 %0 to float
2116   ret float %conv
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
2137 entry:
2138   %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 4096
2139   %conv = uitofp i32 %0 to float
2140   ret float %conv
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
2149 ; CHECK-NEXT:    blr
2150 entry:
2151   %0 = inttoptr i64 %ptr to ptr
2152   %1 = load i32, ptr %0, align 4
2153   %conv = sitofp i32 %1 to float
2154   ret float %conv
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
2164 ; CHECK-NEXT:    blr
2165 entry:
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
2169   ret float %conv
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
2188 entry:
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
2192   ret float %conv
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
2213 entry:
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
2217   ret float %conv
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
2226 ; CHECK-NEXT:    blr
2227 entry:
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
2231   ret float %conv
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
2241 ; CHECK-NEXT:    blr
2242 entry:
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
2248   ret float %conv1
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
2258 ; CHECK-NEXT:    blr
2259 entry:
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
2264   ret float %conv
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
2275 ; CHECK-NEXT:    blr
2276 entry:
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
2282   ret float %conv
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
2293 ; CHECK-NEXT:    blr
2294 entry:
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
2299   ret float %conv
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
2322 entry:
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
2328   ret float %conv
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
2353 entry:
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
2358   ret float %conv
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
2381 entry:
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
2387   ret float %conv
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
2397 ; CHECK-NEXT:    blr
2398 entry:
2399   %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 16
2400   %conv = sitofp i32 %0 to float
2401   ret float %conv
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
2420 entry:
2421   %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 4
2422   %conv = sitofp i32 %0 to float
2423   ret float %conv
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
2444 entry:
2445   %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 4096
2446   %conv = sitofp i32 %0 to float
2447   ret float %conv
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
2456 ; CHECK-NEXT:    blr
2457 entry:
2458   %0 = inttoptr i64 %ptr to ptr
2459   %1 = load i64, ptr %0, align 8
2460   %conv = uitofp i64 %1 to float
2461   ret float %conv
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
2470 ; CHECK-NEXT:    blr
2471 entry:
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
2475   ret float %conv
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
2493 entry:
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
2497   ret float %conv
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
2518 entry:
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
2522   ret float %conv
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
2531 ; CHECK-NEXT:    blr
2532 entry:
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
2536   ret float %conv
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
2546 ; CHECK-NEXT:    blr
2547 entry:
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
2553   ret float %conv1
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
2563 ; CHECK-NEXT:    blr
2564 entry:
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
2569   ret float %conv
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
2579 ; CHECK-NEXT:    blr
2580 entry:
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
2586   ret float %conv
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
2597 ; CHECK-NEXT:    blr
2598 entry:
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
2603   ret float %conv
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
2625 entry:
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
2631   ret float %conv
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
2656 entry:
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
2661   ret float %conv
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
2684 entry:
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
2690   ret float %conv
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
2699 ; CHECK-NEXT:    blr
2700 entry:
2701   %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 16
2702   %conv = uitofp i64 %0 to float
2703   ret float %conv
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
2713 ; CHECK-NEXT:    blr
2714 entry:
2715   %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 8
2716   %conv = uitofp i64 %0 to float
2717   ret float %conv
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
2738 entry:
2739   %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 4096
2740   %conv = uitofp i64 %0 to float
2741   ret float %conv
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
2750 ; CHECK-NEXT:    blr
2751 entry:
2752   %0 = inttoptr i64 %ptr to ptr
2753   %1 = load i64, ptr %0, align 8
2754   %conv = sitofp i64 %1 to float
2755   ret float %conv
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
2764 ; CHECK-NEXT:    blr
2765 entry:
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
2769   ret float %conv
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
2787 entry:
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
2791   ret float %conv
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
2812 entry:
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
2816   ret float %conv
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
2825 ; CHECK-NEXT:    blr
2826 entry:
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
2830   ret float %conv
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
2840 ; CHECK-NEXT:    blr
2841 entry:
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
2847   ret float %conv1
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
2857 ; CHECK-NEXT:    blr
2858 entry:
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
2863   ret float %conv
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
2873 ; CHECK-NEXT:    blr
2874 entry:
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
2880   ret float %conv
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
2891 ; CHECK-NEXT:    blr
2892 entry:
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
2897   ret float %conv
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
2919 entry:
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
2925   ret float %conv
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
2950 entry:
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
2955   ret float %conv
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
2978 entry:
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
2984   ret float %conv
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
2993 ; CHECK-NEXT:    blr
2994 entry:
2995   %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 16
2996   %conv = sitofp i64 %0 to float
2997   ret float %conv
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
3007 ; CHECK-NEXT:    blr
3008 entry:
3009   %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 8
3010   %conv = sitofp i64 %0 to float
3011   ret float %conv
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
3032 entry:
3033   %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 4096
3034   %conv = sitofp i64 %0 to float
3035   ret float %conv
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)
3043 ; CHECK-NEXT:    blr
3044 entry:
3045   %0 = inttoptr i64 %ptr to ptr
3046   %1 = load float, ptr %0, align 4
3047   ret float %1
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)
3055 ; CHECK-NEXT:    blr
3056 entry:
3057   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
3058   %0 = load float, ptr %add.ptr, align 4
3059   ret float %0
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
3075 entry:
3076   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
3077   %0 = load float, ptr %add.ptr, align 4
3078   ret float %0
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
3097 entry:
3098   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
3099   %0 = load float, ptr %add.ptr, align 4
3100   ret float %0
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
3108 ; CHECK-NEXT:    blr
3109 entry:
3110   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
3111   %0 = load float, ptr %add.ptr, align 4
3112   ret float %0
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)
3121 ; CHECK-NEXT:    blr
3122 entry:
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
3127   ret float %1
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)
3136 ; CHECK-NEXT:    blr
3137 entry:
3138   %or = or i64 %ptr, 6
3139   %0 = inttoptr i64 %or to ptr
3140   %1 = load float, ptr %0, align 4
3141   ret float %1
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)
3150 ; CHECK-NEXT:    blr
3151 entry:
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
3156   ret float %1
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)
3166 ; CHECK-NEXT:    blr
3167 entry:
3168   %or = or i64 %ptr, 99999
3169   %0 = inttoptr i64 %or to ptr
3170   %1 = load float, ptr %0, align 4
3171   ret float %1
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
3191 entry:
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
3196   ret float %1
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
3219 entry:
3220   %or = or i64 %ptr, 1000000000001
3221   %0 = inttoptr i64 %or to ptr
3222   %1 = load float, ptr %0, align 4
3223   ret float %1
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
3244 entry:
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
3249   ret float %1
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)
3257 ; CHECK-NEXT:    blr
3258 entry:
3259   %0 = load float, ptr inttoptr (i64 4080 to ptr), align 16
3260   ret float %0
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)
3269 ; CHECK-NEXT:    blr
3270 entry:
3271   %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 4
3272   ret float %0
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
3291 entry:
3292   %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 4096
3293   ret float %0
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
3302 ; CHECK-NEXT:    blr
3303 entry:
3304   %0 = inttoptr i64 %ptr to ptr
3305   %1 = load double, ptr %0, align 8
3306   %conv = fptrunc double %1 to float
3307   ret float %conv
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
3316 ; CHECK-NEXT:    blr
3317 entry:
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
3321   ret float %conv
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
3339 entry:
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
3343   ret float %conv
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
3364 entry:
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
3368   ret float %conv
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
3377 ; CHECK-NEXT:    blr
3378 entry:
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
3382   ret float %conv
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
3392 ; CHECK-NEXT:    blr
3393 entry:
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
3399   ret float %conv1
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
3409 ; CHECK-NEXT:    blr
3410 entry:
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
3415   ret float %conv
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
3425 ; CHECK-NEXT:    blr
3426 entry:
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
3432   ret float %conv
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
3443 ; CHECK-NEXT:    blr
3444 entry:
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
3449   ret float %conv
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
3471 entry:
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
3477   ret float %conv
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
3502 entry:
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
3507   ret float %conv
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
3530 entry:
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
3536   ret float %conv
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
3545 ; CHECK-NEXT:    blr
3546 entry:
3547   %0 = load double, ptr inttoptr (i64 4080 to ptr), align 16
3548   %conv = fptrunc double %0 to float
3549   ret float %conv
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
3559 ; CHECK-NEXT:    blr
3560 entry:
3561   %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 8
3562   %conv = fptrunc double %0 to float
3563   ret float %conv
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
3584 entry:
3585   %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 4096
3586   %conv = fptrunc double %0 to float
3587   ret float %conv
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
3604 entry:
3605   %conv = fptoui float %str to i8
3606   %0 = inttoptr i64 %ptr to ptr
3607   store i8 %conv, ptr %0, align 1
3608   ret void
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
3626 entry:
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
3630   ret void
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
3658 entry:
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
3662   ret void
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
3693 entry:
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
3697   ret void
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
3714 entry:
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
3718   ret void
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
3737 entry:
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
3743   ret void
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
3762 entry:
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
3767   ret void
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
3787 entry:
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
3793   ret void
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
3814 entry:
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
3819   ret void
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
3853 entry:
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
3859   ret void
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
3896 entry:
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
3901   ret void
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
3935 entry:
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
3941   ret void
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
3959 entry:
3960   %conv = fptoui float %str to i8
3961   store i8 %conv, ptr inttoptr (i64 4080 to ptr), align 16
3962   ret void
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
3989 entry:
3990   %conv = fptoui float %str to i8
3991   store i8 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
3992   ret void
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
4023 entry:
4024   %conv = fptoui float %str to i8
4025   store i8 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
4026   ret void
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
4043 entry:
4044   %conv = fptosi float %str to i8
4045   %0 = inttoptr i64 %ptr to ptr
4046   store i8 %conv, ptr %0, align 1
4047   ret void
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
4065 entry:
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
4069   ret void
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
4097 entry:
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
4101   ret void
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
4132 entry:
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
4136   ret void
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
4153 entry:
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
4157   ret void
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
4176 entry:
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
4182   ret void
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
4201 entry:
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
4206   ret void
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
4226 entry:
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
4232   ret void
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
4253 entry:
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
4258   ret void
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
4292 entry:
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
4298   ret void
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
4335 entry:
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
4340   ret void
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
4374 entry:
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
4380   ret void
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
4398 entry:
4399   %conv = fptosi float %str to i8
4400   store i8 %conv, ptr inttoptr (i64 4080 to ptr), align 16
4401   ret void
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
4428 entry:
4429   %conv = fptosi float %str to i8
4430   store i8 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
4431   ret void
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
4462 entry:
4463   %conv = fptosi float %str to i8
4464   store i8 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
4465   ret void
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
4482 entry:
4483   %conv = fptoui float %str to i16
4484   %0 = inttoptr i64 %ptr to ptr
4485   store i16 %conv, ptr %0, align 2
4486   ret void
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
4504 entry:
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
4508   ret void
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
4536 entry:
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
4540   ret void
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
4571 entry:
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
4575   ret void
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
4592 entry:
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
4596   ret void
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
4615 entry:
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
4621   ret void
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
4640 entry:
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
4645   ret void
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
4665 entry:
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
4671   ret void
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
4692 entry:
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
4697   ret void
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
4731 entry:
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
4737   ret void
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
4774 entry:
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
4779   ret void
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
4813 entry:
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
4819   ret void
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
4837 entry:
4838   %conv = fptoui float %str to i16
4839   store i16 %conv, ptr inttoptr (i64 4080 to ptr), align 16
4840   ret void
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
4867 entry:
4868   %conv = fptoui float %str to i16
4869   store i16 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
4870   ret void
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
4901 entry:
4902   %conv = fptoui float %str to i16
4903   store i16 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
4904   ret void
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
4921 entry:
4922   %conv = fptosi float %str to i16
4923   %0 = inttoptr i64 %ptr to ptr
4924   store i16 %conv, ptr %0, align 2
4925   ret void
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
4943 entry:
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
4947   ret void
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
4975 entry:
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
4979   ret void
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
5010 entry:
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
5014   ret void
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
5031 entry:
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
5035   ret void
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
5054 entry:
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
5060   ret void
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
5079 entry:
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
5084   ret void
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
5104 entry:
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
5110   ret void
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
5131 entry:
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
5136   ret void
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
5170 entry:
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
5176   ret void
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
5213 entry:
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
5218   ret void
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
5252 entry:
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
5258   ret void
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
5276 entry:
5277   %conv = fptosi float %str to i16
5278   store i16 %conv, ptr inttoptr (i64 4080 to ptr), align 16
5279   ret void
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
5306 entry:
5307   %conv = fptosi float %str to i16
5308   store i16 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
5309   ret void
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
5340 entry:
5341   %conv = fptosi float %str to i16
5342   store i16 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
5343   ret void
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
5352 ; CHECK-NEXT:    blr
5353 entry:
5354   %conv = fptoui float %str to i32
5355   %0 = inttoptr i64 %ptr to ptr
5356   store i32 %conv, ptr %0, align 4
5357   ret void
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
5367 ; CHECK-NEXT:    blr
5368 entry:
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
5372   ret void
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
5391 entry:
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
5395   ret void
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
5416 entry:
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
5420   ret void
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
5429 ; CHECK-NEXT:    blr
5430 entry:
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
5434   ret void
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
5444 ; CHECK-NEXT:    blr
5445 entry:
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
5451   ret void
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
5461 ; CHECK-NEXT:    blr
5462 entry:
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
5467   ret void
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
5478 ; CHECK-NEXT:    blr
5479 entry:
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
5485   ret void
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
5496 ; CHECK-NEXT:    blr
5497 entry:
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
5502   ret void
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
5535 entry:
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
5541   ret void
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
5566 entry:
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
5571   ret void
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
5594 entry:
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
5600   ret void
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
5610 ; CHECK-NEXT:    blr
5611 entry:
5612   %conv = fptoui float %str to i32
5613   store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 16
5614   ret void
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
5633 entry:
5634   %conv = fptoui float %str to i32
5635   store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
5636   ret void
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
5657 entry:
5658   %conv = fptoui float %str to i32
5659   store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
5660   ret void
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
5669 ; CHECK-NEXT:    blr
5670 entry:
5671   %conv = fptosi float %str to i32
5672   %0 = inttoptr i64 %ptr to ptr
5673   store i32 %conv, ptr %0, align 4
5674   ret void
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
5684 ; CHECK-NEXT:    blr
5685 entry:
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
5689   ret void
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
5708 entry:
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
5712   ret void
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
5733 entry:
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
5737   ret void
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
5746 ; CHECK-NEXT:    blr
5747 entry:
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
5751   ret void
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
5761 ; CHECK-NEXT:    blr
5762 entry:
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
5768   ret void
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
5778 ; CHECK-NEXT:    blr
5779 entry:
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
5784   ret void
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
5795 ; CHECK-NEXT:    blr
5796 entry:
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
5802   ret void
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
5813 ; CHECK-NEXT:    blr
5814 entry:
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
5819   ret void
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
5852 entry:
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
5858   ret void
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
5883 entry:
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
5888   ret void
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
5911 entry:
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
5917   ret void
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
5927 ; CHECK-NEXT:    blr
5928 entry:
5929   %conv = fptosi float %str to i32
5930   store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 16
5931   ret void
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
5950 entry:
5951   %conv = fptosi float %str to i32
5952   store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 4
5953   ret void
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
5974 entry:
5975   %conv = fptosi float %str to i32
5976   store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
5977   ret void
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
5993 entry:
5994   %conv = fptoui float %str to i64
5995   %0 = inttoptr i64 %ptr to ptr
5996   store i64 %conv, ptr %0, align 8
5997   ret void
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
6014 entry:
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
6018   ret void
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
6036 entry:
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
6040   ret void
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
6061 entry:
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
6065   ret void
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
6074 ; CHECK-NEXT:    blr
6075 entry:
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
6079   ret void
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
6097 entry:
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
6103   ret void
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
6121 entry:
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
6126   ret void
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
6145 entry:
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
6151   ret void
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
6171 entry:
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
6176   ret void
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
6208 entry:
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
6214   ret void
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
6250 entry:
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
6255   ret void
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
6278 entry:
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
6284   ret void
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
6301 entry:
6302   %conv = fptoui float %str to i64
6303   store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 16
6304   ret void
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
6323 entry:
6324   %conv = fptoui float %str to i64
6325   store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 8
6326   ret void
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
6356 entry:
6357   %conv = fptoui float %str to i64
6358   store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
6359   ret void
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
6375 entry:
6376   %conv = fptosi float %str to i64
6377   %0 = inttoptr i64 %ptr to ptr
6378   store i64 %conv, ptr %0, align 8
6379   ret void
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
6396 entry:
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
6400   ret void
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
6418 entry:
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
6422   ret void
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
6443 entry:
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
6447   ret void
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
6456 ; CHECK-NEXT:    blr
6457 entry:
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
6461   ret void
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
6479 entry:
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
6485   ret void
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
6503 entry:
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
6508   ret void
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
6527 entry:
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
6533   ret void
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
6553 entry:
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
6558   ret void
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
6590 entry:
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
6596   ret void
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
6632 entry:
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
6637   ret void
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
6660 entry:
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
6666   ret void
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
6683 entry:
6684   %conv = fptosi float %str to i64
6685   store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 16
6686   ret void
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
6705 entry:
6706   %conv = fptosi float %str to i64
6707   store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 8
6708   ret void
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
6738 entry:
6739   %conv = fptosi float %str to i64
6740   store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
6741   ret void
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)
6749 ; CHECK-NEXT:    blr
6750 entry:
6751   %0 = inttoptr i64 %ptr to ptr
6752   store float %str, ptr %0, align 4
6753   ret void
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)
6761 ; CHECK-NEXT:    blr
6762 entry:
6763   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8
6764   store float %str, ptr %add.ptr, align 4
6765   ret void
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
6781 entry:
6782   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000
6783   store float %str, ptr %add.ptr, align 4
6784   ret void
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
6803 entry:
6804   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000
6805   store float %str, ptr %add.ptr, align 4
6806   ret void
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
6814 ; CHECK-NEXT:    blr
6815 entry:
6816   %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off
6817   store float %str, ptr %add.ptr, align 4
6818   ret void
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)
6827 ; CHECK-NEXT:    blr
6828 entry:
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
6833   ret void
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)
6842 ; CHECK-NEXT:    blr
6843 entry:
6844   %or = or i64 %ptr, 6
6845   %0 = inttoptr i64 %or to ptr
6846   store float %str, ptr %0, align 4
6847   ret void
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)
6856 ; CHECK-NEXT:    blr
6857 entry:
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
6862   ret void
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)
6872 ; CHECK-NEXT:    blr
6873 entry:
6874   %or = or i64 %ptr, 99999
6875   %0 = inttoptr i64 %or to ptr
6876   store float %str, ptr %0, align 4
6877   ret void
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
6897 entry:
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
6902   ret void
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
6925 entry:
6926   %or = or i64 %ptr, 1000000000001
6927   %0 = inttoptr i64 %or to ptr
6928   store float %str, ptr %0, align 4
6929   ret void
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
6950 entry:
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
6955   ret void
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)
6963 ; CHECK-NEXT:    blr
6964 entry:
6965   store float %str, ptr inttoptr (i64 4080 to ptr), align 16
6966   ret void
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)
6975 ; CHECK-NEXT:    blr
6976 entry:
6977   store float %str, ptr inttoptr (i64 9999900 to ptr), align 4
6978   ret void
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
6997 entry:
6998   store float %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096
6999   ret void
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)
7007 ; CHECK-NEXT:    blr
7008 entry:
7009   %conv = fpext float %str to double
7010   %0 = inttoptr i64 %ptr to ptr
7011   store double %conv, ptr %0, align 8
7012   ret void
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)
7020 ; CHECK-NEXT:    blr
7021 entry:
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
7025   ret void
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
7041 entry:
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
7045   ret void
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
7064 entry:
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
7068   ret void
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
7076 ; CHECK-NEXT:    blr
7077 entry:
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
7081   ret void
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)
7090 ; CHECK-NEXT:    blr
7091 entry:
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
7097   ret void
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)
7106 ; CHECK-NEXT:    blr
7107 entry:
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
7112   ret void
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)
7121 ; CHECK-NEXT:    blr
7122 entry:
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
7128   ret void
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)
7138 ; CHECK-NEXT:    blr
7139 entry:
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
7144   ret void
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
7164 entry:
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
7170   ret void
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
7193 entry:
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
7198   ret void
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
7219 entry:
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
7225   ret void
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)
7233 ; CHECK-NEXT:    blr
7234 entry:
7235   %conv = fpext float %str to double
7236   store double %conv, ptr inttoptr (i64 4080 to ptr), align 16
7237   ret void
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)
7246 ; CHECK-NEXT:    blr
7247 entry:
7248   %conv = fpext float %str to double
7249   store double %conv, ptr inttoptr (i64 9999900 to ptr), align 8
7250   ret void
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
7269 entry:
7270   %conv = fpext float %str to double
7271   store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096
7272   ret void