diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils')
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp | 11 | 
1 files changed, 10 insertions, 1 deletions
| diff --git a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp index 26f3b7b38e5..079159b8215 100644 --- a/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp @@ -1376,12 +1376,21 @@ Value *LibCallSimplifier::optimizeLog(CallInst *CI, IRBuilder<> &B) {  Value *LibCallSimplifier::optimizeSqrt(CallInst *CI, IRBuilder<> &B) {    Function *Callee = CI->getCalledFunction(); -   +    Value *Ret = nullptr;    if (TLI->has(LibFunc::sqrtf) && (Callee->getName() == "sqrt" ||                                     Callee->getIntrinsicID() == Intrinsic::sqrt))      Ret = optimizeUnaryDoubleFP(CI, B, true); +  // FIXME: Refactor - this check is repeated all over this file and even in the +  // preceding call to shrink double -> float. + +  // Make sure this has 1 argument of FP type, which matches the result type. +  FunctionType *FT = Callee->getFunctionType(); +  if (FT->getNumParams() != 1 || FT->getReturnType() != FT->getParamType(0) || +      !FT->getParamType(0)->isFloatingPointTy()) +    return Ret; +    if (!CI->hasUnsafeAlgebra())      return Ret; | 

