summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2007-03-01 20:44:23 +0000
committerReid Spencer <rspencer@reidspencer.com>2007-03-01 20:44:23 +0000
commit4326cf5c51d7e9984963331e258ffc64ee78f888 (patch)
treef878823258021b955936c02595504dce44d901b8 /llvm
parent022e05fdab3350a833edaece0a5ffa9e63e26c08 (diff)
downloadbcm5719-llvm-4326cf5c51d7e9984963331e258ffc64ee78f888.tar.gz
bcm5719-llvm-4326cf5c51d7e9984963331e258ffc64ee78f888.zip
Use the APInt versions of the bit-wise conversions of float/double to int
and back. While this is not strictly necessary, it does pave the way for future changes in casting. It should now be possible to improve vector casting to deal with un-equal fp/int sizes. llvm-svn: 34808
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/VMCore/ConstantFold.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/llvm/lib/VMCore/ConstantFold.cpp b/llvm/lib/VMCore/ConstantFold.cpp
index 2e78bc9062d..97f760ff8a5 100644
--- a/llvm/lib/VMCore/ConstantFold.cpp
+++ b/llvm/lib/VMCore/ConstantFold.cpp
@@ -66,16 +66,16 @@ static Constant *CastConstantVector(ConstantVector *CV,
assert(DstEltTy->isFloatingPoint());
if (DstEltTy->getTypeID() == Type::DoubleTyID) {
for (unsigned i = 0; i != SrcNumElts; ++i) {
- double V =
- BitsToDouble(cast<ConstantInt>(CV->getOperand(i))->getZExtValue());
+ ConstantInt *CI = cast<ConstantInt>(CV->getOperand(i));
+ double V = CI->getValue().bitsToDouble();
Result.push_back(ConstantFP::get(Type::DoubleTy, V));
}
return ConstantVector::get(Result);
}
assert(DstEltTy == Type::FloatTy && "Unknown fp type!");
for (unsigned i = 0; i != SrcNumElts; ++i) {
- float V =
- BitsToFloat(cast<ConstantInt>(CV->getOperand(i))->getZExtValue());
+ ConstantInt *CI = cast<ConstantInt>(CV->getOperand(i));
+ float V = CI->getValue().bitsToFloat();
Result.push_back(ConstantFP::get(Type::FloatTy, V));
}
return ConstantVector::get(Result);
@@ -304,9 +304,9 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V,
if (DestTy->isFloatingPoint()) {
if (DestTy == Type::FloatTy)
- return ConstantFP::get(DestTy, BitsToFloat(CI->getZExtValue()));
+ return ConstantFP::get(DestTy, CI->getValue().bitsToFloat());
assert(DestTy == Type::DoubleTy && "Unknown FP type!");
- return ConstantFP::get(DestTy, BitsToDouble(CI->getZExtValue()));
+ return ConstantFP::get(DestTy, CI->getValue().bitsToDouble());
}
// Otherwise, can't fold this (packed?)
return 0;
@@ -316,10 +316,12 @@ Constant *llvm::ConstantFoldCastInstruction(unsigned opc, const Constant *V,
if (const ConstantFP *FP = dyn_cast<ConstantFP>(V)) {
// FP -> Integral.
if (DestTy == Type::Int32Ty) {
- return ConstantInt::get(DestTy, FloatToBits(FP->getValue()));
+ APInt Val(32, 0);
+ return ConstantInt::get(Val.floatToBits(FP->getValue()));
} else {
assert(DestTy == Type::Int64Ty && "only support f32/f64 for now!");
- return ConstantInt::get(DestTy, DoubleToBits(FP->getValue()));
+ APInt Val(64, 0);
+ return ConstantInt::get(Val.doubleToBits(FP->getValue()));
}
}
return 0;
OpenPOWER on IntegriCloud