minor code cleanups, allow constant folding sinf/cosf.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48961 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-03-30 18:02:00 +00:00
parent 74ba1711b7
commit f19f58a936

View File

@ -569,7 +569,8 @@ llvm::canConstantFoldCallTo(const Function *F) {
if (Len == 3)
return !strcmp(Str, "sin");
if (Len == 4)
return !strcmp(Str, "sinh") || !strcmp(Str, "sqrt");
return !strcmp(Str, "sinh") || !strcmp(Str, "sqrt") ||
!strcmp(Str, "sinf");
if (Len == 5)
return !strcmp(Str, "sqrtf");
return false;
@ -586,35 +587,36 @@ static Constant *ConstantFoldFP(double (*NativeFP)(double), double V,
const Type *Ty) {
errno = 0;
V = NativeFP(V);
if (errno == 0) {
if (Ty==Type::FloatTy)
return ConstantFP::get(Ty, APFloat((float)V));
else if (Ty==Type::DoubleTy)
return ConstantFP::get(Ty, APFloat(V));
else
assert(0);
}
if (errno != 0) {
errno = 0;
return 0;
}
if (Ty == Type::FloatTy)
return ConstantFP::get(Ty, APFloat((float)V));
if (Ty == Type::DoubleTy)
return ConstantFP::get(Ty, APFloat(V));
assert(0 && "Can only constant fold float/double");
}
static Constant *ConstantFoldBinaryFP(double (*NativeFP)(double, double),
double V, double W,
const Type *Ty) {
errno = 0;
V = NativeFP(V, W);
if (errno == 0) {
if (Ty==Type::FloatTy)
return ConstantFP::get(Ty, APFloat((float)V));
else if (Ty==Type::DoubleTy)
return ConstantFP::get(Ty, APFloat(V));
else
assert(0);
}
if (errno != 0) {
errno = 0;
return 0;
}
if (Ty == Type::FloatTy)
return ConstantFP::get(Ty, APFloat((float)V));
if (Ty == Type::DoubleTy)
return ConstantFP::get(Ty, APFloat(V));
assert(0 && "Can only constant fold float/double");
}
/// ConstantFoldCall - Attempt to constant fold a call to the specified function
/// with the specified arguments, returning null if unsuccessful.
@ -653,6 +655,8 @@ llvm::ConstantFoldCall(Function *F,
return ConstantFoldFP(cos, V, Ty);
else if (Len == 4 && !strcmp(Str, "cosh"))
return ConstantFoldFP(cosh, V, Ty);
else if (Len == 4 && !strcmp(Str, "cosf"))
return ConstantFoldFP(cos, V, Ty);
break;
case 'e':
if (Len == 3 && !strcmp(Str, "exp"))
@ -687,6 +691,8 @@ llvm::ConstantFoldCall(Function *F,
return ConstantFoldFP(sqrt, V, Ty);
else if (Len == 5 && !strcmp(Str, "sqrtf") && V >= 0)
return ConstantFoldFP(sqrt, V, Ty);
else if (Len == 4 && !strcmp(Str, "sinf"))
return ConstantFoldFP(sin, V, Ty);
break;
case 't':
if (Len == 3 && !strcmp(Str, "tan"))