[APInt] Inline the single word case of lshrInPlace similar to what we do for <<=.

llvm-svn: 300577
This commit is contained in:
Craig Topper 2017-04-18 19:13:27 +00:00
parent 9398649fea
commit ae8bd67d96
2 changed files with 14 additions and 10 deletions

View File

@ -191,6 +191,9 @@ private:
/// out-of-line slow case for shl
void shlSlowCase(unsigned ShiftAmt);
/// out-of-line slow case for lshr.
void lshrSlowCase(unsigned ShiftAmt);
/// out-of-line slow case for operator=
APInt &AssignSlowCase(const APInt &RHS);
@ -889,7 +892,16 @@ public:
}
/// Logical right-shift this APInt by ShiftAmt in place.
void lshrInPlace(unsigned ShiftAmt);
void lshrInPlace(unsigned ShiftAmt) {
if (isSingleWord()) {
if (ShiftAmt >= BitWidth)
VAL = 0;
else
VAL >>= ShiftAmt;
return;
}
lshrSlowCase(ShiftAmt);
}
/// \brief Left-shift function.
///

View File

@ -1140,15 +1140,7 @@ void APInt::lshrInPlace(const APInt &shiftAmt) {
/// Logical right-shift this APInt by shiftAmt.
/// @brief Logical right-shift function.
void APInt::lshrInPlace(unsigned ShiftAmt) {
if (isSingleWord()) {
if (ShiftAmt >= BitWidth)
VAL = 0;
else
VAL >>= ShiftAmt;
return;
}
void APInt::lshrSlowCase(unsigned ShiftAmt) {
tcShiftRight(pVal, getNumWords(), ShiftAmt);
}