1 ; RUN: opt -mtriple msp430 -instcombine -S < %s | FileCheck %s
3 ; Test case was copied from pow_fp_int.ll but adjusted for 16-bit int.
4 ; Assuming that we can't generate test checks for the same reason (PR42740).
6 define double @pow_sitofp_const_base_fast(i16 %x) {
7 ; CHECK-LABEL: @pow_sitofp_const_base_fast(
8 ; CHECK-NEXT: [[TMP1:%.*]] = call afn float @llvm.powi.f32.i16(float 7.000000e+00, i16 [[X:%.*]])
9 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[TMP1]] to double
10 ; CHECK-NEXT: ret double [[RES]]
12 %subfp = sitofp i16 %x to float
13 %pow = tail call afn float @llvm.pow.f32(float 7.000000e+00, float %subfp)
14 %res = fpext float %pow to double
18 define double @pow_uitofp_const_base_fast(i15 %x) {
19 ; CHECK-LABEL: @pow_uitofp_const_base_fast(
20 ; CHECK-NEXT: [[TMP1:%.*]] = zext i15 [[X:%.*]] to i16
21 ; CHECK-NEXT: [[TMP2:%.*]] = call afn float @llvm.powi.f32.i16(float 7.000000e+00, i16 [[TMP1]])
22 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[TMP2]] to double
23 ; CHECK-NEXT: ret double [[RES]]
25 %subfp = uitofp i15 %x to float
26 %pow = tail call afn float @llvm.pow.f32(float 7.000000e+00, float %subfp)
27 %res = fpext float %pow to double
31 define double @pow_sitofp_double_const_base_fast(i16 %x) {
32 ; CHECK-LABEL: @pow_sitofp_double_const_base_fast(
33 ; CHECK-NEXT: [[TMP1:%.*]] = call afn double @llvm.powi.f64.i16(double 7.000000e+00, i16 [[X:%.*]])
34 ; CHECK-NEXT: ret double [[TMP1]]
36 %subfp = sitofp i16 %x to double
37 %pow = tail call afn double @llvm.pow.f64(double 7.000000e+00, double %subfp)
41 define double @pow_uitofp_double_const_base_fast(i15 %x) {
42 ; CHECK-LABEL: @pow_uitofp_double_const_base_fast(
43 ; CHECK-NEXT: [[TMP1:%.*]] = zext i15 [[X:%.*]] to i16
44 ; CHECK-NEXT: [[TMP2:%.*]] = call afn double @llvm.powi.f64.i16(double 7.000000e+00, i16 [[TMP1]])
45 ; CHECK-NEXT: ret double [[TMP2]]
47 %subfp = uitofp i15 %x to double
48 %pow = tail call afn double @llvm.pow.f64(double 7.000000e+00, double %subfp)
52 define double @pow_sitofp_double_const_base_2_fast(i16 %x) {
53 ; CHECK-LABEL: @pow_sitofp_double_const_base_2_fast(
54 ; CHECK-NEXT: [[LDEXPF:%.*]] = call afn float @ldexpf(float 1.000000e+00, i16 [[X:%.*]])
55 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[LDEXPF]] to double
56 ; CHECK-NEXT: ret double [[RES]]
58 %subfp = sitofp i16 %x to float
59 %pow = tail call afn float @llvm.pow.f32(float 2.000000e+00, float %subfp)
60 %res = fpext float %pow to double
64 define double @pow_sitofp_double_const_base_power_of_2_fast(i16 %x) {
65 ; CHECK-LABEL: @pow_sitofp_double_const_base_power_of_2_fast(
66 ; CHECK-NEXT: [[SUBFP:%.*]] = sitofp i16 [[X:%.*]] to float
67 ; CHECK-NEXT: [[MUL:%.*]] = fmul afn float [[SUBFP]], 4.000000e+00
68 ; CHECK-NEXT: [[EXP2:%.*]] = call afn float @llvm.exp2.f32(float [[MUL]])
69 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[EXP2]] to double
70 ; CHECK-NEXT: ret double [[RES]]
72 %subfp = sitofp i16 %x to float
73 %pow = tail call afn float @llvm.pow.f32(float 16.000000e+00, float %subfp)
74 %res = fpext float %pow to double
78 define double @pow_uitofp_const_base_2_fast(i15 %x) {
79 ; CHECK-LABEL: @pow_uitofp_const_base_2_fast(
80 ; CHECK-NEXT: [[TMP1:%.*]] = zext i15 [[X:%.*]] to i16
81 ; CHECK-NEXT: [[LDEXPF:%.*]] = call afn float @ldexpf(float 1.000000e+00, i16 [[TMP1]])
82 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[LDEXPF]] to double
83 ; CHECK-NEXT: ret double [[RES]]
85 %subfp = uitofp i15 %x to float
86 %pow = tail call afn float @llvm.pow.f32(float 2.000000e+00, float %subfp)
87 %res = fpext float %pow to double
91 define double @pow_uitofp_const_base_power_of_2_fast(i15 %x) {
92 ; CHECK-LABEL: @pow_uitofp_const_base_power_of_2_fast(
93 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i15 [[X:%.*]] to float
94 ; CHECK-NEXT: [[MUL:%.*]] = fmul afn float [[SUBFP]], 4.000000e+00
95 ; CHECK-NEXT: [[EXP2:%.*]] = call afn float @llvm.exp2.f32(float [[MUL]])
96 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[EXP2]] to double
97 ; CHECK-NEXT: ret double [[RES]]
99 %subfp = uitofp i15 %x to float
100 %pow = tail call afn float @llvm.pow.f32(float 16.000000e+00, float %subfp)
101 %res = fpext float %pow to double
105 define double @pow_sitofp_float_base_fast(float %base, i16 %x) {
106 ; CHECK-LABEL: @pow_sitofp_float_base_fast(
107 ; CHECK-NEXT: [[TMP1:%.*]] = call afn float @llvm.powi.f32.i16(float [[BASE:%.*]], i16 [[X:%.*]])
108 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[TMP1]] to double
109 ; CHECK-NEXT: ret double [[RES]]
111 %subfp = sitofp i16 %x to float
112 %pow = tail call afn float @llvm.pow.f32(float %base, float %subfp)
113 %res = fpext float %pow to double
117 define double @pow_uitofp_float_base_fast(float %base, i15 %x) {
118 ; CHECK-LABEL: @pow_uitofp_float_base_fast(
119 ; CHECK-NEXT: [[TMP1:%.*]] = zext i15 [[X:%.*]] to i16
120 ; CHECK-NEXT: [[TMP2:%.*]] = call afn float @llvm.powi.f32.i16(float [[BASE:%.*]], i16 [[TMP1]])
121 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[TMP2]] to double
122 ; CHECK-NEXT: ret double [[RES]]
124 %subfp = uitofp i15 %x to float
125 %pow = tail call afn float @llvm.pow.f32(float %base, float %subfp)
126 %res = fpext float %pow to double
130 define double @pow_sitofp_double_base_fast(double %base, i16 %x) {
131 ; CHECK-LABEL: @pow_sitofp_double_base_fast(
132 ; CHECK-NEXT: [[TMP1:%.*]] = call afn double @llvm.powi.f64.i16(double [[BASE:%.*]], i16 [[X:%.*]])
133 ; CHECK-NEXT: ret double [[TMP1]]
135 %subfp = sitofp i16 %x to double
136 %res = tail call afn double @llvm.pow.f64(double %base, double %subfp)
140 define double @pow_uitofp_double_base_fast(double %base, i15 %x) {
141 ; CHECK-LABEL: @pow_uitofp_double_base_fast(
142 ; CHECK-NEXT: [[TMP1:%.*]] = zext i15 [[X:%.*]] to i16
143 ; CHECK-NEXT: [[TMP2:%.*]] = call afn double @llvm.powi.f64.i16(double [[BASE:%.*]], i16 [[TMP1]])
144 ; CHECK-NEXT: ret double [[TMP2]]
146 %subfp = uitofp i15 %x to double
147 %res = tail call afn double @llvm.pow.f64(double %base, double %subfp)
151 define double @pow_sitofp_const_base_fast_i8(i8 %x) {
152 ; CHECK-LABEL: @pow_sitofp_const_base_fast_i8(
153 ; CHECK-NEXT: [[TMP1:%.*]] = sext i8 [[X:%.*]] to i16
154 ; CHECK-NEXT: [[TMP2:%.*]] = call afn float @llvm.powi.f32.i16(float 7.000000e+00, i16 [[TMP1]])
155 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[TMP2]] to double
156 ; CHECK-NEXT: ret double [[RES]]
158 %subfp = sitofp i8 %x to float
159 %pow = tail call afn float @llvm.pow.f32(float 7.000000e+00, float %subfp)
160 %res = fpext float %pow to double
164 define double @pow_sitofp_const_base_fast_i16(i16 %x) {
165 ; CHECK-LABEL: @pow_sitofp_const_base_fast_i16(
166 ; CHECK-NEXT: [[TMP1:%.*]] = call afn float @llvm.powi.f32.i16(float 7.000000e+00, i16 [[X:%.*]])
167 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[TMP1]] to double
168 ; CHECK-NEXT: ret double [[RES]]
170 %subfp = sitofp i16 %x to float
171 %pow = tail call afn float @llvm.pow.f32(float 7.000000e+00, float %subfp)
172 %res = fpext float %pow to double
177 define double @pow_uitofp_const_base_fast_i8(i8 %x) {
178 ; CHECK-LABEL: @pow_uitofp_const_base_fast_i8(
179 ; CHECK-NEXT: [[TMP1:%.*]] = zext i8 [[X:%.*]] to i16
180 ; CHECK-NEXT: [[TMP2:%.*]] = call afn float @llvm.powi.f32.i16(float 7.000000e+00, i16 [[TMP1]])
181 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[TMP2]] to double
182 ; CHECK-NEXT: ret double [[RES]]
184 %subfp = uitofp i8 %x to float
185 %pow = tail call afn float @llvm.pow.f32(float 7.000000e+00, float %subfp)
186 %res = fpext float %pow to double
190 define double @pow_uitofp_const_base_afn_i16(i16 %x) {
191 ; CHECK-LABEL: @pow_uitofp_const_base_afn_i16(
192 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to float
193 ; CHECK-NEXT: [[POW:%.*]] = tail call afn float @llvm.pow.f32(float 7.000000e+00, float [[SUBFP]])
194 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[POW]] to double
195 ; CHECK-NEXT: ret double [[RES]]
197 %subfp = uitofp i16 %x to float
198 %pow = tail call afn float @llvm.pow.f32(float 7.000000e+00, float %subfp)
199 %res = fpext float %pow to double
203 define double @powf_exp_const_int_fast(double %base) {
204 ; CHECK-LABEL: @powf_exp_const_int_fast(
205 ; CHECK-NEXT: [[TMP1:%.*]] = call fast double @llvm.powi.f64.i16(double [[BASE:%.*]], i16 40)
206 ; CHECK-NEXT: ret double [[TMP1]]
208 %res = tail call fast double @llvm.pow.f64(double %base, double 4.000000e+01)
212 define double @powf_exp_const2_int_fast(double %base) {
213 ; CHECK-LABEL: @powf_exp_const2_int_fast(
214 ; CHECK-NEXT: [[TMP1:%.*]] = call fast double @llvm.powi.f64.i16(double [[BASE:%.*]], i16 -40)
215 ; CHECK-NEXT: ret double [[TMP1]]
217 %res = tail call fast double @llvm.pow.f64(double %base, double -4.000000e+01)
223 define double @pow_uitofp_const_base_fast_i16(i16 %x) {
224 ; CHECK-LABEL: @pow_uitofp_const_base_fast_i16(
225 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to float
226 ; CHECK-NEXT: [[MUL:%.*]] = fmul fast float [[SUBFP]], 0x4006757{{.*}}
227 ; CHECK-NEXT: [[EXP2:%.*]] = call fast float @llvm.exp2.f32(float [[MUL]])
228 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[EXP2]] to double
229 ; CHECK-NEXT: ret double [[RES]]
231 %subfp = uitofp i16 %x to float
232 %pow = tail call fast float @llvm.pow.f32(float 7.000000e+00, float %subfp)
233 %res = fpext float %pow to double
237 define double @pow_uitofp_const_base_2_fast_i16(i16 %x) {
238 ; CHECK-LABEL: @pow_uitofp_const_base_2_fast_i16(
239 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to float
240 ; CHECK-NEXT: [[EXP2:%.*]] = call fast float @llvm.exp2.f32(float [[SUBFP]])
241 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[EXP2]] to double
242 ; CHECK-NEXT: ret double [[RES]]
244 %subfp = uitofp i16 %x to float
245 %pow = tail call fast float @llvm.pow.f32(float 2.000000e+00, float %subfp)
246 %res = fpext float %pow to double
250 define double @pow_uitofp_const_base_power_of_2_fast_i16(i16 %x) {
251 ; CHECK-LABEL: @pow_uitofp_const_base_power_of_2_fast_i16(
252 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to float
253 ; CHECK-NEXT: [[MUL:%.*]] = fmul fast float [[SUBFP]], 4.000000e+00
254 ; CHECK-NEXT: [[EXP2:%.*]] = call fast float @llvm.exp2.f32(float [[MUL]])
255 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[EXP2]] to double
256 ; CHECK-NEXT: ret double [[RES]]
258 %subfp = uitofp i16 %x to float
259 %pow = tail call fast float @llvm.pow.f32(float 16.000000e+00, float %subfp)
260 %res = fpext float %pow to double
264 define double @pow_uitofp_float_base_fast_i16(float %base, i16 %x) {
265 ; CHECK-LABEL: @pow_uitofp_float_base_fast_i16(
266 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to float
267 ; CHECK-NEXT: [[POW:%.*]] = tail call fast float @llvm.pow.f32(float [[BASE:%.*]], float [[SUBFP]])
268 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[POW]] to double
269 ; CHECK-NEXT: ret double [[RES]]
271 %subfp = uitofp i16 %x to float
272 %pow = tail call fast float @llvm.pow.f32(float %base, float %subfp)
273 %res = fpext float %pow to double
277 define double @pow_uitofp_double_base_fast_i16(double %base, i16 %x) {
278 ; CHECK-LABEL: @pow_uitofp_double_base_fast_i16(
279 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to double
280 ; CHECK-NEXT: [[RES:%.*]] = tail call fast double @llvm.pow.f64(double [[BASE:%.*]], double [[SUBFP]])
281 ; CHECK-NEXT: ret double [[RES]]
283 %subfp = uitofp i16 %x to double
284 %res = tail call fast double @llvm.pow.f64(double %base, double %subfp)
288 define double @pow_sitofp_const_base_no_fast(i16 %x) {
289 ; CHECK-LABEL: @pow_sitofp_const_base_no_fast(
290 ; CHECK-NEXT: [[SUBFP:%.*]] = sitofp i16 [[X:%.*]] to float
291 ; CHECK-NEXT: [[POW:%.*]] = tail call float @llvm.pow.f32(float 7.000000e+00, float [[SUBFP]])
292 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[POW]] to double
293 ; CHECK-NEXT: ret double [[RES]]
295 %subfp = sitofp i16 %x to float
296 %pow = tail call float @llvm.pow.f32(float 7.000000e+00, float %subfp)
297 %res = fpext float %pow to double
301 define double @pow_uitofp_const_base_no_fast(i16 %x) {
302 ; CHECK-LABEL: @pow_uitofp_const_base_no_fast(
303 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to float
304 ; CHECK-NEXT: [[POW:%.*]] = tail call float @llvm.pow.f32(float 7.000000e+00, float [[SUBFP]])
305 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[POW]] to double
306 ; CHECK-NEXT: ret double [[RES]]
308 %subfp = uitofp i16 %x to float
309 %pow = tail call float @llvm.pow.f32(float 7.000000e+00, float %subfp)
310 %res = fpext float %pow to double
314 define double @pow_sitofp_const_base_2_no_fast(i16 %x) {
315 ; CHECK-LABEL: @pow_sitofp_const_base_2_no_fast(
316 ; CHECK-NEXT: [[LDEXPF:%.*]] = call float @ldexpf(float 1.000000e+00, i16 [[X:%.*]])
317 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[LDEXPF]] to double
318 ; CHECK-NEXT: ret double [[RES]]
320 %subfp = sitofp i16 %x to float
321 %pow = tail call float @llvm.pow.f32(float 2.000000e+00, float %subfp)
322 %res = fpext float %pow to double
326 define double @pow_sitofp_const_base_power_of_2_no_fast(i16 %x) {
327 ; CHECK-LABEL: @pow_sitofp_const_base_power_of_2_no_fast(
328 ; CHECK-NEXT: [[SUBFP:%.*]] = sitofp i16 [[X:%.*]] to float
329 ; CHECK-NEXT: [[MUL:%.*]] = fmul float [[SUBFP]], 4.000000e+00
330 ; CHECK-NEXT: [[EXP2:%.*]] = call float @llvm.exp2.f32(float [[MUL]])
331 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[EXP2]] to double
332 ; CHECK-NEXT: ret double [[RES]]
334 %subfp = sitofp i16 %x to float
335 %pow = tail call float @llvm.pow.f32(float 16.000000e+00, float %subfp)
336 %res = fpext float %pow to double
340 define double @pow_uitofp_const_base_2_no_fast(i16 %x) {
341 ; CHECK-LABEL: @pow_uitofp_const_base_2_no_fast(
342 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to float
343 ; CHECK-NEXT: [[EXP2:%.*]] = call float @llvm.exp2.f32(float [[SUBFP]])
344 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[EXP2]] to double
345 ; CHECK-NEXT: ret double [[RES]]
347 %subfp = uitofp i16 %x to float
348 %pow = tail call float @llvm.pow.f32(float 2.000000e+00, float %subfp)
349 %res = fpext float %pow to double
353 define double @pow_uitofp_const_base_power_of_2_no_fast(i16 %x) {
354 ; CHECK-LABEL: @pow_uitofp_const_base_power_of_2_no_fast(
355 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to float
356 ; CHECK-NEXT: [[MUL:%.*]] = fmul float [[SUBFP]], 4.000000e+00
357 ; CHECK-NEXT: [[EXP2:%.*]] = call float @llvm.exp2.f32(float [[MUL]])
358 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[EXP2]] to double
359 ; CHECK-NEXT: ret double [[RES]]
361 %subfp = uitofp i16 %x to float
362 %pow = tail call float @llvm.pow.f32(float 16.000000e+00, float %subfp)
363 %res = fpext float %pow to double
367 define double @pow_sitofp_float_base_no_fast(float %base, i16 %x) {
368 ; CHECK-LABEL: @pow_sitofp_float_base_no_fast(
369 ; CHECK-NEXT: [[SUBFP:%.*]] = sitofp i16 [[X:%.*]] to float
370 ; CHECK-NEXT: [[POW:%.*]] = tail call float @llvm.pow.f32(float [[BASE:%.*]], float [[SUBFP]])
371 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[POW]] to double
372 ; CHECK-NEXT: ret double [[RES]]
374 %subfp = sitofp i16 %x to float
375 %pow = tail call float @llvm.pow.f32(float %base, float %subfp)
376 %res = fpext float %pow to double
380 define double @pow_uitofp_float_base_no_fast(float %base, i16 %x) {
381 ; CHECK-LABEL: @pow_uitofp_float_base_no_fast(
382 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to float
383 ; CHECK-NEXT: [[POW:%.*]] = tail call float @llvm.pow.f32(float [[BASE:%.*]], float [[SUBFP]])
384 ; CHECK-NEXT: [[RES:%.*]] = fpext float [[POW]] to double
385 ; CHECK-NEXT: ret double [[RES]]
387 %subfp = uitofp i16 %x to float
388 %pow = tail call float @llvm.pow.f32(float %base, float %subfp)
389 %res = fpext float %pow to double
393 define double @pow_sitofp_double_base_no_fast(double %base, i16 %x) {
394 ; CHECK-LABEL: @pow_sitofp_double_base_no_fast(
395 ; CHECK-NEXT: [[SUBFP:%.*]] = sitofp i16 [[X:%.*]] to double
396 ; CHECK-NEXT: [[POW:%.*]] = tail call double @llvm.pow.f64(double [[BASE:%.*]], double [[SUBFP]])
397 ; CHECK-NEXT: ret double [[POW]]
399 %subfp = sitofp i16 %x to double
400 %pow = tail call double @llvm.pow.f64(double %base, double %subfp)
404 define double @pow_uitofp_double_base_no_fast(double %base, i16 %x) {
405 ; CHECK-LABEL: @pow_uitofp_double_base_no_fast(
406 ; CHECK-NEXT: [[SUBFP:%.*]] = uitofp i16 [[X:%.*]] to double
407 ; CHECK-NEXT: [[POW:%.*]] = tail call double @llvm.pow.f64(double [[BASE:%.*]], double [[SUBFP]])
408 ; CHECK-NEXT: ret double [[POW]]
410 %subfp = uitofp i16 %x to double
411 %pow = tail call double @llvm.pow.f64(double %base, double %subfp)
415 define double @powf_exp_const_int_no_fast(double %base) {
416 ; CHECK-LABEL: @powf_exp_const_int_no_fast(
417 ; CHECK-NEXT: [[RES:%.*]] = tail call double @llvm.pow.f64(double [[BASE:%.*]], double 4.000000e+01)
418 ; CHECK-NEXT: ret double [[RES]]
420 %res = tail call double @llvm.pow.f64(double %base, double 4.000000e+01)
424 define double @powf_exp_const_not_int_fast(double %base) {
425 ; CHECK-LABEL: @powf_exp_const_not_int_fast(
426 ; CHECK-NEXT: [[RES:%.*]] = tail call fast double @llvm.pow.f64(double [[BASE:%.*]], double 3.750000e+01)
427 ; CHECK-NEXT: ret double [[RES]]
429 %res = tail call fast double @llvm.pow.f64(double %base, double 3.750000e+01)
433 define double @powf_exp_const_not_int_no_fast(double %base) {
434 ; CHECK-LABEL: @powf_exp_const_not_int_no_fast(
435 ; CHECK-NEXT: [[RES:%.*]] = tail call double @llvm.pow.f64(double [[BASE:%.*]], double 3.750000e+01)
436 ; CHECK-NEXT: ret double [[RES]]
438 %res = tail call double @llvm.pow.f64(double %base, double 3.750000e+01)
442 define double @powf_exp_const2_int_no_fast(double %base) {
443 ; CHECK-LABEL: @powf_exp_const2_int_no_fast(
444 ; CHECK-NEXT: [[RES:%.*]] = tail call double @llvm.pow.f64(double [[BASE:%.*]], double -4.000000e+01)
445 ; CHECK-NEXT: ret double [[RES]]
447 %res = tail call double @llvm.pow.f64(double %base, double -4.000000e+01)
451 declare float @llvm.pow.f32(float, float)
452 declare double @llvm.pow.f64(double, double)