diff options
| author | Chris Lattner <sabre@nondot.org> | 2007-01-15 06:27:37 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2007-01-15 06:27:37 +0000 |
| commit | 26933ddb10ce7d8f16bfccd7ddc8e1bf61c3376b (patch) | |
| tree | f4ce99f2378252d202da5dbeed0d4bfaa9cd9c36 | |
| parent | e76908ba81439441f1d0e104dc65ee7502509a5b (diff) | |
| download | bcm5719-llvm-26933ddb10ce7d8f16bfccd7ddc8e1bf61c3376b.tar.gz bcm5719-llvm-26933ddb10ce7d8f16bfccd7ddc8e1bf61c3376b.zip | |
Constant fold llvm.powi.*. This speeds up tramp3d--v4 by 9.5%
llvm-svn: 33229
| -rw-r--r-- | llvm/lib/Analysis/ConstantFolding.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index b4c41373cb8..46f9c577270 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -40,6 +40,8 @@ llvm::canConstantFoldCallTo(Function *F) { case Intrinsic::bswap_i16: case Intrinsic::bswap_i32: case Intrinsic::bswap_i64: + case Intrinsic::powi_f32: + case Intrinsic::powi_f64: // FIXME: these should be constant folded as well //case Intrinsic::ctpop_i8: //case Intrinsic::ctpop_i16: @@ -186,8 +188,17 @@ llvm::ConstantFoldCall(Function *F, const std::vector<Constant*> &Operands) { double V = fmod(Op1V, Op2V); if (errno == 0) return ConstantFP::get(Ty, V); - } else if (Name == "atan2") + } else if (Name == "atan2") { return ConstantFP::get(Ty, atan2(Op1V,Op2V)); + } + } else if (ConstantInt *Op2C = dyn_cast<ConstantInt>(Operands[1])) { + if (Name == "llvm.powi.f32") { + return ConstantFP::get(Ty, std::pow((float)Op1V, + (int)Op2C->getZExtValue())); + } else if (Name == "llvm.powi.f64") { + return ConstantFP::get(Ty, std::pow((double)Op1V, + (int)Op2C->getZExtValue())); + } } } } |

