APFloat cleanup: Remove now unused "arithmeticOK" logic.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166954 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ulrich Weigand 2012-10-29 18:18:44 +00:00
parent 53e216b304
commit 159c735f7b

View File

@ -46,17 +46,14 @@ namespace llvm {
/* Number of bits in the significand. This includes the integer /* Number of bits in the significand. This includes the integer
bit. */ bit. */
unsigned int precision; unsigned int precision;
/* True if arithmetic is supported. */
unsigned int arithmeticOK;
}; };
const fltSemantics APFloat::IEEEhalf = { 15, -14, 11, true }; const fltSemantics APFloat::IEEEhalf = { 15, -14, 11 };
const fltSemantics APFloat::IEEEsingle = { 127, -126, 24, true }; const fltSemantics APFloat::IEEEsingle = { 127, -126, 24 };
const fltSemantics APFloat::IEEEdouble = { 1023, -1022, 53, true }; const fltSemantics APFloat::IEEEdouble = { 1023, -1022, 53 };
const fltSemantics APFloat::IEEEquad = { 16383, -16382, 113, true }; const fltSemantics APFloat::IEEEquad = { 16383, -16382, 113 };
const fltSemantics APFloat::x87DoubleExtended = { 16383, -16382, 64, true }; const fltSemantics APFloat::x87DoubleExtended = { 16383, -16382, 64 };
const fltSemantics APFloat::Bogus = { 0, 0, 0, true }; const fltSemantics APFloat::Bogus = { 0, 0, 0 };
/* The PowerPC format consists of two doubles. It does not map cleanly /* The PowerPC format consists of two doubles. It does not map cleanly
onto the usual format above. It is approximated using twice the onto the usual format above. It is approximated using twice the
@ -69,8 +66,7 @@ namespace llvm {
to represent all possible values held by a PPC double-double number, to represent all possible values held by a PPC double-double number,
for example: (long double) 1.0 + (long double) 0x1p-106 for example: (long double) 1.0 + (long double) 0x1p-106
Should this be replaced by a full emulation of PPC double-double? */ Should this be replaced by a full emulation of PPC double-double? */
const fltSemantics APFloat::PPCDoubleDouble = const fltSemantics APFloat::PPCDoubleDouble = { 1023, -1022 + 53, 53 + 53 };
{ 1023, -1022 + 53, 53 + 53, true };
/* A tight upper bound on number of parts required to hold the value /* A tight upper bound on number of parts required to hold the value
pow(5, power) is pow(5, power) is
@ -125,12 +121,6 @@ hexDigitValue(unsigned int c)
return -1U; return -1U;
} }
static inline void
assertArithmeticOK(const llvm::fltSemantics &semantics) {
assert(semantics.arithmeticOK &&
"Compile-time arithmetic does not support these semantics");
}
/* Return the value of a decimal exponent of the form /* Return the value of a decimal exponent of the form
[+-]ddddddd. [+-]ddddddd.
@ -731,7 +721,6 @@ APFloat::bitwiseIsEqual(const APFloat &rhs) const {
} }
APFloat::APFloat(const fltSemantics &ourSemantics, integerPart value) { APFloat::APFloat(const fltSemantics &ourSemantics, integerPart value) {
assertArithmeticOK(ourSemantics);
initialize(&ourSemantics); initialize(&ourSemantics);
sign = 0; sign = 0;
zeroSignificand(); zeroSignificand();
@ -741,21 +730,18 @@ APFloat::APFloat(const fltSemantics &ourSemantics, integerPart value) {
} }
APFloat::APFloat(const fltSemantics &ourSemantics) { APFloat::APFloat(const fltSemantics &ourSemantics) {
assertArithmeticOK(ourSemantics);
initialize(&ourSemantics); initialize(&ourSemantics);
category = fcZero; category = fcZero;
sign = false; sign = false;
} }
APFloat::APFloat(const fltSemantics &ourSemantics, uninitializedTag tag) { APFloat::APFloat(const fltSemantics &ourSemantics, uninitializedTag tag) {
assertArithmeticOK(ourSemantics);
// Allocates storage if necessary but does not initialize it. // Allocates storage if necessary but does not initialize it.
initialize(&ourSemantics); initialize(&ourSemantics);
} }
APFloat::APFloat(const fltSemantics &ourSemantics, APFloat::APFloat(const fltSemantics &ourSemantics,
fltCategory ourCategory, bool negative) { fltCategory ourCategory, bool negative) {
assertArithmeticOK(ourSemantics);
initialize(&ourSemantics); initialize(&ourSemantics);
category = ourCategory; category = ourCategory;
sign = negative; sign = negative;
@ -766,7 +752,6 @@ APFloat::APFloat(const fltSemantics &ourSemantics,
} }
APFloat::APFloat(const fltSemantics &ourSemantics, StringRef text) { APFloat::APFloat(const fltSemantics &ourSemantics, StringRef text) {
assertArithmeticOK(ourSemantics);
initialize(&ourSemantics); initialize(&ourSemantics);
convertFromString(text, rmNearestTiesToEven); convertFromString(text, rmNearestTiesToEven);
} }
@ -1558,8 +1543,6 @@ APFloat::addOrSubtract(const APFloat &rhs, roundingMode rounding_mode,
{ {
opStatus fs; opStatus fs;
assertArithmeticOK(*semantics);
fs = addOrSubtractSpecials(rhs, subtract); fs = addOrSubtractSpecials(rhs, subtract);
/* This return code means it was not a simple case. */ /* This return code means it was not a simple case. */
@ -1604,7 +1587,6 @@ APFloat::multiply(const APFloat &rhs, roundingMode rounding_mode)
{ {
opStatus fs; opStatus fs;
assertArithmeticOK(*semantics);
sign ^= rhs.sign; sign ^= rhs.sign;
fs = multiplySpecials(rhs); fs = multiplySpecials(rhs);
@ -1624,7 +1606,6 @@ APFloat::divide(const APFloat &rhs, roundingMode rounding_mode)
{ {
opStatus fs; opStatus fs;
assertArithmeticOK(*semantics);
sign ^= rhs.sign; sign ^= rhs.sign;
fs = divideSpecials(rhs); fs = divideSpecials(rhs);
@ -1646,7 +1627,6 @@ APFloat::remainder(const APFloat &rhs)
APFloat V = *this; APFloat V = *this;
unsigned int origSign = sign; unsigned int origSign = sign;
assertArithmeticOK(*semantics);
fs = V.divide(rhs, rmNearestTiesToEven); fs = V.divide(rhs, rmNearestTiesToEven);
if (fs == opDivByZero) if (fs == opDivByZero)
return fs; return fs;
@ -1681,7 +1661,6 @@ APFloat::opStatus
APFloat::mod(const APFloat &rhs, roundingMode rounding_mode) APFloat::mod(const APFloat &rhs, roundingMode rounding_mode)
{ {
opStatus fs; opStatus fs;
assertArithmeticOK(*semantics);
fs = modSpecials(rhs); fs = modSpecials(rhs);
if (category == fcNormal && rhs.category == fcNormal) { if (category == fcNormal && rhs.category == fcNormal) {
@ -1725,8 +1704,6 @@ APFloat::fusedMultiplyAdd(const APFloat &multiplicand,
{ {
opStatus fs; opStatus fs;
assertArithmeticOK(*semantics);
/* Post-multiplication sign, before addition. */ /* Post-multiplication sign, before addition. */
sign ^= multiplicand.sign; sign ^= multiplicand.sign;
@ -1767,7 +1744,6 @@ APFloat::fusedMultiplyAdd(const APFloat &multiplicand,
/* Rounding-mode corrrect round to integral value. */ /* Rounding-mode corrrect round to integral value. */
APFloat::opStatus APFloat::roundToIntegral(roundingMode rounding_mode) { APFloat::opStatus APFloat::roundToIntegral(roundingMode rounding_mode) {
opStatus fs; opStatus fs;
assertArithmeticOK(*semantics);
// If the exponent is large enough, we know that this value is already // If the exponent is large enough, we know that this value is already
// integral, and the arithmetic below would potentially cause it to saturate // integral, and the arithmetic below would potentially cause it to saturate
@ -1814,7 +1790,6 @@ APFloat::compare(const APFloat &rhs) const
{ {
cmpResult result; cmpResult result;
assertArithmeticOK(*semantics);
assert(semantics == rhs.semantics); assert(semantics == rhs.semantics);
switch (convolve(category, rhs.category)) { switch (convolve(category, rhs.category)) {
@ -1899,8 +1874,6 @@ APFloat::convert(const fltSemantics &toSemantics,
int shift; int shift;
const fltSemantics &fromSemantics = *semantics; const fltSemantics &fromSemantics = *semantics;
assertArithmeticOK(fromSemantics);
assertArithmeticOK(toSemantics);
lostFraction = lfExactlyZero; lostFraction = lfExactlyZero;
newPartCount = partCountForBits(toSemantics.precision + 1); newPartCount = partCountForBits(toSemantics.precision + 1);
oldPartCount = partCount(); oldPartCount = partCount();
@ -1985,8 +1958,6 @@ APFloat::convertToSignExtendedInteger(integerPart *parts, unsigned int width,
const integerPart *src; const integerPart *src;
unsigned int dstPartsCount, truncatedBits; unsigned int dstPartsCount, truncatedBits;
assertArithmeticOK(*semantics);
*isExact = false; *isExact = false;
/* Handle the three special cases first. */ /* Handle the three special cases first. */
@ -2148,7 +2119,6 @@ APFloat::convertFromUnsignedParts(const integerPart *src,
integerPart *dst; integerPart *dst;
lostFraction lost_fraction; lostFraction lost_fraction;
assertArithmeticOK(*semantics);
category = fcNormal; category = fcNormal;
omsb = APInt::tcMSB(src, srcCount) + 1; omsb = APInt::tcMSB(src, srcCount) + 1;
dst = significandParts(); dst = significandParts();
@ -2199,7 +2169,6 @@ APFloat::convertFromSignExtendedInteger(const integerPart *src,
{ {
opStatus status; opStatus status;
assertArithmeticOK(*semantics);
if (isSigned && if (isSigned &&
APInt::tcExtractBit(src, srcCount * integerPartWidth - 1)) { APInt::tcExtractBit(src, srcCount * integerPartWidth - 1)) {
integerPart *copy; integerPart *copy;
@ -2333,7 +2302,7 @@ APFloat::roundSignificandWithExponent(const integerPart *decSigParts,
roundingMode rounding_mode) roundingMode rounding_mode)
{ {
unsigned int parts, pow5PartCount; unsigned int parts, pow5PartCount;
fltSemantics calcSemantics = { 32767, -32767, 0, true }; fltSemantics calcSemantics = { 32767, -32767, 0 };
integerPart pow5Parts[maxPowerOfFiveParts]; integerPart pow5Parts[maxPowerOfFiveParts];
bool isNearest; bool isNearest;
@ -2525,7 +2494,6 @@ APFloat::convertFromDecimalString(StringRef str, roundingMode rounding_mode)
APFloat::opStatus APFloat::opStatus
APFloat::convertFromString(StringRef str, roundingMode rounding_mode) APFloat::convertFromString(StringRef str, roundingMode rounding_mode)
{ {
assertArithmeticOK(*semantics);
assert(!str.empty() && "Invalid string length"); assert(!str.empty() && "Invalid string length");
/* Handle a leading minus sign. */ /* Handle a leading minus sign. */
@ -2577,8 +2545,6 @@ APFloat::convertToHexString(char *dst, unsigned int hexDigits,
{ {
char *p; char *p;
assertArithmeticOK(*semantics);
p = dst; p = dst;
if (sign) if (sign)
*dst++ = '-'; *dst++ = '-';