From: Craig Topper Date: Mon, 27 Mar 2017 17:10:21 +0000 (+0000) Subject: [APInt] Move the >64 bit case for flipAllBits out of line. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=82ba8a62686b97ebda4578162a632fbdcc36af35;p=llvm [APInt] Move the >64 bit case for flipAllBits out of line. This is more consistent with what we do for other operations. This shrinks the opt binary on my build by ~72k. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298858 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/ADT/APInt.h b/include/llvm/ADT/APInt.h index 27e164c6641..c407d9c55a2 100644 --- a/include/llvm/ADT/APInt.h +++ b/include/llvm/ADT/APInt.h @@ -217,6 +217,9 @@ class LLVM_NODISCARD APInt { /// out-of-line slow case for setBits. void setBitsSlowCase(unsigned loBit, unsigned hiBit); + /// out-of-line slow case for flipAllBits. + void flipAllBitsSlowCase(); + public: /// \name Constructors /// @{ @@ -1233,13 +1236,12 @@ public: /// \brief Toggle every bit to its opposite value. void flipAllBits() { - if (isSingleWord()) + if (isSingleWord()) { VAL ^= UINT64_MAX; - else { - for (unsigned i = 0; i < getNumWords(); ++i) - pVal[i] ^= UINT64_MAX; + clearUnusedBits(); + } else { + flipAllBitsSlowCase(); } - clearUnusedBits(); } /// \brief Toggles a given bit to its opposite value. diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp index 58fa2f53690..aacb7440313 100644 --- a/lib/Support/APInt.cpp +++ b/lib/Support/APInt.cpp @@ -581,6 +581,11 @@ void APInt::clearBit(unsigned bitPosition) { } /// @brief Toggle every bit to its opposite value. +void APInt::flipAllBitsSlowCase() { + for (unsigned i = 0; i < getNumWords(); ++i) + pVal[i] ^= UINT64_MAX; + clearUnusedBits(); +} /// Toggle a given bit to its opposite value whose position is given /// as "bitPosition".