ac41e8c277005e04261d1281b8a57a5016bd0c91
[oota-llvm.git] / test / CodeGen / PowerPC / fast-isel-conversion-p5.ll
1 ; 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
5 define void @sitofp_double_i32(i32 %a, double %b) nounwind ssp {
6 entry:
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
17 define void @sitofp_double_i64(i64 %a, double %b) nounwind ssp {
18 entry:
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
29 define void @sitofp_double_i16(i16 %a, double %b) nounwind ssp {
30 entry:
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
42 define void @sitofp_double_i8(i8 %a, double %b) nounwind ssp {
43 entry:
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
57 define void @fptosi_float_i32(float %a) nounwind ssp {
58 entry:
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
69 define void @fptosi_float_i64(float %a) nounwind ssp {
70 entry:
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
81 define void @fptosi_double_i32(double %a) nounwind ssp {
82 entry:
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
93 define void @fptosi_double_i64(double %a) nounwind ssp {
94 entry:
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
107 define void @fptoui_float_i32(float %a) nounwind ssp {
108 entry:
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
119 define void @fptoui_double_i32(double %a) nounwind ssp {
120 entry:
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