Skip to content

Commit

Permalink
[APFloat] Replace partsCount array with single variable (NFC) (#91910)
Browse files Browse the repository at this point in the history
We only ever use the last element of this array, so there shouldn't be a
need to store the preceding elements as well.
  • Loading branch information
nikic authored May 14, 2024
1 parent ad1083d commit 595de12
Showing 1 changed file with 10 additions and 15 deletions.
25 changes: 10 additions & 15 deletions llvm/lib/Support/APFloat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -732,7 +732,7 @@ powerOf5(APFloatBase::integerPart *dst, unsigned int power) {
APFloatBase::integerPart pow5s[maxPowerOfFiveParts * 2 + 5];
pow5s[0] = 78125 * 5;

unsigned int partsCount[16] = { 1 };
unsigned int partsCount = 1;
APFloatBase::integerPart scratch[maxPowerOfFiveParts], *p1, *p2, *pow5;
unsigned int result;
assert(power <= maxExponent);
Expand All @@ -747,25 +747,20 @@ powerOf5(APFloatBase::integerPart *dst, unsigned int power) {
pow5 = pow5s;

for (unsigned int n = 0; power; power >>= 1, n++) {
unsigned int pc;

pc = partsCount[n];

/* Calculate pow(5,pow(2,n+3)) if we haven't yet. */
if (pc == 0) {
pc = partsCount[n - 1];
APInt::tcFullMultiply(pow5, pow5 - pc, pow5 - pc, pc, pc);
pc *= 2;
if (pow5[pc - 1] == 0)
pc--;
partsCount[n] = pc;
if (n != 0) {
APInt::tcFullMultiply(pow5, pow5 - partsCount, pow5 - partsCount,
partsCount, partsCount);
partsCount *= 2;
if (pow5[partsCount - 1] == 0)
partsCount--;
}

if (power & 1) {
APFloatBase::integerPart *tmp;

APInt::tcFullMultiply(p2, p1, pow5, result, pc);
result += pc;
APInt::tcFullMultiply(p2, p1, pow5, result, partsCount);
result += partsCount;
if (p2[result - 1] == 0)
result--;

Expand All @@ -776,7 +771,7 @@ powerOf5(APFloatBase::integerPart *dst, unsigned int power) {
p2 = tmp;
}

pow5 += pc;
pow5 += partsCount;
}

if (p1 != dst)
Expand Down

0 comments on commit 595de12

Please sign in to comment.