Whitespace.
[oota-llvm.git] / test / Transforms / SimplifyLibCalls / double-float-shrink.ll
1 ; RUN: opt  < %s -simplify-libcalls -enable-double-float-shrink -S | FileCheck %s
2
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
4 target triple = "x86_64-unknown-linux-gnu"
5
6 define float @acos_test(float %f) nounwind readnone {
7 ; CHECK: acos_test
8     %conv = fpext float %f to double
9     %call = call double @acos(double %conv)
10     %conv1 = fptrunc double %call to float
11     ret float %conv1
12 ; CHECK: call float @acosf(float %f)
13 }
14
15 define double @acos_test2(float %f) nounwind readnone {
16 ; CHECK: acos_test2
17     %conv = fpext float %f to double
18     %call = call double @acos(double %conv)
19     ret double %call
20 ; CHECK: call double @acos(double %conv)
21 }
22
23 define float @acosh_test(float %f) nounwind readnone {
24 ; CHECK: acosh_test
25     %conv = fpext float %f to double
26     %call = call double @acosh(double %conv)
27     %conv1 = fptrunc double %call to float
28     ret float %conv1
29 ; CHECK: call float @acoshf(float %f)
30 }
31
32 define double @acosh_test2(float %f) nounwind readnone {
33 ; CHECK: acosh_test2
34     %conv = fpext float %f to double
35     %call = call double @acosh(double %conv)
36     ret double %call
37 ; CHECK: call double @acosh(double %conv)
38 }
39
40 define float @asin_test(float %f) nounwind readnone {
41 ; CHECK: asin_test
42     %conv = fpext float %f to double
43     %call = call double @asin(double %conv)
44     %conv1 = fptrunc double %call to float
45     ret float %conv1
46 ; CHECK: call float @asinf(float %f)
47 }
48
49 define double @asin_test2(float %f) nounwind readnone {
50 ; CHECK: asin_test2
51     %conv = fpext float %f to double
52     %call = call double @asin(double %conv)
53     ret double %call
54 ; CHECK: call double @asin(double %conv)
55 }
56
57 define float @asinh_test(float %f) nounwind readnone {
58 ; CHECK: asinh_test
59     %conv = fpext float %f to double
60     %call = call double @asinh(double %conv)
61     %conv1 = fptrunc double %call to float
62     ret float %conv1
63 ; CHECK: call float @asinhf(float %f)
64 }
65
66 define double @asinh_test2(float %f) nounwind readnone {
67 ; CHECK: asinh_test2
68     %conv = fpext float %f to double
69     %call = call double @asinh(double %conv)
70     ret double %call
71 ; CHECK: call double @asinh(double %conv)
72 }
73
74 define float @atan_test(float %f) nounwind readnone {
75 ; CHECK: atan_test
76     %conv = fpext float %f to double
77     %call = call double @atan(double %conv)
78     %conv1 = fptrunc double %call to float
79     ret float %conv1
80 ; CHECK: call float @atanf(float %f)
81 }
82
83 define double @atan_test2(float %f) nounwind readnone {
84 ; CHECK: atan_test2
85     %conv = fpext float %f to double
86     %call = call double @atan(double %conv)
87     ret double %call
88 ; CHECK: call double @atan(double %conv)
89 }
90 define float @atanh_test(float %f) nounwind readnone {
91 ; CHECK: atanh_test
92     %conv = fpext float %f to double
93     %call = call double @atanh(double %conv)
94     %conv1 = fptrunc double %call to float
95     ret float %conv1
96 ; CHECK: call float @atanhf(float %f)
97 }
98
99 define double @atanh_test2(float %f) nounwind readnone {
100 ; CHECK: atanh_test2
101     %conv = fpext float %f to double
102     %call = call double @atanh(double %conv)
103     ret double %call
104 ; CHECK: call double @atanh(double %conv)
105 }
106 define float @cbrt_test(float %f) nounwind readnone {
107 ; CHECK: cbrt_test
108     %conv = fpext float %f to double
109     %call = call double @cbrt(double %conv)
110     %conv1 = fptrunc double %call to float
111     ret float %conv1
112 ; CHECK: call float @cbrtf(float %f)
113 }
114
115 define double @cbrt_test2(float %f) nounwind readnone {
116 ; CHECK: cbrt_test2
117     %conv = fpext float %f to double
118     %call = call double @cbrt(double %conv)
119     ret double %call
120 ; CHECK: call double @cbrt(double %conv)
121 }
122 define float @exp_test(float %f) nounwind readnone {
123 ; CHECK: exp_test
124     %conv = fpext float %f to double
125     %call = call double @exp(double %conv)
126     %conv1 = fptrunc double %call to float
127     ret float %conv1
128 ; CHECK: call float @expf(float %f)
129 }
130
131 define double @exp_test2(float %f) nounwind readnone {
132 ; CHECK: exp_test2
133     %conv = fpext float %f to double
134     %call = call double @exp(double %conv)
135     ret double %call
136 ; CHECK: call double @exp(double %conv)
137 }
138 define float @expm1_test(float %f) nounwind readnone {
139 ; CHECK: expm1_test
140     %conv = fpext float %f to double
141     %call = call double @expm1(double %conv)
142     %conv1 = fptrunc double %call to float
143     ret float %conv1
144 ; CHECK: call float @expm1f(float %f)
145 }
146
147 define double @expm1_test2(float %f) nounwind readnone {
148 ; CHECK: expm1_test2
149     %conv = fpext float %f to double
150     %call = call double @expm1(double %conv)
151     ret double %call
152 ; CHECK: call double @expm1(double %conv)
153 }
154 define float @exp10_test(float %f) nounwind readnone {
155 ; CHECK: exp10_test
156     %conv = fpext float %f to double
157     %call = call double @exp10(double %conv)
158     %conv1 = fptrunc double %call to float
159     ret float %conv1
160 ; CHECK: call float @exp10f(float %f)
161 }
162
163 define double @exp10_test2(float %f) nounwind readnone {
164 ; CHECK: exp10_test2
165     %conv = fpext float %f to double
166     %call = call double @exp10(double %conv)
167     ret double %call
168 ; CHECK: call double @exp10(double %conv)
169 }
170 define float @log_test(float %f) nounwind readnone {
171 ; CHECK: log_test
172     %conv = fpext float %f to double
173     %call = call double @log(double %conv)
174     %conv1 = fptrunc double %call to float
175     ret float %conv1
176 ; CHECK: call float @logf(float %f)
177 }
178
179 define double @log_test2(float %f) nounwind readnone {
180 ; CHECK: log_test2
181     %conv = fpext float %f to double
182     %call = call double @log(double %conv)
183     ret double %call
184 ; CHECK: call double @log(double %conv)
185 }
186 define float @log10_test(float %f) nounwind readnone {
187 ; CHECK: log10_test
188     %conv = fpext float %f to double
189     %call = call double @log10(double %conv)
190     %conv1 = fptrunc double %call to float
191     ret float %conv1
192 ; CHECK: call float @log10f(float %f)
193 }
194
195 define double @log10_test2(float %f) nounwind readnone {
196 ; CHECK: log10_test2
197     %conv = fpext float %f to double
198     %call = call double @log10(double %conv)
199     ret double %call
200 ; CHECK: call double @log10(double %conv)
201 }
202 define float @log1p_test(float %f) nounwind readnone {
203 ; CHECK: log1p_test
204     %conv = fpext float %f to double
205     %call = call double @log1p(double %conv)
206     %conv1 = fptrunc double %call to float
207     ret float %conv1
208 ; CHECK: call float @log1pf(float %f)
209 }
210
211 define double @log1p_test2(float %f) nounwind readnone {
212 ; CHECK: log1p_test2
213     %conv = fpext float %f to double
214     %call = call double @log1p(double %conv)
215     ret double %call
216 ; CHECK: call double @log1p(double %conv)
217 }
218 define float @log2_test(float %f) nounwind readnone {
219 ; CHECK: log2_test
220     %conv = fpext float %f to double
221     %call = call double @log2(double %conv)
222     %conv1 = fptrunc double %call to float
223     ret float %conv1
224 ; CHECK: call float @log2f(float %f)
225 }
226
227 define double @log2_test2(float %f) nounwind readnone {
228 ; CHECK: log2_test2
229     %conv = fpext float %f to double
230     %call = call double @log2(double %conv)
231     ret double %call
232 ; CHECK: call double @log2(double %conv)
233 }
234 define float @logb_test(float %f) nounwind readnone {
235 ; CHECK: logb_test
236     %conv = fpext float %f to double
237     %call = call double @logb(double %conv)
238     %conv1 = fptrunc double %call to float
239     ret float %conv1
240 ; CHECK: call float @logbf(float %f)
241 }
242
243 define double @logb_test2(float %f) nounwind readnone {
244 ; CHECK: logb_test2
245     %conv = fpext float %f to double
246     %call = call double @logb(double %conv)
247     ret double %call
248 ; CHECK: call double @logb(double %conv)
249 }
250 define float @sin_test(float %f) nounwind readnone {
251 ; CHECK: sin_test
252     %conv = fpext float %f to double
253     %call = call double @sin(double %conv)
254     %conv1 = fptrunc double %call to float
255     ret float %conv1
256 ; CHECK: call float @sinf(float %f)
257 }
258
259 define double @sin_test2(float %f) nounwind readnone {
260 ; CHECK: sin_test2
261     %conv = fpext float %f to double
262     %call = call double @sin(double %conv)
263     ret double %call
264 ; CHECK: call double @sin(double %conv)
265 }
266 define float @sqrt_test(float %f) nounwind readnone {
267 ; CHECK: sqrt_test
268     %conv = fpext float %f to double
269     %call = call double @sqrt(double %conv)
270     %conv1 = fptrunc double %call to float
271     ret float %conv1
272 ; CHECK: call float @sqrtf(float %f)
273 }
274
275 define double @sqrt_test2(float %f) nounwind readnone {
276 ; CHECK: sqrt_test2
277     %conv = fpext float %f to double
278     %call = call double @sqrt(double %conv)
279     ret double %call
280 ; CHECK: call double @sqrt(double %conv)
281 }
282 define float @tan_test(float %f) nounwind readnone {
283 ; CHECK: tan_test
284     %conv = fpext float %f to double
285     %call = call double @tan(double %conv)
286     %conv1 = fptrunc double %call to float
287     ret float %conv1
288 ; CHECK: call float @tanf(float %f)
289 }
290
291 define double @tan_test2(float %f) nounwind readnone {
292 ; CHECK: tan_test2
293     %conv = fpext float %f to double
294     %call = call double @tan(double %conv)
295     ret double %call
296 ; CHECK: call double @tan(double %conv)
297 }
298 define float @tanh_test(float %f) nounwind readnone {
299 ; CHECK: tanh_test
300     %conv = fpext float %f to double
301     %call = call double @tanh(double %conv)
302     %conv1 = fptrunc double %call to float
303     ret float %conv1
304 ; CHECK: call float @tanhf(float %f)
305 }
306
307 define double @tanh_test2(float %f) nounwind readnone {
308 ; CHECK: tanh_test2
309     %conv = fpext float %f to double
310     %call = call double @tanh(double %conv)
311     ret double %call
312 ; CHECK: call double @tanh(double %conv)
313 }
314
315 declare double @tanh(double) nounwind readnone
316 declare double @tan(double) nounwind readnone
317 declare double @sqrt(double) nounwind readnone
318 declare double @sin(double) nounwind readnone
319 declare double @log2(double) nounwind readnone
320 declare double @log1p(double) nounwind readnone
321 declare double @log10(double) nounwind readnone
322 declare double @log(double) nounwind readnone
323 declare double @logb(double) nounwind readnone
324 declare double @exp10(double) nounwind readnone
325 declare double @expm1(double) nounwind readnone
326 declare double @exp(double) nounwind readnone
327 declare double @cbrt(double) nounwind readnone
328 declare double @atanh(double) nounwind readnone
329 declare double @atan(double) nounwind readnone
330 declare double @acos(double) nounwind readnone
331 declare double @acosh(double) nounwind readnone
332 declare double @asin(double) nounwind readnone
333 declare double @asinh(double) nounwind readnone