diff options
Diffstat (limited to 'lib/Support/APInt.cpp')
| -rw-r--r-- | lib/Support/APInt.cpp | 34 | 
1 files changed, 15 insertions, 19 deletions
diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp index 1227d7528c8f9..b6c8cbee66df8 100644 --- a/lib/Support/APInt.cpp +++ b/lib/Support/APInt.cpp @@ -392,13 +392,6 @@ int APInt::compareSigned(const APInt& RHS) const {    return tcCompare(pVal, RHS.pVal, getNumWords());  } -void APInt::setBit(unsigned bitPosition) { -  if (isSingleWord()) -    VAL |= maskBit(bitPosition); -  else -    pVal[whichWord(bitPosition)] |= maskBit(bitPosition); -} -  void APInt::setBitsSlowCase(unsigned loBit, unsigned hiBit) {    unsigned loWord = whichWord(loBit);    unsigned hiWord = whichWord(hiBit); @@ -426,15 +419,6 @@ void APInt::setBitsSlowCase(unsigned loBit, unsigned hiBit) {      pVal[word] = WORD_MAX;  } -/// Set the given bit to 0 whose position is given as "bitPosition". -/// @brief Set a given bit to 0. -void APInt::clearBit(unsigned bitPosition) { -  if (isSingleWord()) -    VAL &= ~maskBit(bitPosition); -  else -    pVal[whichWord(bitPosition)] &= ~maskBit(bitPosition); -} -  /// @brief Toggle every bit to its opposite value.  void APInt::flipAllBitsSlowCase() {    tcComplement(pVal, getNumWords()); @@ -625,6 +609,17 @@ APInt APInt::getLoBits(unsigned numBits) const {    return Result;  } +/// Return a value containing V broadcasted over NewLen bits. +APInt APInt::getSplat(unsigned NewLen, const APInt &V) { +  assert(NewLen >= V.getBitWidth() && "Can't splat to smaller bit width!"); + +  APInt Val = V.zextOrSelf(NewLen); +  for (unsigned I = V.getBitWidth(); I < NewLen; I <<= 1) +    Val |= Val << I; + +  return Val; +} +  unsigned APInt::countLeadingZerosSlowCase() const {    unsigned Count = 0;    for (int i = getNumWords()-1; i >= 0; --i) { @@ -844,7 +839,7 @@ APInt llvm::APIntOps::RoundDoubleToAPInt(double Double, unsigned width) {    // Otherwise, we have to shift the mantissa bits up to the right location    APInt Tmp(width, mantissa); -  Tmp = Tmp.shl((unsigned)exp - 52); +  Tmp <<= (unsigned)exp - 52;    return isNeg ? -Tmp : Tmp;  } @@ -1072,9 +1067,10 @@ void APInt::lshrSlowCase(unsigned ShiftAmt) {  /// Left-shift this APInt by shiftAmt.  /// @brief Left-shift function. -APInt APInt::shl(const APInt &shiftAmt) const { +APInt &APInt::operator<<=(const APInt &shiftAmt) {    // It's undefined behavior in C to shift by BitWidth or greater. -  return shl((unsigned)shiftAmt.getLimitedValue(BitWidth)); +  *this <<= (unsigned)shiftAmt.getLimitedValue(BitWidth); +  return *this;  }  void APInt::shlSlowCase(unsigned ShiftAmt) {  | 
