xref: /llvm-project/llvm/test/CodeGen/PowerPC/store_fptoi.ll (revision 69bc8ff76661a4d61dc32292d988789c8fd234b8)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -ppc-vsr-nums-as-vr \
3; RUN:   -verify-machineinstrs < %s | FileCheck %s
4; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown -ppc-vsr-nums-as-vr \
5; RUN:   -verify-machineinstrs < %s | FileCheck -check-prefix=CHECK-PWR8 %s
6
7; ==========================================
8; Tests for store of fp_to_sint converstions
9; ==========================================
10
11; Function Attrs: norecurse nounwind
12define void @qpConv2sdw(ptr nocapture readonly %a, ptr nocapture %b) {
13; CHECK-LABEL: qpConv2sdw:
14; CHECK:       # %bb.0: # %entry
15; CHECK-NEXT:    lxv 2, 0(3)
16; CHECK-NEXT:    xscvqpsdz 2, 2
17; CHECK-NEXT:    stxsd 2, 0(4)
18; CHECK-NEXT:    blr
19;
20; CHECK-PWR8-LABEL: qpConv2sdw:
21; CHECK-PWR8:       # %bb.0: # %entry
22; CHECK-PWR8-NEXT:    mflr 0
23; CHECK-PWR8-NEXT:    .cfi_def_cfa_offset 48
24; CHECK-PWR8-NEXT:    .cfi_offset lr, 16
25; CHECK-PWR8-NEXT:    .cfi_offset r30, -16
26; CHECK-PWR8-NEXT:    std 30, -16(1) # 8-byte Folded Spill
27; CHECK-PWR8-NEXT:    stdu 1, -48(1)
28; CHECK-PWR8-NEXT:    std 0, 64(1)
29; CHECK-PWR8-NEXT:    mr 30, 4
30; CHECK-PWR8-NEXT:    lxvd2x 0, 0, 3
31; CHECK-PWR8-NEXT:    xxswapd 2, 0
32; CHECK-PWR8-NEXT:    bl __fixkfdi
33; CHECK-PWR8-NEXT:    nop
34; CHECK-PWR8-NEXT:    std 3, 0(30)
35; CHECK-PWR8-NEXT:    addi 1, 1, 48
36; CHECK-PWR8-NEXT:    ld 0, 16(1)
37; CHECK-PWR8-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
38; CHECK-PWR8-NEXT:    mtlr 0
39; CHECK-PWR8-NEXT:    blr
40entry:
41  %0 = load fp128, ptr %a, align 16
42  %conv = fptosi fp128 %0 to i64
43  store i64 %conv, ptr %b, align 8
44  ret void
45
46
47}
48
49; Function Attrs: norecurse nounwind
50define void @qpConv2sw(ptr nocapture readonly %a, ptr nocapture %b) {
51; CHECK-LABEL: qpConv2sw:
52; CHECK:       # %bb.0: # %entry
53; CHECK-NEXT:    lxv 2, 0(3)
54; CHECK-NEXT:    xscvqpswz 2, 2
55; CHECK-NEXT:    stxsiwx 2, 0, 4
56; CHECK-NEXT:    blr
57;
58; CHECK-PWR8-LABEL: qpConv2sw:
59; CHECK-PWR8:       # %bb.0: # %entry
60; CHECK-PWR8-NEXT:    mflr 0
61; CHECK-PWR8-NEXT:    .cfi_def_cfa_offset 48
62; CHECK-PWR8-NEXT:    .cfi_offset lr, 16
63; CHECK-PWR8-NEXT:    .cfi_offset r30, -16
64; CHECK-PWR8-NEXT:    std 30, -16(1) # 8-byte Folded Spill
65; CHECK-PWR8-NEXT:    stdu 1, -48(1)
66; CHECK-PWR8-NEXT:    std 0, 64(1)
67; CHECK-PWR8-NEXT:    mr 30, 4
68; CHECK-PWR8-NEXT:    lxvd2x 0, 0, 3
69; CHECK-PWR8-NEXT:    xxswapd 2, 0
70; CHECK-PWR8-NEXT:    bl __fixkfsi
71; CHECK-PWR8-NEXT:    nop
72; CHECK-PWR8-NEXT:    stw 3, 0(30)
73; CHECK-PWR8-NEXT:    addi 1, 1, 48
74; CHECK-PWR8-NEXT:    ld 0, 16(1)
75; CHECK-PWR8-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
76; CHECK-PWR8-NEXT:    mtlr 0
77; CHECK-PWR8-NEXT:    blr
78entry:
79  %0 = load fp128, ptr %a, align 16
80  %conv = fptosi fp128 %0 to i32
81  store i32 %conv, ptr %b, align 4
82  ret void
83
84
85}
86
87; Function Attrs: norecurse nounwind
88define void @qpConv2udw(ptr nocapture readonly %a, ptr nocapture %b) {
89; CHECK-LABEL: qpConv2udw:
90; CHECK:       # %bb.0: # %entry
91; CHECK-NEXT:    lxv 2, 0(3)
92; CHECK-NEXT:    xscvqpudz 2, 2
93; CHECK-NEXT:    stxsd 2, 0(4)
94; CHECK-NEXT:    blr
95;
96; CHECK-PWR8-LABEL: qpConv2udw:
97; CHECK-PWR8:       # %bb.0: # %entry
98; CHECK-PWR8-NEXT:    mflr 0
99; CHECK-PWR8-NEXT:    .cfi_def_cfa_offset 48
100; CHECK-PWR8-NEXT:    .cfi_offset lr, 16
101; CHECK-PWR8-NEXT:    .cfi_offset r30, -16
102; CHECK-PWR8-NEXT:    std 30, -16(1) # 8-byte Folded Spill
103; CHECK-PWR8-NEXT:    stdu 1, -48(1)
104; CHECK-PWR8-NEXT:    std 0, 64(1)
105; CHECK-PWR8-NEXT:    mr 30, 4
106; CHECK-PWR8-NEXT:    lxvd2x 0, 0, 3
107; CHECK-PWR8-NEXT:    xxswapd 2, 0
108; CHECK-PWR8-NEXT:    bl __fixunskfdi
109; CHECK-PWR8-NEXT:    nop
110; CHECK-PWR8-NEXT:    std 3, 0(30)
111; CHECK-PWR8-NEXT:    addi 1, 1, 48
112; CHECK-PWR8-NEXT:    ld 0, 16(1)
113; CHECK-PWR8-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
114; CHECK-PWR8-NEXT:    mtlr 0
115; CHECK-PWR8-NEXT:    blr
116entry:
117  %0 = load fp128, ptr %a, align 16
118  %conv = fptoui fp128 %0 to i64
119  store i64 %conv, ptr %b, align 8
120  ret void
121
122
123}
124
125; Function Attrs: norecurse nounwind
126define void @qpConv2uw(ptr nocapture readonly %a, ptr nocapture %b) {
127; CHECK-LABEL: qpConv2uw:
128; CHECK:       # %bb.0: # %entry
129; CHECK-NEXT:    lxv 2, 0(3)
130; CHECK-NEXT:    xscvqpuwz 2, 2
131; CHECK-NEXT:    stxsiwx 2, 0, 4
132; CHECK-NEXT:    blr
133;
134; CHECK-PWR8-LABEL: qpConv2uw:
135; CHECK-PWR8:       # %bb.0: # %entry
136; CHECK-PWR8-NEXT:    mflr 0
137; CHECK-PWR8-NEXT:    .cfi_def_cfa_offset 48
138; CHECK-PWR8-NEXT:    .cfi_offset lr, 16
139; CHECK-PWR8-NEXT:    .cfi_offset r30, -16
140; CHECK-PWR8-NEXT:    std 30, -16(1) # 8-byte Folded Spill
141; CHECK-PWR8-NEXT:    stdu 1, -48(1)
142; CHECK-PWR8-NEXT:    std 0, 64(1)
143; CHECK-PWR8-NEXT:    mr 30, 4
144; CHECK-PWR8-NEXT:    lxvd2x 0, 0, 3
145; CHECK-PWR8-NEXT:    xxswapd 2, 0
146; CHECK-PWR8-NEXT:    bl __fixunskfsi
147; CHECK-PWR8-NEXT:    nop
148; CHECK-PWR8-NEXT:    stw 3, 0(30)
149; CHECK-PWR8-NEXT:    addi 1, 1, 48
150; CHECK-PWR8-NEXT:    ld 0, 16(1)
151; CHECK-PWR8-NEXT:    ld 30, -16(1) # 8-byte Folded Reload
152; CHECK-PWR8-NEXT:    mtlr 0
153; CHECK-PWR8-NEXT:    blr
154entry:
155  %0 = load fp128, ptr %a, align 16
156  %conv = fptoui fp128 %0 to i32
157  store i32 %conv, ptr %b, align 4
158  ret void
159
160
161}
162
163; Function Attrs: norecurse nounwind
164define void @dpConv2sdw(ptr nocapture readonly %a, ptr nocapture %b) {
165; CHECK-LABEL: dpConv2sdw:
166; CHECK:       # %bb.0: # %entry
167; CHECK-NEXT:    lfd 0, 0(3)
168; CHECK-NEXT:    xscvdpsxds 2, 0
169; CHECK-NEXT:    stxsd 2, 0(4)
170; CHECK-NEXT:    blr
171;
172; CHECK-PWR8-LABEL: dpConv2sdw:
173; CHECK-PWR8:       # %bb.0: # %entry
174; CHECK-PWR8-NEXT:    lfd 0, 0(3)
175; CHECK-PWR8-NEXT:    xscvdpsxds 0, 0
176; CHECK-PWR8-NEXT:    stxsdx 0, 0, 4
177; CHECK-PWR8-NEXT:    blr
178entry:
179  %0 = load double, ptr %a, align 8
180  %conv = fptosi double %0 to i64
181  store i64 %conv, ptr %b, align 8
182  ret void
183
184
185}
186
187; Function Attrs: norecurse nounwind
188define void @dpConv2sw(ptr nocapture readonly %a, ptr nocapture %b) {
189; CHECK-LABEL: dpConv2sw:
190; CHECK:       # %bb.0: # %entry
191; CHECK-NEXT:    lfd 0, 0(3)
192; CHECK-NEXT:    xscvdpsxws 0, 0
193; CHECK-NEXT:    stfiwx 0, 0, 4
194; CHECK-NEXT:    blr
195;
196; CHECK-PWR8-LABEL: dpConv2sw:
197; CHECK-PWR8:       # %bb.0: # %entry
198; CHECK-PWR8-NEXT:    lfd 0, 0(3)
199; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
200; CHECK-PWR8-NEXT:    stfiwx 0, 0, 4
201; CHECK-PWR8-NEXT:    blr
202entry:
203  %0 = load double, ptr %a, align 8
204  %conv = fptosi double %0 to i32
205  store i32 %conv, ptr %b, align 4
206  ret void
207
208
209}
210
211; Function Attrs: norecurse nounwind
212define void @dpConv2shw(ptr nocapture readonly %a, ptr nocapture %b) {
213; CHECK-LABEL: dpConv2shw:
214; CHECK:       # %bb.0: # %entry
215; CHECK-NEXT:    lfd 0, 0(3)
216; CHECK-NEXT:    xscvdpsxds 0, 0
217; CHECK-NEXT:    stxsihx 0, 0, 4
218; CHECK-NEXT:    blr
219;
220; CHECK-PWR8-LABEL: dpConv2shw:
221; CHECK-PWR8:       # %bb.0: # %entry
222; CHECK-PWR8-NEXT:    lfd 0, 0(3)
223; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
224; CHECK-PWR8-NEXT:    mffprwz 3, 0
225; CHECK-PWR8-NEXT:    sth 3, 0(4)
226; CHECK-PWR8-NEXT:    blr
227entry:
228  %0 = load double, ptr %a, align 8
229  %conv = fptosi double %0 to i16
230  store i16 %conv, ptr %b, align 2
231  ret void
232
233
234}
235
236; Function Attrs: norecurse nounwind
237define void @dpConv2sb(ptr nocapture readonly %a, ptr nocapture %b) {
238; CHECK-LABEL: dpConv2sb:
239; CHECK:       # %bb.0: # %entry
240; CHECK-NEXT:    lfd 0, 0(3)
241; CHECK-NEXT:    xscvdpsxds 0, 0
242; CHECK-NEXT:    stxsibx 0, 0, 4
243; CHECK-NEXT:    blr
244;
245; CHECK-PWR8-LABEL: dpConv2sb:
246; CHECK-PWR8:       # %bb.0: # %entry
247; CHECK-PWR8-NEXT:    lfd 0, 0(3)
248; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
249; CHECK-PWR8-NEXT:    mffprwz 3, 0
250; CHECK-PWR8-NEXT:    stb 3, 0(4)
251; CHECK-PWR8-NEXT:    blr
252entry:
253  %0 = load double, ptr %a, align 8
254  %conv = fptosi double %0 to i8
255  store i8 %conv, ptr %b, align 1
256  ret void
257
258
259}
260
261; Function Attrs: norecurse nounwind
262define void @spConv2sdw(ptr nocapture readonly %a, ptr nocapture %b) {
263; CHECK-LABEL: spConv2sdw:
264; CHECK:       # %bb.0: # %entry
265; CHECK-NEXT:    lfs 0, 0(3)
266; CHECK-NEXT:    xscvdpsxds 2, 0
267; CHECK-NEXT:    stxsd 2, 0(4)
268; CHECK-NEXT:    blr
269;
270; CHECK-PWR8-LABEL: spConv2sdw:
271; CHECK-PWR8:       # %bb.0: # %entry
272; CHECK-PWR8-NEXT:    lfs 0, 0(3)
273; CHECK-PWR8-NEXT:    xscvdpsxds 0, 0
274; CHECK-PWR8-NEXT:    stxsdx 0, 0, 4
275; CHECK-PWR8-NEXT:    blr
276entry:
277  %0 = load float, ptr %a, align 4
278  %conv = fptosi float %0 to i64
279  store i64 %conv, ptr %b, align 8
280  ret void
281
282
283}
284
285; Function Attrs: norecurse nounwind
286define void @spConv2sw(ptr nocapture readonly %a, ptr nocapture %b) {
287; CHECK-LABEL: spConv2sw:
288; CHECK:       # %bb.0: # %entry
289; CHECK-NEXT:    lfs 0, 0(3)
290; CHECK-NEXT:    xscvdpsxws 0, 0
291; CHECK-NEXT:    stfiwx 0, 0, 4
292; CHECK-NEXT:    blr
293;
294; CHECK-PWR8-LABEL: spConv2sw:
295; CHECK-PWR8:       # %bb.0: # %entry
296; CHECK-PWR8-NEXT:    lfs 0, 0(3)
297; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
298; CHECK-PWR8-NEXT:    stfiwx 0, 0, 4
299; CHECK-PWR8-NEXT:    blr
300entry:
301  %0 = load float, ptr %a, align 4
302  %conv = fptosi float %0 to i32
303  store i32 %conv, ptr %b, align 4
304  ret void
305
306
307}
308
309; Function Attrs: norecurse nounwind
310define void @spConv2shw(ptr nocapture readonly %a, ptr nocapture %b) {
311; CHECK-LABEL: spConv2shw:
312; CHECK:       # %bb.0: # %entry
313; CHECK-NEXT:    lfs 0, 0(3)
314; CHECK-NEXT:    xscvdpsxds 0, 0
315; CHECK-NEXT:    stxsihx 0, 0, 4
316; CHECK-NEXT:    blr
317;
318; CHECK-PWR8-LABEL: spConv2shw:
319; CHECK-PWR8:       # %bb.0: # %entry
320; CHECK-PWR8-NEXT:    lfs 0, 0(3)
321; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
322; CHECK-PWR8-NEXT:    mffprwz 3, 0
323; CHECK-PWR8-NEXT:    sth 3, 0(4)
324; CHECK-PWR8-NEXT:    blr
325entry:
326  %0 = load float, ptr %a, align 4
327  %conv = fptosi float %0 to i16
328  store i16 %conv, ptr %b, align 2
329  ret void
330
331
332}
333
334; Function Attrs: norecurse nounwind
335define void @spConv2sb(ptr nocapture readonly %a, ptr nocapture %b) {
336; CHECK-LABEL: spConv2sb:
337; CHECK:       # %bb.0: # %entry
338; CHECK-NEXT:    lfs 0, 0(3)
339; CHECK-NEXT:    xscvdpsxds 0, 0
340; CHECK-NEXT:    stxsibx 0, 0, 4
341; CHECK-NEXT:    blr
342;
343; CHECK-PWR8-LABEL: spConv2sb:
344; CHECK-PWR8:       # %bb.0: # %entry
345; CHECK-PWR8-NEXT:    lfs 0, 0(3)
346; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
347; CHECK-PWR8-NEXT:    mffprwz 3, 0
348; CHECK-PWR8-NEXT:    stb 3, 0(4)
349; CHECK-PWR8-NEXT:    blr
350entry:
351  %0 = load float, ptr %a, align 4
352  %conv = fptosi float %0 to i8
353  store i8 %conv, ptr %b, align 1
354  ret void
355
356
357}
358
359; Function Attrs: norecurse nounwind
360define void @dpConv2sdw_x(ptr nocapture readonly %a, ptr nocapture %b,
361; CHECK-LABEL: dpConv2sdw_x:
362; CHECK:       # %bb.0: # %entry
363; CHECK-NEXT:    lfd 0, 0(3)
364; CHECK-NEXT:    sldi 3, 5, 3
365; CHECK-NEXT:    xscvdpsxds 0, 0
366; CHECK-NEXT:    stxsdx 0, 4, 3
367; CHECK-NEXT:    blr
368;
369; CHECK-PWR8-LABEL: dpConv2sdw_x:
370; CHECK-PWR8:       # %bb.0: # %entry
371; CHECK-PWR8-NEXT:    lfd 0, 0(3)
372; CHECK-PWR8-NEXT:    sldi 3, 5, 3
373; CHECK-PWR8-NEXT:    xscvdpsxds 0, 0
374; CHECK-PWR8-NEXT:    stxsdx 0, 4, 3
375; CHECK-PWR8-NEXT:    blr
376                          i32 signext %idx) {
377entry:
378  %0 = load double, ptr %a, align 8
379  %conv = fptosi double %0 to i64
380  %idxprom = sext i32 %idx to i64
381  %arrayidx = getelementptr inbounds i64, ptr %b, i64 %idxprom
382  store i64 %conv, ptr %arrayidx, align 8
383  ret void
384
385
386}
387
388; Function Attrs: norecurse nounwind
389define void @dpConv2sw_x(ptr nocapture readonly %a, ptr nocapture %b,
390; CHECK-LABEL: dpConv2sw_x:
391; CHECK:       # %bb.0: # %entry
392; CHECK-NEXT:    lfd 0, 0(3)
393; CHECK-NEXT:    sldi 3, 5, 2
394; CHECK-NEXT:    xscvdpsxws 0, 0
395; CHECK-NEXT:    stfiwx 0, 4, 3
396; CHECK-NEXT:    blr
397;
398; CHECK-PWR8-LABEL: dpConv2sw_x:
399; CHECK-PWR8:       # %bb.0: # %entry
400; CHECK-PWR8-NEXT:    lfd 0, 0(3)
401; CHECK-PWR8-NEXT:    sldi 3, 5, 2
402; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
403; CHECK-PWR8-NEXT:    stfiwx 0, 4, 3
404; CHECK-PWR8-NEXT:    blr
405                          i32 signext %idx) {
406entry:
407  %0 = load double, ptr %a, align 8
408  %conv = fptosi double %0 to i32
409  %idxprom = sext i32 %idx to i64
410  %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom
411  store i32 %conv, ptr %arrayidx, align 4
412  ret void
413
414
415}
416
417; Function Attrs: norecurse nounwind
418define void @dpConv2shw_x(ptr nocapture readonly %a, ptr nocapture %b,
419; CHECK-LABEL: dpConv2shw_x:
420; CHECK:       # %bb.0: # %entry
421; CHECK-NEXT:    lfd 0, 0(3)
422; CHECK-NEXT:    sldi 3, 5, 1
423; CHECK-NEXT:    xscvdpsxds 0, 0
424; CHECK-NEXT:    stxsihx 0, 4, 3
425; CHECK-NEXT:    blr
426;
427; CHECK-PWR8-LABEL: dpConv2shw_x:
428; CHECK-PWR8:       # %bb.0: # %entry
429; CHECK-PWR8-NEXT:    lfd 0, 0(3)
430; CHECK-PWR8-NEXT:    sldi 5, 5, 1
431; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
432; CHECK-PWR8-NEXT:    mffprwz 3, 0
433; CHECK-PWR8-NEXT:    sthx 3, 4, 5
434; CHECK-PWR8-NEXT:    blr
435                          i32 signext %idx) {
436entry:
437  %0 = load double, ptr %a, align 8
438  %conv = fptosi double %0 to i16
439  %idxprom = sext i32 %idx to i64
440  %arrayidx = getelementptr inbounds i16, ptr %b, i64 %idxprom
441  store i16 %conv, ptr %arrayidx, align 2
442  ret void
443
444
445}
446
447; Function Attrs: norecurse nounwind
448define void @dpConv2sb_x(ptr nocapture readonly %a, ptr nocapture %b,
449; CHECK-LABEL: dpConv2sb_x:
450; CHECK:       # %bb.0: # %entry
451; CHECK-NEXT:    lfd 0, 0(3)
452; CHECK-NEXT:    xscvdpsxds 0, 0
453; CHECK-NEXT:    stxsibx 0, 4, 5
454; CHECK-NEXT:    blr
455;
456; CHECK-PWR8-LABEL: dpConv2sb_x:
457; CHECK-PWR8:       # %bb.0: # %entry
458; CHECK-PWR8-NEXT:    lfd 0, 0(3)
459; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
460; CHECK-PWR8-NEXT:    mffprwz 3, 0
461; CHECK-PWR8-NEXT:    stbx 3, 4, 5
462; CHECK-PWR8-NEXT:    blr
463                          i32 signext %idx) {
464entry:
465  %0 = load double, ptr %a, align 8
466  %conv = fptosi double %0 to i8
467  %idxprom = sext i32 %idx to i64
468  %arrayidx = getelementptr inbounds i8, ptr %b, i64 %idxprom
469  store i8 %conv, ptr %arrayidx, align 1
470  ret void
471
472
473}
474
475; Function Attrs: norecurse nounwind
476define void @spConv2sdw_x(ptr nocapture readonly %a, ptr nocapture %b,
477; CHECK-LABEL: spConv2sdw_x:
478; CHECK:       # %bb.0: # %entry
479; CHECK-NEXT:    lfs 0, 0(3)
480; CHECK-NEXT:    xscvdpsxds 0, 0
481; CHECK-NEXT:    sldi 3, 5, 3
482; CHECK-NEXT:    stxsdx 0, 4, 3
483; CHECK-NEXT:    blr
484;
485; CHECK-PWR8-LABEL: spConv2sdw_x:
486; CHECK-PWR8:       # %bb.0: # %entry
487; CHECK-PWR8-NEXT:    lfs 0, 0(3)
488; CHECK-PWR8-NEXT:    sldi 3, 5, 3
489; CHECK-PWR8-NEXT:    xscvdpsxds 0, 0
490; CHECK-PWR8-NEXT:    stxsdx 0, 4, 3
491; CHECK-PWR8-NEXT:    blr
492                          i32 signext %idx) {
493entry:
494  %0 = load float, ptr %a, align 4
495  %conv = fptosi float %0 to i64
496  %idxprom = sext i32 %idx to i64
497  %arrayidx = getelementptr inbounds i64, ptr %b, i64 %idxprom
498  store i64 %conv, ptr %arrayidx, align 8
499  ret void
500
501
502}
503
504; Function Attrs: norecurse nounwind
505define void @spConv2sw_x(ptr nocapture readonly %a, ptr nocapture %b,
506; CHECK-LABEL: spConv2sw_x:
507; CHECK:       # %bb.0: # %entry
508; CHECK-NEXT:    lfs 0, 0(3)
509; CHECK-NEXT:    xscvdpsxws 0, 0
510; CHECK-NEXT:    sldi 3, 5, 2
511; CHECK-NEXT:    stfiwx 0, 4, 3
512; CHECK-NEXT:    blr
513;
514; CHECK-PWR8-LABEL: spConv2sw_x:
515; CHECK-PWR8:       # %bb.0: # %entry
516; CHECK-PWR8-NEXT:    lfs 0, 0(3)
517; CHECK-PWR8-NEXT:    sldi 3, 5, 2
518; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
519; CHECK-PWR8-NEXT:    stfiwx 0, 4, 3
520; CHECK-PWR8-NEXT:    blr
521                          i32 signext %idx) {
522entry:
523  %0 = load float, ptr %a, align 4
524  %conv = fptosi float %0 to i32
525  %idxprom = sext i32 %idx to i64
526  %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom
527  store i32 %conv, ptr %arrayidx, align 4
528  ret void
529
530
531}
532
533; Function Attrs: norecurse nounwind
534define void @spConv2shw_x(ptr nocapture readonly %a, ptr nocapture %b,
535; CHECK-LABEL: spConv2shw_x:
536; CHECK:       # %bb.0: # %entry
537; CHECK-NEXT:    lfs 0, 0(3)
538; CHECK-NEXT:    xscvdpsxds 0, 0
539; CHECK-NEXT:    sldi 3, 5, 1
540; CHECK-NEXT:    stxsihx 0, 4, 3
541; CHECK-NEXT:    blr
542;
543; CHECK-PWR8-LABEL: spConv2shw_x:
544; CHECK-PWR8:       # %bb.0: # %entry
545; CHECK-PWR8-NEXT:    lfs 0, 0(3)
546; CHECK-PWR8-NEXT:    sldi 5, 5, 1
547; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
548; CHECK-PWR8-NEXT:    mffprwz 3, 0
549; CHECK-PWR8-NEXT:    sthx 3, 4, 5
550; CHECK-PWR8-NEXT:    blr
551                          i32 signext %idx) {
552entry:
553  %0 = load float, ptr %a, align 4
554  %conv = fptosi float %0 to i16
555  %idxprom = sext i32 %idx to i64
556  %arrayidx = getelementptr inbounds i16, ptr %b, i64 %idxprom
557  store i16 %conv, ptr %arrayidx, align 2
558  ret void
559
560
561}
562
563; Function Attrs: norecurse nounwind
564define void @spConv2sb_x(ptr nocapture readonly %a, ptr nocapture %b,
565; CHECK-LABEL: spConv2sb_x:
566; CHECK:       # %bb.0: # %entry
567; CHECK-NEXT:    lfs 0, 0(3)
568; CHECK-NEXT:    xscvdpsxds 0, 0
569; CHECK-NEXT:    stxsibx 0, 4, 5
570; CHECK-NEXT:    blr
571;
572; CHECK-PWR8-LABEL: spConv2sb_x:
573; CHECK-PWR8:       # %bb.0: # %entry
574; CHECK-PWR8-NEXT:    lfs 0, 0(3)
575; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
576; CHECK-PWR8-NEXT:    mffprwz 3, 0
577; CHECK-PWR8-NEXT:    stbx 3, 4, 5
578; CHECK-PWR8-NEXT:    blr
579                          i32 signext %idx) {
580entry:
581  %0 = load float, ptr %a, align 4
582  %conv = fptosi float %0 to i8
583  %idxprom = sext i32 %idx to i64
584  %arrayidx = getelementptr inbounds i8, ptr %b, i64 %idxprom
585  store i8 %conv, ptr %arrayidx, align 1
586  ret void
587
588
589}
590
591; ==========================================
592; Tests for store of fp_to_uint converstions
593; ==========================================
594
595; Function Attrs: norecurse nounwind
596define void @dpConv2udw(ptr nocapture readonly %a, ptr nocapture %b) {
597; CHECK-LABEL: dpConv2udw:
598; CHECK:       # %bb.0: # %entry
599; CHECK-NEXT:    lfd 0, 0(3)
600; CHECK-NEXT:    xscvdpuxds 2, 0
601; CHECK-NEXT:    stxsd 2, 0(4)
602; CHECK-NEXT:    blr
603;
604; CHECK-PWR8-LABEL: dpConv2udw:
605; CHECK-PWR8:       # %bb.0: # %entry
606; CHECK-PWR8-NEXT:    lfd 0, 0(3)
607; CHECK-PWR8-NEXT:    xscvdpuxds 0, 0
608; CHECK-PWR8-NEXT:    stxsdx 0, 0, 4
609; CHECK-PWR8-NEXT:    blr
610entry:
611  %0 = load double, ptr %a, align 8
612  %conv = fptoui double %0 to i64
613  store i64 %conv, ptr %b, align 8
614  ret void
615
616
617}
618
619; Function Attrs: norecurse nounwind
620define void @dpConv2uw(ptr nocapture readonly %a, ptr nocapture %b) {
621; CHECK-LABEL: dpConv2uw:
622; CHECK:       # %bb.0: # %entry
623; CHECK-NEXT:    lfd 0, 0(3)
624; CHECK-NEXT:    xscvdpuxws 0, 0
625; CHECK-NEXT:    stfiwx 0, 0, 4
626; CHECK-NEXT:    blr
627;
628; CHECK-PWR8-LABEL: dpConv2uw:
629; CHECK-PWR8:       # %bb.0: # %entry
630; CHECK-PWR8-NEXT:    lfd 0, 0(3)
631; CHECK-PWR8-NEXT:    xscvdpuxws 0, 0
632; CHECK-PWR8-NEXT:    stfiwx 0, 0, 4
633; CHECK-PWR8-NEXT:    blr
634entry:
635  %0 = load double, ptr %a, align 8
636  %conv = fptoui double %0 to i32
637  store i32 %conv, ptr %b, align 4
638  ret void
639
640
641}
642
643; Function Attrs: norecurse nounwind
644define void @dpConv2uhw(ptr nocapture readonly %a, ptr nocapture %b) {
645; CHECK-LABEL: dpConv2uhw:
646; CHECK:       # %bb.0: # %entry
647; CHECK-NEXT:    lfd 0, 0(3)
648; CHECK-NEXT:    xscvdpuxds 0, 0
649; CHECK-NEXT:    stxsihx 0, 0, 4
650; CHECK-NEXT:    blr
651;
652; CHECK-PWR8-LABEL: dpConv2uhw:
653; CHECK-PWR8:       # %bb.0: # %entry
654; CHECK-PWR8-NEXT:    lfd 0, 0(3)
655; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
656; CHECK-PWR8-NEXT:    mffprwz 3, 0
657; CHECK-PWR8-NEXT:    sth 3, 0(4)
658; CHECK-PWR8-NEXT:    blr
659entry:
660  %0 = load double, ptr %a, align 8
661  %conv = fptoui double %0 to i16
662  store i16 %conv, ptr %b, align 2
663  ret void
664
665
666}
667
668; Function Attrs: norecurse nounwind
669define void @dpConv2ub(ptr nocapture readonly %a, ptr nocapture %b) {
670; CHECK-LABEL: dpConv2ub:
671; CHECK:       # %bb.0: # %entry
672; CHECK-NEXT:    lfd 0, 0(3)
673; CHECK-NEXT:    xscvdpuxds 0, 0
674; CHECK-NEXT:    stxsibx 0, 0, 4
675; CHECK-NEXT:    blr
676;
677; CHECK-PWR8-LABEL: dpConv2ub:
678; CHECK-PWR8:       # %bb.0: # %entry
679; CHECK-PWR8-NEXT:    lfd 0, 0(3)
680; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
681; CHECK-PWR8-NEXT:    mffprwz 3, 0
682; CHECK-PWR8-NEXT:    stb 3, 0(4)
683; CHECK-PWR8-NEXT:    blr
684entry:
685  %0 = load double, ptr %a, align 8
686  %conv = fptoui double %0 to i8
687  store i8 %conv, ptr %b, align 1
688  ret void
689
690
691}
692
693; Function Attrs: norecurse nounwind
694define void @spConv2udw(ptr nocapture readonly %a, ptr nocapture %b) {
695; CHECK-LABEL: spConv2udw:
696; CHECK:       # %bb.0: # %entry
697; CHECK-NEXT:    lfs 0, 0(3)
698; CHECK-NEXT:    xscvdpuxds 2, 0
699; CHECK-NEXT:    stxsd 2, 0(4)
700; CHECK-NEXT:    blr
701;
702; CHECK-PWR8-LABEL: spConv2udw:
703; CHECK-PWR8:       # %bb.0: # %entry
704; CHECK-PWR8-NEXT:    lfs 0, 0(3)
705; CHECK-PWR8-NEXT:    xscvdpuxds 0, 0
706; CHECK-PWR8-NEXT:    stxsdx 0, 0, 4
707; CHECK-PWR8-NEXT:    blr
708entry:
709  %0 = load float, ptr %a, align 4
710  %conv = fptoui float %0 to i64
711  store i64 %conv, ptr %b, align 8
712  ret void
713
714
715}
716
717; Function Attrs: norecurse nounwind
718define void @spConv2uw(ptr nocapture readonly %a, ptr nocapture %b) {
719; CHECK-LABEL: spConv2uw:
720; CHECK:       # %bb.0: # %entry
721; CHECK-NEXT:    lfs 0, 0(3)
722; CHECK-NEXT:    xscvdpuxws 0, 0
723; CHECK-NEXT:    stfiwx 0, 0, 4
724; CHECK-NEXT:    blr
725;
726; CHECK-PWR8-LABEL: spConv2uw:
727; CHECK-PWR8:       # %bb.0: # %entry
728; CHECK-PWR8-NEXT:    lfs 0, 0(3)
729; CHECK-PWR8-NEXT:    xscvdpuxws 0, 0
730; CHECK-PWR8-NEXT:    stfiwx 0, 0, 4
731; CHECK-PWR8-NEXT:    blr
732entry:
733  %0 = load float, ptr %a, align 4
734  %conv = fptoui float %0 to i32
735  store i32 %conv, ptr %b, align 4
736  ret void
737
738
739}
740
741; Function Attrs: norecurse nounwind
742define void @spConv2uhw(ptr nocapture readonly %a, ptr nocapture %b) {
743; CHECK-LABEL: spConv2uhw:
744; CHECK:       # %bb.0: # %entry
745; CHECK-NEXT:    lfs 0, 0(3)
746; CHECK-NEXT:    xscvdpuxds 0, 0
747; CHECK-NEXT:    stxsihx 0, 0, 4
748; CHECK-NEXT:    blr
749;
750; CHECK-PWR8-LABEL: spConv2uhw:
751; CHECK-PWR8:       # %bb.0: # %entry
752; CHECK-PWR8-NEXT:    lfs 0, 0(3)
753; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
754; CHECK-PWR8-NEXT:    mffprwz 3, 0
755; CHECK-PWR8-NEXT:    sth 3, 0(4)
756; CHECK-PWR8-NEXT:    blr
757entry:
758  %0 = load float, ptr %a, align 4
759  %conv = fptoui float %0 to i16
760  store i16 %conv, ptr %b, align 2
761  ret void
762
763
764}
765
766; Function Attrs: norecurse nounwind
767define void @spConv2ub(ptr nocapture readonly %a, ptr nocapture %b) {
768; CHECK-LABEL: spConv2ub:
769; CHECK:       # %bb.0: # %entry
770; CHECK-NEXT:    lfs 0, 0(3)
771; CHECK-NEXT:    xscvdpuxds 0, 0
772; CHECK-NEXT:    stxsibx 0, 0, 4
773; CHECK-NEXT:    blr
774;
775; CHECK-PWR8-LABEL: spConv2ub:
776; CHECK-PWR8:       # %bb.0: # %entry
777; CHECK-PWR8-NEXT:    lfs 0, 0(3)
778; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
779; CHECK-PWR8-NEXT:    mffprwz 3, 0
780; CHECK-PWR8-NEXT:    stb 3, 0(4)
781; CHECK-PWR8-NEXT:    blr
782entry:
783  %0 = load float, ptr %a, align 4
784  %conv = fptoui float %0 to i8
785  store i8 %conv, ptr %b, align 1
786  ret void
787
788
789}
790
791; Function Attrs: norecurse nounwind
792define void @dpConv2udw_x(ptr nocapture readonly %a, ptr nocapture %b,
793; CHECK-LABEL: dpConv2udw_x:
794; CHECK:       # %bb.0: # %entry
795; CHECK-NEXT:    lfd 0, 0(3)
796; CHECK-NEXT:    sldi 3, 5, 3
797; CHECK-NEXT:    xscvdpuxds 0, 0
798; CHECK-NEXT:    stxsdx 0, 4, 3
799; CHECK-NEXT:    blr
800;
801; CHECK-PWR8-LABEL: dpConv2udw_x:
802; CHECK-PWR8:       # %bb.0: # %entry
803; CHECK-PWR8-NEXT:    lfd 0, 0(3)
804; CHECK-PWR8-NEXT:    sldi 3, 5, 3
805; CHECK-PWR8-NEXT:    xscvdpuxds 0, 0
806; CHECK-PWR8-NEXT:    stxsdx 0, 4, 3
807; CHECK-PWR8-NEXT:    blr
808                          i32 zeroext %idx) {
809entry:
810  %0 = load double, ptr %a, align 8
811  %conv = fptoui double %0 to i64
812  %idxprom = zext i32 %idx to i64
813  %arrayidx = getelementptr inbounds i64, ptr %b, i64 %idxprom
814  store i64 %conv, ptr %arrayidx, align 8
815  ret void
816
817
818}
819
820; Function Attrs: norecurse nounwind
821define void @dpConv2uw_x(ptr nocapture readonly %a, ptr nocapture %b,
822; CHECK-LABEL: dpConv2uw_x:
823; CHECK:       # %bb.0: # %entry
824; CHECK-NEXT:    lfd 0, 0(3)
825; CHECK-NEXT:    sldi 3, 5, 2
826; CHECK-NEXT:    xscvdpuxws 0, 0
827; CHECK-NEXT:    stfiwx 0, 4, 3
828; CHECK-NEXT:    blr
829;
830; CHECK-PWR8-LABEL: dpConv2uw_x:
831; CHECK-PWR8:       # %bb.0: # %entry
832; CHECK-PWR8-NEXT:    lfd 0, 0(3)
833; CHECK-PWR8-NEXT:    sldi 3, 5, 2
834; CHECK-PWR8-NEXT:    xscvdpuxws 0, 0
835; CHECK-PWR8-NEXT:    stfiwx 0, 4, 3
836; CHECK-PWR8-NEXT:    blr
837                          i32 zeroext %idx) {
838entry:
839  %0 = load double, ptr %a, align 8
840  %conv = fptoui double %0 to i32
841  %idxprom = zext i32 %idx to i64
842  %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom
843  store i32 %conv, ptr %arrayidx, align 4
844  ret void
845
846
847}
848
849; Function Attrs: norecurse nounwind
850define void @dpConv2uhw_x(ptr nocapture readonly %a, ptr nocapture %b,
851; CHECK-LABEL: dpConv2uhw_x:
852; CHECK:       # %bb.0: # %entry
853; CHECK-NEXT:    lfd 0, 0(3)
854; CHECK-NEXT:    sldi 3, 5, 1
855; CHECK-NEXT:    xscvdpuxds 0, 0
856; CHECK-NEXT:    stxsihx 0, 4, 3
857; CHECK-NEXT:    blr
858;
859; CHECK-PWR8-LABEL: dpConv2uhw_x:
860; CHECK-PWR8:       # %bb.0: # %entry
861; CHECK-PWR8-NEXT:    lfd 0, 0(3)
862; CHECK-PWR8-NEXT:    sldi 5, 5, 1
863; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
864; CHECK-PWR8-NEXT:    mffprwz 3, 0
865; CHECK-PWR8-NEXT:    sthx 3, 4, 5
866; CHECK-PWR8-NEXT:    blr
867                          i32 zeroext %idx) {
868entry:
869  %0 = load double, ptr %a, align 8
870  %conv = fptoui double %0 to i16
871  %idxprom = zext i32 %idx to i64
872  %arrayidx = getelementptr inbounds i16, ptr %b, i64 %idxprom
873  store i16 %conv, ptr %arrayidx, align 2
874  ret void
875
876
877}
878
879; Function Attrs: norecurse nounwind
880define void @dpConv2ub_x(ptr nocapture readonly %a, ptr nocapture %b,
881; CHECK-LABEL: dpConv2ub_x:
882; CHECK:       # %bb.0: # %entry
883; CHECK-NEXT:    lfd 0, 0(3)
884; CHECK-NEXT:    xscvdpuxds 0, 0
885; CHECK-NEXT:    stxsibx 0, 4, 5
886; CHECK-NEXT:    blr
887;
888; CHECK-PWR8-LABEL: dpConv2ub_x:
889; CHECK-PWR8:       # %bb.0: # %entry
890; CHECK-PWR8-NEXT:    lfd 0, 0(3)
891; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
892; CHECK-PWR8-NEXT:    mffprwz 3, 0
893; CHECK-PWR8-NEXT:    stbx 3, 4, 5
894; CHECK-PWR8-NEXT:    blr
895                          i32 zeroext %idx) {
896entry:
897  %0 = load double, ptr %a, align 8
898  %conv = fptoui double %0 to i8
899  %idxprom = zext i32 %idx to i64
900  %arrayidx = getelementptr inbounds i8, ptr %b, i64 %idxprom
901  store i8 %conv, ptr %arrayidx, align 1
902  ret void
903
904
905}
906
907; Function Attrs: norecurse nounwind
908define void @spConv2udw_x(ptr nocapture readonly %a, ptr nocapture %b,
909; CHECK-LABEL: spConv2udw_x:
910; CHECK:       # %bb.0: # %entry
911; CHECK-NEXT:    lfs 0, 0(3)
912; CHECK-NEXT:    xscvdpuxds 0, 0
913; CHECK-NEXT:    sldi 3, 5, 3
914; CHECK-NEXT:    stxsdx 0, 4, 3
915; CHECK-NEXT:    blr
916;
917; CHECK-PWR8-LABEL: spConv2udw_x:
918; CHECK-PWR8:       # %bb.0: # %entry
919; CHECK-PWR8-NEXT:    lfs 0, 0(3)
920; CHECK-PWR8-NEXT:    sldi 3, 5, 3
921; CHECK-PWR8-NEXT:    xscvdpuxds 0, 0
922; CHECK-PWR8-NEXT:    stxsdx 0, 4, 3
923; CHECK-PWR8-NEXT:    blr
924                          i32 zeroext %idx) {
925entry:
926  %0 = load float, ptr %a, align 4
927  %conv = fptoui float %0 to i64
928  %idxprom = zext i32 %idx to i64
929  %arrayidx = getelementptr inbounds i64, ptr %b, i64 %idxprom
930  store i64 %conv, ptr %arrayidx, align 8
931  ret void
932
933
934}
935
936; Function Attrs: norecurse nounwind
937define void @spConv2uw_x(ptr nocapture readonly %a, ptr nocapture %b,
938; CHECK-LABEL: spConv2uw_x:
939; CHECK:       # %bb.0: # %entry
940; CHECK-NEXT:    lfs 0, 0(3)
941; CHECK-NEXT:    xscvdpuxws 0, 0
942; CHECK-NEXT:    sldi 3, 5, 2
943; CHECK-NEXT:    stfiwx 0, 4, 3
944; CHECK-NEXT:    blr
945;
946; CHECK-PWR8-LABEL: spConv2uw_x:
947; CHECK-PWR8:       # %bb.0: # %entry
948; CHECK-PWR8-NEXT:    lfs 0, 0(3)
949; CHECK-PWR8-NEXT:    sldi 3, 5, 2
950; CHECK-PWR8-NEXT:    xscvdpuxws 0, 0
951; CHECK-PWR8-NEXT:    stfiwx 0, 4, 3
952; CHECK-PWR8-NEXT:    blr
953                          i32 zeroext %idx) {
954entry:
955  %0 = load float, ptr %a, align 4
956  %conv = fptoui float %0 to i32
957  %idxprom = zext i32 %idx to i64
958  %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom
959  store i32 %conv, ptr %arrayidx, align 4
960  ret void
961
962
963}
964
965; Function Attrs: norecurse nounwind
966define void @spConv2uhw_x(ptr nocapture readonly %a, ptr nocapture %b,
967; CHECK-LABEL: spConv2uhw_x:
968; CHECK:       # %bb.0: # %entry
969; CHECK-NEXT:    lfs 0, 0(3)
970; CHECK-NEXT:    xscvdpuxds 0, 0
971; CHECK-NEXT:    sldi 3, 5, 1
972; CHECK-NEXT:    stxsihx 0, 4, 3
973; CHECK-NEXT:    blr
974;
975; CHECK-PWR8-LABEL: spConv2uhw_x:
976; CHECK-PWR8:       # %bb.0: # %entry
977; CHECK-PWR8-NEXT:    lfs 0, 0(3)
978; CHECK-PWR8-NEXT:    sldi 5, 5, 1
979; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
980; CHECK-PWR8-NEXT:    mffprwz 3, 0
981; CHECK-PWR8-NEXT:    sthx 3, 4, 5
982; CHECK-PWR8-NEXT:    blr
983                          i32 zeroext %idx) {
984entry:
985  %0 = load float, ptr %a, align 4
986  %conv = fptoui float %0 to i16
987  %idxprom = zext i32 %idx to i64
988  %arrayidx = getelementptr inbounds i16, ptr %b, i64 %idxprom
989  store i16 %conv, ptr %arrayidx, align 2
990  ret void
991
992
993}
994
995; Function Attrs: norecurse nounwind
996define void @spConv2ub_x(ptr nocapture readonly %a, ptr nocapture %b,
997; CHECK-LABEL: spConv2ub_x:
998; CHECK:       # %bb.0: # %entry
999; CHECK-NEXT:    lfs 0, 0(3)
1000; CHECK-NEXT:    xscvdpuxds 0, 0
1001; CHECK-NEXT:    stxsibx 0, 4, 5
1002; CHECK-NEXT:    blr
1003;
1004; CHECK-PWR8-LABEL: spConv2ub_x:
1005; CHECK-PWR8:       # %bb.0: # %entry
1006; CHECK-PWR8-NEXT:    lfs 0, 0(3)
1007; CHECK-PWR8-NEXT:    xscvdpsxws 0, 0
1008; CHECK-PWR8-NEXT:    mffprwz 3, 0
1009; CHECK-PWR8-NEXT:    stbx 3, 4, 5
1010; CHECK-PWR8-NEXT:    blr
1011                          i32 zeroext %idx) {
1012entry:
1013  %0 = load float, ptr %a, align 4
1014  %conv = fptoui float %0 to i8
1015  %idxprom = zext i32 %idx to i64
1016  %arrayidx = getelementptr inbounds i8, ptr %b, i64 %idxprom
1017  store i8 %conv, ptr %arrayidx, align 1
1018  ret void
1019
1020
1021}
1022
1023define void @multiple_store_64(double %m, ptr %addr1, ptr %addr2, ptr %addr3) {
1024; CHECK-LABEL: multiple_store_64:
1025; CHECK:       # %bb.0: # %entry
1026; CHECK-NEXT:    xscvdpsxds 2, 1
1027; CHECK-NEXT:    stxsd 2, 0(4)
1028; CHECK-NEXT:    stxsd 2, 0(5)
1029; CHECK-NEXT:    stxsd 2, 0(6)
1030; CHECK-NEXT:    blr
1031;
1032; CHECK-PWR8-LABEL: multiple_store_64:
1033; CHECK-PWR8:       # %bb.0: # %entry
1034; CHECK-PWR8-NEXT:    xscvdpsxds 0, 1
1035; CHECK-PWR8-NEXT:    stxsdx 0, 0, 4
1036; CHECK-PWR8-NEXT:    stxsdx 0, 0, 5
1037; CHECK-PWR8-NEXT:    stxsdx 0, 0, 6
1038; CHECK-PWR8-NEXT:    blr
1039entry:
1040  %conv1 = fptosi double %m to i64
1041  store i64 %conv1, ptr %addr1, align 8
1042  store i64 %conv1, ptr %addr2, align 8
1043  store i64 %conv1, ptr %addr3, align 8
1044  ret void
1045}
1046
1047define void @multiple_store_32(double %m, ptr %addr1, ptr %addr2, ptr %addr3) {
1048; CHECK-LABEL: multiple_store_32:
1049; CHECK:       # %bb.0: # %entry
1050; CHECK-NEXT:    xscvdpsxws 0, 1
1051; CHECK-NEXT:    stfiwx 0, 0, 4
1052; CHECK-NEXT:    stfiwx 0, 0, 5
1053; CHECK-NEXT:    stfiwx 0, 0, 6
1054; CHECK-NEXT:    blr
1055;
1056; CHECK-PWR8-LABEL: multiple_store_32:
1057; CHECK-PWR8:       # %bb.0: # %entry
1058; CHECK-PWR8-NEXT:    xscvdpsxws 0, 1
1059; CHECK-PWR8-NEXT:    stfiwx 0, 0, 4
1060; CHECK-PWR8-NEXT:    stfiwx 0, 0, 5
1061; CHECK-PWR8-NEXT:    stfiwx 0, 0, 6
1062; CHECK-PWR8-NEXT:    blr
1063entry:
1064  %conv1 = fptosi double %m to i32
1065  store i32 %conv1, ptr %addr1, align 8
1066  store i32 %conv1, ptr %addr2, align 8
1067  store i32 %conv1, ptr %addr3, align 8
1068  ret void
1069}
1070
1071define void @multiple_store_16(double %m, ptr %addr1, ptr %addr2, ptr %addr3) {
1072; CHECK-LABEL: multiple_store_16:
1073; CHECK:       # %bb.0: # %entry
1074; CHECK-NEXT:    xscvdpsxds 0, 1
1075; CHECK-NEXT:    stxsihx 0, 0, 4
1076; CHECK-NEXT:    stxsihx 0, 0, 5
1077; CHECK-NEXT:    stxsihx 0, 0, 6
1078; CHECK-NEXT:    blr
1079;
1080; CHECK-PWR8-LABEL: multiple_store_16:
1081; CHECK-PWR8:       # %bb.0: # %entry
1082; CHECK-PWR8-NEXT:    xscvdpsxws 0, 1
1083; CHECK-PWR8-NEXT:    mffprwz 3, 0
1084; CHECK-PWR8-NEXT:    sth 3, 0(4)
1085; CHECK-PWR8-NEXT:    sth 3, 0(5)
1086; CHECK-PWR8-NEXT:    sth 3, 0(6)
1087; CHECK-PWR8-NEXT:    blr
1088entry:
1089  %conv1 = fptosi double %m to i16
1090  store i16 %conv1, ptr %addr1, align 8
1091  store i16 %conv1, ptr %addr2, align 8
1092  store i16 %conv1, ptr %addr3, align 8
1093  ret void
1094}
1095