blob: e4cdf8d7a9c3a399a4d18bf5a799d2d8349045aa [file] [log] [blame]
Mehdi Amini945a6602015-02-27 18:32:11 +00001; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr5 | FileCheck %s --check-prefix=ELF64
Bill Schmidtff9622e2014-03-18 14:32:50 +00002
3; Test sitofp
4
Eric Christopher1fb23392015-07-24 01:07:50 +00005define void @sitofp_double_i32(i32 %a, double %b) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +00006entry:
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
Eric Christopher1fb23392015-07-24 01:07:50 +000017define void @sitofp_double_i64(i64 %a, double %b) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +000018entry:
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
Eric Christopher1fb23392015-07-24 01:07:50 +000029define void @sitofp_double_i16(i16 %a, double %b) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +000030entry:
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
Eric Christopher1fb23392015-07-24 01:07:50 +000042define void @sitofp_double_i8(i8 %a, double %b) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +000043entry:
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
Eric Christopher1fb23392015-07-24 01:07:50 +000057define void @fptosi_float_i32(float %a) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +000058entry:
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
Eric Christopher1fb23392015-07-24 01:07:50 +000069define void @fptosi_float_i64(float %a) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +000070entry:
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
Eric Christopher1fb23392015-07-24 01:07:50 +000081define void @fptosi_double_i32(double %a) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +000082entry:
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
Eric Christopher1fb23392015-07-24 01:07:50 +000093define void @fptosi_double_i64(double %a) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +000094entry:
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
Eric Christopher1fb23392015-07-24 01:07:50 +0000107define void @fptoui_float_i32(float %a) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +0000108entry:
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
Eric Christopher1fb23392015-07-24 01:07:50 +0000119define void @fptoui_double_i32(double %a) nounwind {
Bill Schmidtff9622e2014-03-18 14:32:50 +0000120entry:
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