forked from OSchip/llvm-project
Revert "Revert "[APFloat] Removed APFloat constructor which initialized to either zero/NaN but allowed you to arbitrarily set the category of the float.""
This reverts commit r185099. Looks like both the ppc-64 and mips bots are still failing after I reverted this change. Since: 1. The mips bot always performs a clean build, 2. The ppc64-bot failed again after a clean build (I asked the ppc-64 maintainers to clean the bot which they did... Thanks Will!), I think it is safe to assume that this change was not the cause of the failures that said builders were seeing. Thus I am recomitting. llvm-svn: 185111
This commit is contained in:
parent
a7b73d4534
commit
79b0967548
|
@ -191,7 +191,6 @@ public:
|
||||||
APFloat(const fltSemantics &); // Default construct to 0.0
|
APFloat(const fltSemantics &); // Default construct to 0.0
|
||||||
APFloat(const fltSemantics &, StringRef);
|
APFloat(const fltSemantics &, StringRef);
|
||||||
APFloat(const fltSemantics &, integerPart);
|
APFloat(const fltSemantics &, integerPart);
|
||||||
APFloat(const fltSemantics &, fltCategory, bool negative);
|
|
||||||
APFloat(const fltSemantics &, uninitializedTag);
|
APFloat(const fltSemantics &, uninitializedTag);
|
||||||
APFloat(const fltSemantics &, const APInt &);
|
APFloat(const fltSemantics &, const APInt &);
|
||||||
explicit APFloat(double d);
|
explicit APFloat(double d);
|
||||||
|
|
|
@ -795,17 +795,6 @@ APFloat::APFloat(const fltSemantics &ourSemantics, uninitializedTag tag) {
|
||||||
initialize(&ourSemantics);
|
initialize(&ourSemantics);
|
||||||
}
|
}
|
||||||
|
|
||||||
APFloat::APFloat(const fltSemantics &ourSemantics,
|
|
||||||
fltCategory ourCategory, bool negative) {
|
|
||||||
initialize(&ourSemantics);
|
|
||||||
category = ourCategory;
|
|
||||||
sign = negative;
|
|
||||||
if (isFiniteNonZero())
|
|
||||||
category = fcZero;
|
|
||||||
else if (ourCategory == fcNaN)
|
|
||||||
makeNaN();
|
|
||||||
}
|
|
||||||
|
|
||||||
APFloat::APFloat(const fltSemantics &ourSemantics, StringRef text) {
|
APFloat::APFloat(const fltSemantics &ourSemantics, StringRef text) {
|
||||||
initialize(&ourSemantics);
|
initialize(&ourSemantics);
|
||||||
convertFromString(text, rmNearestTiesToEven);
|
convertFromString(text, rmNearestTiesToEven);
|
||||||
|
@ -2406,8 +2395,8 @@ APFloat::roundSignificandWithExponent(const integerPart *decSigParts,
|
||||||
excessPrecision = calcSemantics.precision - semantics->precision;
|
excessPrecision = calcSemantics.precision - semantics->precision;
|
||||||
truncatedBits = excessPrecision;
|
truncatedBits = excessPrecision;
|
||||||
|
|
||||||
APFloat decSig(calcSemantics, fcZero, sign);
|
APFloat decSig = APFloat::getZero(calcSemantics, sign);
|
||||||
APFloat pow5(calcSemantics, fcZero, false);
|
APFloat pow5(calcSemantics);
|
||||||
|
|
||||||
sigStatus = decSig.convertFromUnsignedParts(decSigParts, sigPartCount,
|
sigStatus = decSig.convertFromUnsignedParts(decSigParts, sigPartCount,
|
||||||
rmNearestTiesToEven);
|
rmNearestTiesToEven);
|
||||||
|
@ -3388,15 +3377,16 @@ APFloat APFloat::getSmallest(const fltSemantics &Sem, bool Negative) {
|
||||||
}
|
}
|
||||||
|
|
||||||
APFloat APFloat::getSmallestNormalized(const fltSemantics &Sem, bool Negative) {
|
APFloat APFloat::getSmallestNormalized(const fltSemantics &Sem, bool Negative) {
|
||||||
APFloat Val(Sem, fcNormal, Negative);
|
APFloat Val(Sem, uninitialized);
|
||||||
|
|
||||||
// We want (in interchange format):
|
// We want (in interchange format):
|
||||||
// sign = {Negative}
|
// sign = {Negative}
|
||||||
// exponent = 0..0
|
// exponent = 0..0
|
||||||
// significand = 10..0
|
// significand = 10..0
|
||||||
|
|
||||||
Val.exponent = Sem.minExponent;
|
|
||||||
Val.zeroSignificand();
|
Val.zeroSignificand();
|
||||||
|
Val.sign = Negative;
|
||||||
|
Val.exponent = Sem.minExponent;
|
||||||
Val.significandParts()[partCountForBits(Sem.precision)-1] |=
|
Val.significandParts()[partCountForBits(Sem.precision)-1] |=
|
||||||
(((integerPart) 1) << ((Sem.precision - 1) % integerPartWidth));
|
(((integerPart) 1) << ((Sem.precision - 1) % integerPartWidth));
|
||||||
|
|
||||||
|
|
|
@ -2888,7 +2888,7 @@ Instruction *InstCombiner::FoldFCmp_IntToFP_Cst(FCmpInst &I,
|
||||||
if (!LHSUnsigned) {
|
if (!LHSUnsigned) {
|
||||||
// If the RHS value is > SignedMax, fold the comparison. This handles +INF
|
// If the RHS value is > SignedMax, fold the comparison. This handles +INF
|
||||||
// and large values.
|
// and large values.
|
||||||
APFloat SMax(RHS.getSemantics(), APFloat::fcZero, false);
|
APFloat SMax(RHS.getSemantics());
|
||||||
SMax.convertFromAPInt(APInt::getSignedMaxValue(IntWidth), true,
|
SMax.convertFromAPInt(APInt::getSignedMaxValue(IntWidth), true,
|
||||||
APFloat::rmNearestTiesToEven);
|
APFloat::rmNearestTiesToEven);
|
||||||
if (SMax.compare(RHS) == APFloat::cmpLessThan) { // smax < 13123.0
|
if (SMax.compare(RHS) == APFloat::cmpLessThan) { // smax < 13123.0
|
||||||
|
@ -2900,7 +2900,7 @@ Instruction *InstCombiner::FoldFCmp_IntToFP_Cst(FCmpInst &I,
|
||||||
} else {
|
} else {
|
||||||
// If the RHS value is > UnsignedMax, fold the comparison. This handles
|
// If the RHS value is > UnsignedMax, fold the comparison. This handles
|
||||||
// +INF and large values.
|
// +INF and large values.
|
||||||
APFloat UMax(RHS.getSemantics(), APFloat::fcZero, false);
|
APFloat UMax(RHS.getSemantics());
|
||||||
UMax.convertFromAPInt(APInt::getMaxValue(IntWidth), false,
|
UMax.convertFromAPInt(APInt::getMaxValue(IntWidth), false,
|
||||||
APFloat::rmNearestTiesToEven);
|
APFloat::rmNearestTiesToEven);
|
||||||
if (UMax.compare(RHS) == APFloat::cmpLessThan) { // umax < 13123.0
|
if (UMax.compare(RHS) == APFloat::cmpLessThan) { // umax < 13123.0
|
||||||
|
@ -2913,7 +2913,7 @@ Instruction *InstCombiner::FoldFCmp_IntToFP_Cst(FCmpInst &I,
|
||||||
|
|
||||||
if (!LHSUnsigned) {
|
if (!LHSUnsigned) {
|
||||||
// See if the RHS value is < SignedMin.
|
// See if the RHS value is < SignedMin.
|
||||||
APFloat SMin(RHS.getSemantics(), APFloat::fcZero, false);
|
APFloat SMin(RHS.getSemantics());
|
||||||
SMin.convertFromAPInt(APInt::getSignedMinValue(IntWidth), true,
|
SMin.convertFromAPInt(APInt::getSignedMinValue(IntWidth), true,
|
||||||
APFloat::rmNearestTiesToEven);
|
APFloat::rmNearestTiesToEven);
|
||||||
if (SMin.compare(RHS) == APFloat::cmpGreaterThan) { // smin > 12312.0
|
if (SMin.compare(RHS) == APFloat::cmpGreaterThan) { // smin > 12312.0
|
||||||
|
@ -2924,7 +2924,7 @@ Instruction *InstCombiner::FoldFCmp_IntToFP_Cst(FCmpInst &I,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// See if the RHS value is < UnsignedMin.
|
// See if the RHS value is < UnsignedMin.
|
||||||
APFloat SMin(RHS.getSemantics(), APFloat::fcZero, false);
|
APFloat SMin(RHS.getSemantics());
|
||||||
SMin.convertFromAPInt(APInt::getMinValue(IntWidth), true,
|
SMin.convertFromAPInt(APInt::getMinValue(IntWidth), true,
|
||||||
APFloat::rmNearestTiesToEven);
|
APFloat::rmNearestTiesToEven);
|
||||||
if (SMin.compare(RHS) == APFloat::cmpGreaterThan) { // umin > 12312.0
|
if (SMin.compare(RHS) == APFloat::cmpGreaterThan) { // umin > 12312.0
|
||||||
|
|
Loading…
Reference in New Issue