Do not try to use i8 and i16 versions of FP_TO_U/SINT soft float library calls
[oota-llvm.git] / test / CodeGen / X86 / soft-sitofp.ll
1 ; RUN: llc -mtriple=i386-pc-linux < %s | FileCheck %s
2 ; RUN: llc -mtriple=x86_64-pc-linux < %s | FileCheck %s
3
4 ; Function Attrs: nounwind
5 ; CHECK-LABEL: s64_to_d:
6 ; CHECK: call{{l|q}} __floatdidf
7 define double @s64_to_d(i64 %n) #0 {
8 entry:
9   %conv = sitofp i64 %n to double
10   ret double %conv
11 }
12
13 ; CHECK-LABEL: s64_to_f:
14 ; CHECK: call{{l|q}} __floatdisf
15 define float @s64_to_f(i64 %n) #0 {
16 entry:
17   %conv = sitofp i64 %n to float
18   ret float %conv
19 }
20
21 ; CHECK-LABEL: s32_to_d:
22 ; CHECK: call{{l|q}} __floatsidf
23 define double @s32_to_d(i32 %n) #0 {
24 entry:
25   %conv = sitofp i32 %n to double
26   ret double %conv
27 }
28
29 ; CHECK-LABEL: s32_to_f:
30 ; CHECK: call{{l|q}} __floatsisf
31 define float @s32_to_f(i32 %n) #0 {
32 entry:
33   %conv = sitofp i32 %n to float
34   ret float %conv
35 }
36
37 ; CHECK-LABEL: u64_to_d:
38 ; CHECK: call{{l|q}} __floatundidf
39 define double @u64_to_d(i64 %n) #0 {
40 entry:
41   %conv = uitofp i64 %n to double
42   ret double %conv
43 }
44
45 ; CHECK-LABEL: u64_to_f:
46 ; CHECK: call{{l|q}} __floatundisf
47 define float @u64_to_f(i64 %n) #0 {
48 entry:
49   %conv = uitofp i64 %n to float
50   ret float %conv
51 }
52
53 ; CHECK-LABEL: u32_to_d:
54 ; CHECK: call{{l|q}} __floatunsidf
55 define double @u32_to_d(i32 %n) #0 {
56 entry:
57   %conv = uitofp i32 %n to double
58   ret double %conv
59 }
60
61 ; CHECK-LABEL: u32_to_f:
62 ; CHECK: call{{l|q}} __floatunsisf
63 define float @u32_to_f(i32 %n) #0 {
64 entry:
65   %conv = uitofp i32 %n to float
66   ret float %conv
67 }
68
69 ; CHECK-LABEL: d_to_s64:
70 ; CHECK: call{{l|q}} __fixdfdi
71 define i64 @d_to_s64(double %n) #0 {
72 entry:
73   %conv = fptosi double %n to i64
74   ret i64 %conv
75 }
76
77 ; CHECK-LABEL: d_to_s32:
78 ; CHECK: call{{l|q}} __fixdfsi
79 define i32 @d_to_s32(double %n) #0 {
80 entry:
81   %conv = fptosi double %n to i32
82   ret i32 %conv
83 }
84
85 ; CHECK-LABEL: f_to_s64:
86 ; CHECK: call{{l|q}} __fixsfdi
87 define i64 @f_to_s64(float %n) #0 {
88 entry:
89   %conv = fptosi float %n to i64
90   ret i64 %conv
91 }
92
93 ; CHECK-LABEL: f_to_s32:
94 ; CHECK: call{{l|q}} __fixsfsi
95 define i32 @f_to_s32(float %n) #0 {
96 entry:
97   %conv = fptosi float %n to i32
98   ret i32 %conv
99 }
100
101 ; CHECK-LABEL: d_to_u64:
102 ; CHECK: call{{l|q}} __fixunsdfdi
103 define i64 @d_to_u64(double %n) #0 {
104 entry:
105   %conv = fptoui double %n to i64
106   ret i64 %conv
107 }
108
109 ; CHECK-LABEL: d_to_u32:
110 ; CHECK: call{{l|q}} __fixunsdfsi
111 define i32 @d_to_u32(double %n) #0 {
112 entry:
113   %conv = fptoui double %n to i32
114   ret i32 %conv
115 }
116
117 ; CHECK-LABEL: f_to_u64:
118 ; CHECK: call{{l|q}} __fixunssfdi
119 define i64 @f_to_u64(float %n) #0 {
120 entry:
121   %conv = fptoui float %n to i64
122   ret i64 %conv
123 }
124
125 ; CHECK-LABEL: f_to_u32:
126 ; CHECK: call{{l|q}} __fixunssfsi
127 define i32 @f_to_u32(float %n) #0 {
128 entry:
129   %conv = fptoui float %n to i32
130   ret i32 %conv
131 }
132
133 ; CHECK-LABEL: f_to_s8:
134 ; CHECK: call{{l|q}} __fixsfsi
135 define i8 @f_to_s8(float %f, i8 %i) #0 {
136 entry:
137   %conv = fptosi float %f to i8
138   %add = add i8 %conv, %i
139   ret i8 %add
140 }
141
142 ; CHECK-LABEL: f_to_u8:
143 ; CHECK: call{{l|q}} __fixunssfsi
144 define i8 @f_to_u8(float %f, i8 %i) #0 {
145 entry:
146   %conv = fptoui float %f to i8
147   %add = add i8 %conv, %i
148   ret i8 %add
149 }
150
151 ; CHECK-LABEL: f_to_s16:
152 ; CHECK: call{{l|q}} __fixsfsi
153 define i16 @f_to_s16(float %f, i16 %i) #0 {
154 entry:
155   %conv = fptosi float %f to i16
156   %add = add i16 %conv, %i
157   ret i16 %add
158 }
159
160 ; CHECK-LABEL: f_to_u16:
161 ; CHECK: call{{l|q}} __fixunssfsi
162 define i16 @f_to_u16(float %f, i16 %i) #0 {
163 entry:
164   %conv = fptoui float %f to i16
165   %add = add i16 %conv, %i
166   ret i16 %add
167 }
168
169 attributes #0 = { nounwind "use-soft-float"="true" }