aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2011-12-01 22:38:31 +0000
committerChad Rosier <mcrosier@apple.com>2011-12-01 22:38:31 +0000
commitca3043101f611e4391b9a81d474bcf5023bcd43d (patch)
tree590500b5e930f9d48630d8afd175ebc87220cedc
parentaebc3aae3fd3222c2588e9ad6812bd6cd370a385 (diff)
Fix build by not assuming TLI is guaranteed. Will have to track down cases where
TLI isn't being passed to ensure we don't miss opportunities to fold calls. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145641 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Analysis/ConstantFolding.cpp47
1 files changed, 23 insertions, 24 deletions
diff --git a/lib/Analysis/ConstantFolding.cpp b/lib/Analysis/ConstantFolding.cpp
index 38dacd2d2f..158e26dcfe 100644
--- a/lib/Analysis/ConstantFolding.cpp
+++ b/lib/Analysis/ConstantFolding.cpp
@@ -1180,7 +1180,6 @@ llvm::ConstantFoldCall(Function *F, ArrayRef<Constant *> Operands,
const TargetLibraryInfo *TLI) {
if (!F->hasName()) return 0;
StringRef Name = F->getName();
- assert (TLI && "Expected TLI!");
Type *Ty = F->getReturnType();
if (Operands.size() == 1) {
@@ -1211,43 +1210,43 @@ llvm::ConstantFoldCall(Function *F, ArrayRef<Constant *> Operands,
Op->getValueAPF().convertToDouble();
switch (Name[0]) {
case 'a':
- if (Name == "acos" && TLI->has(LibFunc::acos))
+ if (Name == "acos" && TLI && TLI->has(LibFunc::acos))
return ConstantFoldFP(acos, V, Ty);
- else if (Name == "asin" && TLI->has(LibFunc::asin))
+ else if (Name == "asin" && TLI && TLI->has(LibFunc::asin))
return ConstantFoldFP(asin, V, Ty);
- else if (Name == "atan" && TLI->has(LibFunc::atan))
+ else if (Name == "atan" && TLI && TLI->has(LibFunc::atan))
return ConstantFoldFP(atan, V, Ty);
break;
case 'c':
- if (Name == "ceil" && TLI->has(LibFunc::ceil))
+ if (Name == "ceil" && TLI && TLI->has(LibFunc::ceil))
return ConstantFoldFP(ceil, V, Ty);
- else if (Name == "cos" && TLI->has(LibFunc::cos))
+ else if (Name == "cos" && TLI && TLI->has(LibFunc::cos))
return ConstantFoldFP(cos, V, Ty);
- else if (Name == "cosh" && TLI->has(LibFunc::cosh))
+ else if (Name == "cosh" && TLI && TLI->has(LibFunc::cosh))
return ConstantFoldFP(cosh, V, Ty);
- else if (Name == "cosf" && TLI->has(LibFunc::cosf))
+ else if (Name == "cosf" && TLI && TLI->has(LibFunc::cosf))
return ConstantFoldFP(cos, V, Ty);
break;
case 'e':
- if (Name == "exp" && TLI->has(LibFunc::exp))
+ if (Name == "exp" && TLI && TLI->has(LibFunc::exp))
return ConstantFoldFP(exp, V, Ty);
- if (Name == "exp2" && TLI->has(LibFunc::exp2)) {
+ if (Name == "exp2" && TLI && TLI->has(LibFunc::exp2)) {
// Constant fold exp2(x) as pow(2,x) in case the host doesn't have a
// C99 library.
return ConstantFoldBinaryFP(pow, 2.0, V, Ty);
}
break;
case 'f':
- if (Name == "fabs" && TLI->has(LibFunc::fabs))
+ if (Name == "fabs" && TLI && TLI->has(LibFunc::fabs))
return ConstantFoldFP(fabs, V, Ty);
- else if (Name == "floor" && TLI->has(LibFunc::floor))
+ else if (Name == "floor" && TLI && TLI->has(LibFunc::floor))
return ConstantFoldFP(floor, V, Ty);
break;
case 'l':
- if (Name == "log" && V > 0 && TLI->has(LibFunc::log))
+ if (Name == "log" && V > 0 && TLI && TLI->has(LibFunc::log))
return ConstantFoldFP(log, V, Ty);
- else if (Name == "log10" && V > 0 && TLI->has(LibFunc::log10))
+ else if (Name == "log10" && V > 0 && TLI && TLI->has(LibFunc::log10))
return ConstantFoldFP(log10, V, Ty);
else if (F->getIntrinsicID() == Intrinsic::sqrt &&
(Ty->isFloatTy() || Ty->isDoubleTy())) {
@@ -1258,21 +1257,21 @@ llvm::ConstantFoldCall(Function *F, ArrayRef<Constant *> Operands,
}
break;
case 's':
- if (Name == "sin" && TLI->has(LibFunc::sin))
+ if (Name == "sin" && TLI && TLI->has(LibFunc::sin))
return ConstantFoldFP(sin, V, Ty);
- else if (Name == "sinh" && TLI->has(LibFunc::sinh))
+ else if (Name == "sinh" && TLI && TLI->has(LibFunc::sinh))
return ConstantFoldFP(sinh, V, Ty);
- else if (Name == "sqrt" && V >= 0 && TLI->has(LibFunc::sqrt))
+ else if (Name == "sqrt" && V >= 0 && TLI && TLI->has(LibFunc::sqrt))
return ConstantFoldFP(sqrt, V, Ty);
- else if (Name == "sqrtf" && V >= 0 && TLI->has(LibFunc::sqrtf))
+ else if (Name == "sqrtf" && V >= 0 && TLI && TLI->has(LibFunc::sqrtf))
return ConstantFoldFP(sqrt, V, Ty);
- else if (Name == "sinf" && TLI->has(LibFunc::sinf))
+ else if (Name == "sinf" && TLI && TLI->has(LibFunc::sinf))
return ConstantFoldFP(sin, V, Ty);
break;
case 't':
- if (Name == "tan" && TLI->has(LibFunc::tan))
+ if (Name == "tan" && TLI && TLI->has(LibFunc::tan))
return ConstantFoldFP(tan, V, Ty);
- else if (Name == "tanh" && TLI->has(LibFunc::tanh))
+ else if (Name == "tanh" && TLI && TLI->has(LibFunc::tanh))
return ConstantFoldFP(tanh, V, Ty);
break;
default:
@@ -1352,11 +1351,11 @@ llvm::ConstantFoldCall(Function *F, ArrayRef<Constant *> Operands,
(double)Op2->getValueAPF().convertToFloat():
Op2->getValueAPF().convertToDouble();
- if (Name == "pow" && TLI->has(LibFunc::pow))
+ if (Name == "pow" && TLI && TLI->has(LibFunc::pow))
return ConstantFoldBinaryFP(pow, Op1V, Op2V, Ty);
- if (Name == "fmod" && TLI->has(LibFunc::fmod))
+ if (Name == "fmod" && TLI && TLI->has(LibFunc::fmod))
return ConstantFoldBinaryFP(fmod, Op1V, Op2V, Ty);
- if (Name == "atan2" && TLI->has(LibFunc::atan2))
+ if (Name == "atan2" && TLI && TLI->has(LibFunc::atan2))
return ConstantFoldBinaryFP(atan2, Op1V, Op2V, Ty);
} else if (ConstantInt *Op2C = dyn_cast<ConstantInt>(Operands[1])) {
if (F->getIntrinsicID() == Intrinsic::powi && Ty->isFloatTy())