Skip to content

Commit

Permalink
Support/APFloat: unique_ptr-ify temp arrays
Browse files Browse the repository at this point in the history
llvm-svn: 216359
  • Loading branch information
nobled committed Aug 25, 2014
1 parent 3ecd22f commit 49c758b
Showing 1 changed file with 8 additions and 11 deletions.
19 changes: 8 additions & 11 deletions llvm/lib/Support/APFloat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1722,7 +1722,8 @@ APFloat::remainder(const APFloat &rhs)
return fs;

int parts = partCount();
integerPart *x = new integerPart[parts];
auto XOwner = make_unique<integerPart[]>(parts);
auto x = XOwner.get();
bool ignored;
fs = V.convertToInteger(x, parts * integerPartWidth, true,
rmNearestTiesToEven, &ignored);
Expand All @@ -1741,7 +1742,6 @@ APFloat::remainder(const APFloat &rhs)

if (isZero())
sign = origSign; // IEEE754 requires this
delete[] x;
return fs;
}

Expand All @@ -1762,7 +1762,8 @@ APFloat::mod(const APFloat &rhs, roundingMode rounding_mode)
return fs;

int parts = partCount();
integerPart *x = new integerPart[parts];
auto XOwner = make_unique<integerPart[]>(parts);
auto x = XOwner.get();
bool ignored;
fs = V.convertToInteger(x, parts * integerPartWidth, true,
rmTowardZero, &ignored);
Expand All @@ -1781,7 +1782,6 @@ APFloat::mod(const APFloat &rhs, roundingMode rounding_mode)

if (isZero())
sign = origSign; // IEEE754 requires this
delete[] x;
}
return fs;
}
Expand Down Expand Up @@ -2284,15 +2284,14 @@ APFloat::convertFromSignExtendedInteger(const integerPart *src,

if (isSigned &&
APInt::tcExtractBit(src, srcCount * integerPartWidth - 1)) {
integerPart *copy;
auto C = make_unique<integerPart[]>(srcCount);
auto copy = C.get();

/* If we're signed and negative negate a copy. */
sign = true;
copy = new integerPart[srcCount];
APInt::tcAssign(copy, src, srcCount);
APInt::tcNegate(copy, srcCount);
status = convertFromUnsignedParts(copy, srcCount, rounding_mode);
delete [] copy;
} else {
sign = false;
status = convertFromUnsignedParts(src, srcCount, rounding_mode);
Expand Down Expand Up @@ -2545,7 +2544,6 @@ APFloat::convertFromDecimalString(StringRef str, roundingMode rounding_mode)
/* Overflow and round. */
fs = handleOverflow(rounding_mode);
} else {
integerPart *decSignificand;
unsigned int partCount;

/* A tight upper bound on number of bits required to hold an
Expand All @@ -2554,7 +2552,8 @@ APFloat::convertFromDecimalString(StringRef str, roundingMode rounding_mode)
tcMultiplyPart. */
partCount = static_cast<unsigned int>(D.lastSigDigit - D.firstSigDigit) + 1;
partCount = partCountForBits(1 + 196 * partCount / 59);
decSignificand = new integerPart[partCount + 1];
auto DecSignificandOwner = make_unique<integerPart[]>(partCount + 1);
auto decSignificand = DecSignificandOwner.get();
partCount = 0;

/* Convert to binary efficiently - we do almost all multiplication
Expand Down Expand Up @@ -2595,8 +2594,6 @@ APFloat::convertFromDecimalString(StringRef str, roundingMode rounding_mode)
category = fcNormal;
fs = roundSignificandWithExponent(decSignificand, partCount,
D.exponent, rounding_mode);

delete [] decSignificand;
}

return fs;
Expand Down

0 comments on commit 49c758b

Please sign in to comment.