| Davide Italiano | c8a7913 | 2015-11-03 20:32:23 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -instcombine -S | FileCheck %s |
| 2 | |
| Sanjay Patel | 6002e78 | 2016-01-12 17:30:37 +0000 | [diff] [blame] | 3 | define double @pow_exp(double %x, double %y) { |
| 4 | %call = call fast double @exp(double %x) nounwind readnone |
| Sanjay Patel | 71e550f | 2016-01-12 16:50:17 +0000 | [diff] [blame] | 5 | %pow = call fast double @llvm.pow.f64(double %call, double %y) |
| 6 | ret double %pow |
| 7 | } |
| 8 | |
| 9 | ; CHECK-LABEL: define double @pow_exp( |
| 10 | ; CHECK-NEXT: %mul = fmul fast double %x, %y |
| 11 | ; CHECK-NEXT: %exp = call fast double @exp(double %mul) |
| 12 | ; CHECK-NEXT: ret double %exp |
| 13 | |
| Sanjay Patel | 6002e78 | 2016-01-12 17:30:37 +0000 | [diff] [blame] | 14 | define double @pow_exp2(double %x, double %y) { |
| 15 | %call = call fast double @exp2(double %x) nounwind readnone |
| Sanjay Patel | dc19b8d | 2016-01-12 17:00:38 +0000 | [diff] [blame] | 16 | %pow = call fast double @llvm.pow.f64(double %call, double %y) |
| 17 | ret double %pow |
| 18 | } |
| 19 | |
| 20 | ; CHECK-LABEL: define double @pow_exp2( |
| 21 | ; CHECK-NEXT: %mul = fmul fast double %x, %y |
| 22 | ; CHECK-NEXT: %exp2 = call fast double @exp2(double %mul) |
| 23 | ; CHECK-NEXT: ret double %exp2 |
| 24 | |
| Sanjay Patel | 6002e78 | 2016-01-12 17:30:37 +0000 | [diff] [blame] | 25 | define double @pow_exp_not_fast(double %x, double %y) { |
| Davide Italiano | c8a7913 | 2015-11-03 20:32:23 +0000 | [diff] [blame] | 26 | %call = call double @exp(double %x) |
| Sanjay Patel | 71e550f | 2016-01-12 16:50:17 +0000 | [diff] [blame] | 27 | %pow = call fast double @llvm.pow.f64(double %call, double %y) |
| Davide Italiano | c8a7913 | 2015-11-03 20:32:23 +0000 | [diff] [blame] | 28 | ret double %pow |
| 29 | } |
| 30 | |
| Sanjay Patel | 71e550f | 2016-01-12 16:50:17 +0000 | [diff] [blame] | 31 | ; CHECK-LABEL: define double @pow_exp_not_fast( |
| 32 | ; CHECK-NEXT: %call = call double @exp(double %x) |
| Sanjay Patel | 6002e78 | 2016-01-12 17:30:37 +0000 | [diff] [blame] | 33 | ; CHECK-NEXT: %pow = call fast double @llvm.pow.f64(double %call, double %y) |
| 34 | ; CHECK-NEXT: ret double %pow |
| Davide Italiano | c8a7913 | 2015-11-03 20:32:23 +0000 | [diff] [blame] | 35 | |
| Sanjay Patel | 6002e78 | 2016-01-12 17:30:37 +0000 | [diff] [blame] | 36 | define double @function_pointer(double ()* %fptr, double %p1) { |
| Sanjay Patel | 71e550f | 2016-01-12 16:50:17 +0000 | [diff] [blame] | 37 | %call1 = call fast double %fptr() |
| 38 | %pow = call fast double @llvm.pow.f64(double %call1, double %p1) |
| Benjamin Kramer | fb419e7 | 2015-11-26 09:51:17 +0000 | [diff] [blame] | 39 | ret double %pow |
| 40 | } |
| 41 | |
| Sanjay Patel | 71e550f | 2016-01-12 16:50:17 +0000 | [diff] [blame] | 42 | ; CHECK-LABEL: @function_pointer |
| 43 | ; CHECK-NEXT: %call1 = call fast double %fptr() |
| 44 | ; CHECK-NEXT: %pow = call fast double @llvm.pow.f64(double %call1, double %p1) |
| Benjamin Kramer | fb419e7 | 2015-11-26 09:51:17 +0000 | [diff] [blame] | 45 | |
| Sanjay Patel | 71e550f | 2016-01-12 16:50:17 +0000 | [diff] [blame] | 46 | declare double @exp(double) |
| Sanjay Patel | dc19b8d | 2016-01-12 17:00:38 +0000 | [diff] [blame] | 47 | declare double @exp2(double) |
| Davide Italiano | c8a7913 | 2015-11-03 20:32:23 +0000 | [diff] [blame] | 48 | declare double @llvm.pow.f64(double, double) |
| Sanjay Patel | 71e550f | 2016-01-12 16:50:17 +0000 | [diff] [blame] | 49 | |