forked from OSchip/llvm-project
PR5207: change APInt::doubleToBits() and APInt::floatToBits() to be
static methods that return a new APInt. llvm-svn: 120261
This commit is contained in:
parent
7e8a99b1c3
commit
3447fb01c0
|
@ -1293,37 +1293,27 @@ public:
|
|||
}
|
||||
|
||||
/// The conversion does not do a translation from double to integer, it just
|
||||
/// re-interprets the bits of the double. Note that it is valid to do this on
|
||||
/// any bit width but bits from V may get truncated.
|
||||
/// re-interprets the bits of the double.
|
||||
/// @brief Converts a double to APInt bits.
|
||||
APInt& doubleToBits(double V) {
|
||||
static APInt doubleToBits(double V) {
|
||||
union {
|
||||
uint64_t I;
|
||||
double D;
|
||||
} T;
|
||||
T.D = V;
|
||||
if (isSingleWord())
|
||||
VAL = T.I;
|
||||
else
|
||||
pVal[0] = T.I;
|
||||
return clearUnusedBits();
|
||||
return APInt(sizeof T * CHAR_BIT, T.I);
|
||||
}
|
||||
|
||||
/// The conversion does not do a translation from float to integer, it just
|
||||
/// re-interprets the bits of the float. Note that it is valid to do this on
|
||||
/// any bit width but bits from V may get truncated.
|
||||
/// re-interprets the bits of the float.
|
||||
/// @brief Converts a float to APInt bits.
|
||||
APInt& floatToBits(float V) {
|
||||
static APInt floatToBits(float V) {
|
||||
union {
|
||||
unsigned I;
|
||||
float F;
|
||||
} T;
|
||||
T.F = V;
|
||||
if (isSingleWord())
|
||||
VAL = T.I;
|
||||
else
|
||||
pVal[0] = T.I;
|
||||
return clearUnusedBits();
|
||||
return APInt(sizeof T * CHAR_BIT, T.I);
|
||||
}
|
||||
|
||||
/// @}
|
||||
|
|
|
@ -637,11 +637,11 @@ GenericValue ExecutionEngine::getConstantValue(const Constant *C) {
|
|||
break;
|
||||
case Type::FloatTyID:
|
||||
assert(DestTy->isIntegerTy(32) && "Invalid bitcast");
|
||||
GV.IntVal.floatToBits(GV.FloatVal);
|
||||
GV.IntVal = APInt::floatToBits(GV.FloatVal);
|
||||
break;
|
||||
case Type::DoubleTyID:
|
||||
assert(DestTy->isIntegerTy(64) && "Invalid bitcast");
|
||||
GV.IntVal.doubleToBits(GV.DoubleVal);
|
||||
GV.IntVal = APInt::doubleToBits(GV.DoubleVal);
|
||||
break;
|
||||
case Type::PointerTyID:
|
||||
assert(DestTy->isPointerTy() && "Invalid bitcast");
|
||||
|
|
|
@ -1060,11 +1060,9 @@ GenericValue Interpreter::executeBitCastInst(Value *SrcVal, const Type *DstTy,
|
|||
Dest.PointerVal = Src.PointerVal;
|
||||
} else if (DstTy->isIntegerTy()) {
|
||||
if (SrcTy->isFloatTy()) {
|
||||
Dest.IntVal.zext(sizeof(Src.FloatVal) * CHAR_BIT);
|
||||
Dest.IntVal.floatToBits(Src.FloatVal);
|
||||
Dest.IntVal = APInt::floatToBits(Src.FloatVal);
|
||||
} else if (SrcTy->isDoubleTy()) {
|
||||
Dest.IntVal.zext(sizeof(Src.DoubleVal) * CHAR_BIT);
|
||||
Dest.IntVal.doubleToBits(Src.DoubleVal);
|
||||
Dest.IntVal = APInt::doubleToBits(Src.DoubleVal);
|
||||
} else if (SrcTy->isIntegerTy()) {
|
||||
Dest.IntVal = Src.IntVal;
|
||||
} else
|
||||
|
|
|
@ -3258,14 +3258,12 @@ APFloat::APFloat(const APInt& api, bool isIEEE)
|
|||
|
||||
APFloat::APFloat(float f)
|
||||
{
|
||||
APInt api = APInt(32, 0);
|
||||
initFromAPInt(api.floatToBits(f));
|
||||
initFromAPInt(APInt::floatToBits(f));
|
||||
}
|
||||
|
||||
APFloat::APFloat(double d)
|
||||
{
|
||||
APInt api = APInt(64, 0);
|
||||
initFromAPInt(api.doubleToBits(d));
|
||||
initFromAPInt(APInt::doubleToBits(d));
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
Loading…
Reference in New Issue