[llvm] r298870 - [APInt] Move operator&=(uint64_t) inline and use memset to clear the upper words.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 27 11:16:17 PDT 2017
Author: ctopper
Date: Mon Mar 27 13:16:17 2017
New Revision: 298870
URL: http://llvm.org/viewvc/llvm-project?rev=298870&view=rev
Log:
[APInt] Move operator&=(uint64_t) inline and use memset to clear the upper words.
This method is pretty new and probably isn't use much in the code base so this should have a negligible size impact. The OR and XOR operators are already inline.
Modified:
llvm/trunk/include/llvm/ADT/APInt.h
llvm/trunk/lib/Support/APInt.cpp
Modified: llvm/trunk/include/llvm/ADT/APInt.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/APInt.h?rev=298870&r1=298869&r2=298870&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/APInt.h (original)
+++ llvm/trunk/include/llvm/ADT/APInt.h Mon Mar 27 13:16:17 2017
@@ -691,7 +691,15 @@ public:
/// Performs a bitwise AND operation on this APInt and RHS. RHS is
/// logically zero-extended or truncated to match the bit-width of
/// the LHS.
- APInt &operator&=(uint64_t RHS);
+ APInt &operator&=(uint64_t RHS) {
+ if (isSingleWord()) {
+ VAL &= RHS;
+ return *this;
+ }
+ pVal[0] &= RHS;
+ memset(pVal+1, 0, (getNumWords() - 1) * APINT_WORD_SIZE);
+ return *this;
+ }
/// \brief Bitwise OR assignment operator.
///
Modified: llvm/trunk/lib/Support/APInt.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APInt.cpp?rev=298870&r1=298869&r2=298870&view=diff
==============================================================================
--- llvm/trunk/lib/Support/APInt.cpp (original)
+++ llvm/trunk/lib/Support/APInt.cpp Mon Mar 27 13:16:17 2017
@@ -428,18 +428,6 @@ APInt& APInt::operator&=(const APInt& RH
return *this;
}
-APInt &APInt::operator&=(uint64_t RHS) {
- if (isSingleWord()) {
- VAL &= RHS;
- return *this;
- }
- pVal[0] &= RHS;
- unsigned numWords = getNumWords();
- for (unsigned i = 1; i < numWords; ++i)
- pVal[i] = 0;
- return *this;
-}
-
APInt& APInt::operator|=(const APInt& RHS) {
assert(BitWidth == RHS.BitWidth && "Bit widths must be the same");
if (isSingleWord()) {
More information about the llvm-commits
mailing list