blob: ac41e8c277005e04261d1281b8a57a5016bd0c91 [file] [log] [blame]
Bill Schmidtff9622e2014-03-18 14:32:50 +00001; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr5 | FileCheck %s --check-prefix=ELF64
2
3; Test sitofp
4
5define void @sitofp_double_i32(i32 %a, double %b) nounwind ssp {
6entry:
7; ELF64: sitofp_double_i32
8 %b.addr = alloca double, align 8
9 %conv = sitofp i32 %a to double
10; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1)
11; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1)
12; ELF64: fcfid
13 store double %conv, double* %b.addr, align 8
14 ret void
15}
16
17define void @sitofp_double_i64(i64 %a, double %b) nounwind ssp {
18entry:
19; ELF64: sitofp_double_i64
20 %b.addr = alloca double, align 8
21 %conv = sitofp i64 %a to double
22; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1)
23; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1)
24; ELF64: fcfid
25 store double %conv, double* %b.addr, align 8
26 ret void
27}
28
29define void @sitofp_double_i16(i16 %a, double %b) nounwind ssp {
30entry:
31; ELF64: sitofp_double_i16
32 %b.addr = alloca double, align 8
33 %conv = sitofp i16 %a to double
34; ELF64: extsh
35; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1)
36; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1)
37; ELF64: fcfid
38 store double %conv, double* %b.addr, align 8
39 ret void
40}
41
42define void @sitofp_double_i8(i8 %a, double %b) nounwind ssp {
43entry:
44; ELF64: sitofp_double_i8
45 %b.addr = alloca double, align 8
46 %conv = sitofp i8 %a to double
47; ELF64: extsb
48; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1)
49; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1)
50; ELF64: fcfid
51 store double %conv, double* %b.addr, align 8
52 ret void
53}
54
55; Test fptosi
56
57define void @fptosi_float_i32(float %a) nounwind ssp {
58entry:
59; ELF64: fptosi_float_i32
60 %b.addr = alloca i32, align 4
61 %conv = fptosi float %a to i32
62; ELF64: fctiwz
63; ELF64: stfd
64; ELF64: lwa
65 store i32 %conv, i32* %b.addr, align 4
66 ret void
67}
68
69define void @fptosi_float_i64(float %a) nounwind ssp {
70entry:
71; ELF64: fptosi_float_i64
72 %b.addr = alloca i64, align 4
73 %conv = fptosi float %a to i64
74; ELF64: fctidz
75; ELF64: stfd
76; ELF64: ld
77 store i64 %conv, i64* %b.addr, align 4
78 ret void
79}
80
81define void @fptosi_double_i32(double %a) nounwind ssp {
82entry:
83; ELF64: fptosi_double_i32
84 %b.addr = alloca i32, align 8
85 %conv = fptosi double %a to i32
86; ELF64: fctiwz
87; ELF64: stfd
88; ELF64: lwa
89 store i32 %conv, i32* %b.addr, align 8
90 ret void
91}
92
93define void @fptosi_double_i64(double %a) nounwind ssp {
94entry:
95; ELF64: fptosi_double_i64
96 %b.addr = alloca i64, align 8
97 %conv = fptosi double %a to i64
98; ELF64: fctidz
99; ELF64: stfd
100; ELF64: ld
101 store i64 %conv, i64* %b.addr, align 8
102 ret void
103}
104
105; Test fptoui
106
107define void @fptoui_float_i32(float %a) nounwind ssp {
108entry:
109; ELF64: fptoui_float_i32
110 %b.addr = alloca i32, align 4
111 %conv = fptoui float %a to i32
112; ELF64: fctidz
113; ELF64: stfd
114; ELF64: lwz
115 store i32 %conv, i32* %b.addr, align 4
116 ret void
117}
118
Bill Schmidtff9622e2014-03-18 14:32:50 +0000119define void @fptoui_double_i32(double %a) nounwind ssp {
120entry:
121; ELF64: fptoui_double_i32
122 %b.addr = alloca i32, align 8
123 %conv = fptoui double %a to i32
124; ELF64: fctidz
125; ELF64: stfd
126; ELF64: lwz
127 store i32 %conv, i32* %b.addr, align 8
128 ret void
129}
130