Changes in directory llvm/lib/Support:
APInt.cpp updated: 1.25 -> 1.26 --- Log message: Fix countLeadingZeros to actually return the correct number. Fix toString to correctly return "0" for zero valued APInts over 128 bits. --- Diffs of the changes: (+13 -11) APInt.cpp | 24 +++++++++++++----------- 1 files changed, 13 insertions(+), 11 deletions(-) Index: llvm/lib/Support/APInt.cpp diff -u llvm/lib/Support/APInt.cpp:1.25 llvm/lib/Support/APInt.cpp:1.26 --- llvm/lib/Support/APInt.cpp:1.25 Tue Feb 20 17:40:25 2007 +++ llvm/lib/Support/APInt.cpp Tue Feb 20 18:29:48 2007 @@ -696,18 +696,20 @@ /// the number of zeros from the most significant bit to the first one bit. /// @returns numWord() * 64 if the value is zero. uint32_t APInt::countLeadingZeros() const { - if (isSingleWord()) - return CountLeadingZeros_64(VAL) - (APINT_BITS_PER_WORD - BitWidth); uint32_t Count = 0; - for (uint32_t i = getNumWords(); i > 0u; --i) { - uint32_t tmp = CountLeadingZeros_64(pVal[i-1]); - Count += tmp; - if (tmp != APINT_BITS_PER_WORD) - if (i == getNumWords()) - Count -= (APINT_BITS_PER_WORD - whichBit(BitWidth)); - break; + if (isSingleWord()) + Count = CountLeadingZeros_64(VAL); + else { + for (uint32_t i = getNumWords(); i > 0u; --i) { + if (pVal[i-1] == 0) + Count += APINT_BITS_PER_WORD; + else { + Count += CountLeadingZeros_64(pVal[i-1]); + break; + } + } } - return Count; + return Count - (APINT_BITS_PER_WORD - (BitWidth % APINT_BITS_PER_WORD)); } /// countTrailingZeros - This function is a APInt version corresponding to @@ -1513,7 +1515,7 @@ result = "-"; insert_at = 1; } - if (tmp == 0) + if (tmp == APInt(tmp.getBitWidth(), 0)) result = "0"; else while (tmp.ne(zero)) { APInt APdigit(1,0); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits