aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-10-05 05:06:24 +0000
committerChris Lattner <sabre@nondot.org>2009-10-05 05:06:24 +0000
commitd0806a1519f3bc450d2dea3e6f22db73fc797e4c (patch)
tree9306a6f74e849769895a3dd9be056b15d369dad7 /lib
parent375c032468ed91991cb15edd415222815d91a3ca (diff)
downloadexternal_llvm-d0806a1519f3bc450d2dea3e6f22db73fc797e4c.zip
external_llvm-d0806a1519f3bc450d2dea3e6f22db73fc797e4c.tar.gz
external_llvm-d0806a1519f3bc450d2dea3e6f22db73fc797e4c.tar.bz2
simplify this code a bunch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83294 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Analysis/ConstantFolding.cpp28
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/Analysis/ConstantFolding.cpp b/lib/Analysis/ConstantFolding.cpp
index 693faae..d624deb 100644
--- a/lib/Analysis/ConstantFolding.cpp
+++ b/lib/Analysis/ConstantFolding.cpp
@@ -721,9 +721,9 @@ static Constant *ConstantFoldFP(double (*NativeFP)(double), double V,
return 0;
}
- if (Ty == Type::getFloatTy(Context))
+ if (Ty->isFloatTy())
return ConstantFP::get(Context, APFloat((float)V));
- if (Ty == Type::getDoubleTy(Context))
+ if (Ty->isDoubleTy())
return ConstantFP::get(Context, APFloat(V));
llvm_unreachable("Can only constant fold float/double");
return 0; // dummy return to suppress warning
@@ -740,9 +740,9 @@ static Constant *ConstantFoldBinaryFP(double (*NativeFP)(double, double),
return 0;
}
- if (Ty == Type::getFloatTy(Context))
+ if (Ty->isFloatTy())
return ConstantFP::get(Context, APFloat((float)V));
- if (Ty == Type::getDoubleTy(Context))
+ if (Ty->isDoubleTy())
return ConstantFP::get(Context, APFloat(V));
llvm_unreachable("Can only constant fold float/double");
return 0; // dummy return to suppress warning
@@ -756,19 +756,17 @@ llvm::ConstantFoldCall(Function *F,
if (!F->hasName()) return 0;
LLVMContext &Context = F->getContext();
StringRef Name = F->getName();
-
+
const Type *Ty = F->getReturnType();
if (NumOperands == 1) {
if (ConstantFP *Op = dyn_cast<ConstantFP>(Operands[0])) {
- if (Ty != Type::getFloatTy(F->getContext()) &&
- Ty != Type::getDoubleTy(Context))
+ if (!Ty->isFloatTy() && !Ty->isDoubleTy())
return 0;
/// Currently APFloat versions of these functions do not exist, so we use
/// the host native double versions. Float versions are not called
/// directly but for all these it is true (float)(f((double)arg)) ==
/// f(arg). Long double not supported yet.
- double V = Ty == Type::getFloatTy(Context) ?
- (double)Op->getValueAPF().convertToFloat():
+ double V = Ty->isFloatTy() ? (double)Op->getValueAPF().convertToFloat() :
Op->getValueAPF().convertToDouble();
switch (Name[0]) {
case 'a':
@@ -854,14 +852,16 @@ llvm::ConstantFoldCall(Function *F,
if (NumOperands == 2) {
if (ConstantFP *Op1 = dyn_cast<ConstantFP>(Operands[0])) {
- if (Ty!=Type::getFloatTy(F->getContext()) &&
- Ty!=Type::getDoubleTy(Context))
+ if (!Ty->isFloatTy() && !Ty->isDoubleTy())
return 0;
- double Op1V = Ty==Type::getFloatTy(F->getContext()) ?
- (double)Op1->getValueAPF().convertToFloat():
+ double Op1V = Ty->isFloatTy() ?
+ (double)Op1->getValueAPF().convertToFloat() :
Op1->getValueAPF().convertToDouble();
if (ConstantFP *Op2 = dyn_cast<ConstantFP>(Operands[1])) {
- double Op2V = Ty==Type::getFloatTy(F->getContext()) ?
+ if (Op2->getType() != Op1->getType())
+ return 0;
+
+ double Op2V = Ty->isFloatTy() ?
(double)Op2->getValueAPF().convertToFloat():
Op2->getValueAPF().convertToDouble();