forked from OSchip/llvm-project
[APInt] Move the single word cases of the bitwise operators inline.
llvm-svn: 298894
This commit is contained in:
parent
c4a1908681
commit
f496f9a273
|
@ -220,6 +220,15 @@ class LLVM_NODISCARD APInt {
|
|||
/// out-of-line slow case for flipAllBits.
|
||||
void flipAllBitsSlowCase();
|
||||
|
||||
/// out-of-line slow case for operator&=.
|
||||
APInt& AndAssignSlowCase(const APInt& RHS);
|
||||
|
||||
/// out-of-line slow case for operator|=.
|
||||
APInt& OrAssignSlowCase(const APInt& RHS);
|
||||
|
||||
/// out-of-line slow case for operator^=.
|
||||
APInt& XorAssignSlowCase(const APInt& RHS);
|
||||
|
||||
public:
|
||||
/// \name Constructors
|
||||
/// @{
|
||||
|
@ -693,7 +702,14 @@ public:
|
|||
/// assigned to *this.
|
||||
///
|
||||
/// \returns *this after ANDing with RHS.
|
||||
APInt &operator&=(const APInt &RHS);
|
||||
APInt &operator&=(const APInt &RHS) {
|
||||
assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
|
||||
if (isSingleWord()) {
|
||||
VAL &= RHS.VAL;
|
||||
return *this;
|
||||
}
|
||||
return AndAssignSlowCase(RHS);
|
||||
}
|
||||
|
||||
/// \brief Bitwise AND assignment operator.
|
||||
///
|
||||
|
@ -716,7 +732,14 @@ public:
|
|||
/// assigned *this;
|
||||
///
|
||||
/// \returns *this after ORing with RHS.
|
||||
APInt &operator|=(const APInt &RHS);
|
||||
APInt &operator|=(const APInt &RHS) {
|
||||
assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
|
||||
if (isSingleWord()) {
|
||||
VAL |= RHS.VAL;
|
||||
return *this;
|
||||
}
|
||||
return OrAssignSlowCase(RHS);
|
||||
}
|
||||
|
||||
/// \brief Bitwise OR assignment operator.
|
||||
///
|
||||
|
@ -739,7 +762,14 @@ public:
|
|||
/// assigned to *this.
|
||||
///
|
||||
/// \returns *this after XORing with RHS.
|
||||
APInt &operator^=(const APInt &RHS);
|
||||
APInt &operator^=(const APInt &RHS) {
|
||||
assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
|
||||
if (isSingleWord()) {
|
||||
VAL ^= RHS.VAL;
|
||||
return *this;
|
||||
}
|
||||
return XorAssignSlowCase(RHS);
|
||||
}
|
||||
|
||||
/// \brief Bitwise XOR assignment operator.
|
||||
///
|
||||
|
|
|
@ -406,36 +406,21 @@ APInt& APInt::operator*=(const APInt& RHS) {
|
|||
return *this;
|
||||
}
|
||||
|
||||
APInt& APInt::operator&=(const APInt& RHS) {
|
||||
assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
|
||||
if (isSingleWord()) {
|
||||
VAL &= RHS.VAL;
|
||||
return *this;
|
||||
}
|
||||
APInt& APInt::AndAssignSlowCase(const APInt& RHS) {
|
||||
unsigned numWords = getNumWords();
|
||||
for (unsigned i = 0; i < numWords; ++i)
|
||||
pVal[i] &= RHS.pVal[i];
|
||||
return *this;
|
||||
}
|
||||
|
||||
APInt& APInt::operator|=(const APInt& RHS) {
|
||||
assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
|
||||
if (isSingleWord()) {
|
||||
VAL |= RHS.VAL;
|
||||
return *this;
|
||||
}
|
||||
APInt& APInt::OrAssignSlowCase(const APInt& RHS) {
|
||||
unsigned numWords = getNumWords();
|
||||
for (unsigned i = 0; i < numWords; ++i)
|
||||
pVal[i] |= RHS.pVal[i];
|
||||
return *this;
|
||||
}
|
||||
|
||||
APInt& APInt::operator^=(const APInt& RHS) {
|
||||
assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
|
||||
if (isSingleWord()) {
|
||||
VAL ^= RHS.VAL;
|
||||
return *this;
|
||||
}
|
||||
APInt& APInt::XorAssignSlowCase(const APInt& RHS) {
|
||||
unsigned numWords = getNumWords();
|
||||
for (unsigned i = 0; i < numWords; ++i)
|
||||
pVal[i] ^= RHS.pVal[i];
|
||||
|
|
Loading…
Reference in New Issue