Rewrite sqrt and powi to use anyfloat. By popular demand.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42537 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dale Johannesen
2007-10-02 17:43:59 +00:00
parent f091568375
commit 9ab7fb3ba4
5 changed files with 38 additions and 67 deletions

View File

@@ -329,16 +329,8 @@ Constant *llvm::ConstantFoldLoadThroughGEPConstantExpr(Constant *C,
bool
llvm::canConstantFoldCallTo(Function *F) {
switch (F->getIntrinsicID()) {
case Intrinsic::sqrt_f32:
case Intrinsic::sqrt_f64:
case Intrinsic::sqrt_f80:
case Intrinsic::sqrt_f128:
case Intrinsic::sqrt_ppcf128:
case Intrinsic::powi_f32:
case Intrinsic::powi_f64:
case Intrinsic::powi_f80:
case Intrinsic::powi_f128:
case Intrinsic::powi_ppcf128:
case Intrinsic::sqrt:
case Intrinsic::powi:
case Intrinsic::bswap:
case Intrinsic::ctpop:
case Intrinsic::ctlz:
@@ -539,12 +531,12 @@ llvm::ConstantFoldCall(Function *F, Constant** Operands, unsigned NumOperands) {
}
} else if (NumOperands == 2) {
if (ConstantFP *Op1 = dyn_cast<ConstantFP>(Operands[0])) {
if (Ty!=Type::FloatTy && Ty!=Type::DoubleTy)
return 0;
double Op1V = Ty==Type::FloatTy ?
(double)Op1->getValueAPF().convertToFloat():
Op1->getValueAPF().convertToDouble();
if (ConstantFP *Op2 = dyn_cast<ConstantFP>(Operands[1])) {
if (Ty!=Type::FloatTy && Ty!=Type::DoubleTy)
return 0;
double Op2V = Ty==Type::FloatTy ?
(double)Op2->getValueAPF().convertToFloat():
Op2->getValueAPF().convertToDouble();