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