From: Craig Topper Date: Mon, 20 Mar 2017 01:29:52 +0000 (+0000) Subject: [APInt] Don't initialize VAL to 0 in APInt constructors. Push it down to the initSlow... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2d17f445878b7f3911351c154e00c3608eed0d0e;p=llvm [APInt] Don't initialize VAL to 0 in APInt constructors. Push it down to the initSlowCase and other init methods. I'm not sure if zeroing VAL before writing pVal is really necessary, but at least one other place did it in code. But by taking the store out of line, this reduces the opt binary by about 20k on my local x86-64 build. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298233 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/ADT/APInt.h b/include/llvm/ADT/APInt.h index 8d8c898a053..382a19e5d80 100644 --- a/include/llvm/ADT/APInt.h +++ b/include/llvm/ADT/APInt.h @@ -232,7 +232,7 @@ public: /// \param val the initial value of the APInt /// \param isSigned how to treat signedness of val APInt(unsigned numBits, uint64_t val, bool isSigned = false) - : BitWidth(numBits), VAL(0) { + : BitWidth(numBits) { assert(BitWidth && "bitwidth too small"); if (isSingleWord()) { VAL = val; @@ -275,7 +275,7 @@ public: /// Simply makes *this a copy of that. /// @brief Copy Constructor. - APInt(const APInt &that) : BitWidth(that.BitWidth), VAL(0) { + APInt(const APInt &that) : BitWidth(that.BitWidth) { if (isSingleWord()) VAL = that.VAL; else diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp index d65dffec8c0..58fa2f53690 100644 --- a/lib/Support/APInt.cpp +++ b/lib/Support/APInt.cpp @@ -76,6 +76,7 @@ inline static unsigned getDigit(char cdigit, uint8_t radix) { void APInt::initSlowCase(uint64_t val, bool isSigned) { + VAL = 0; pVal = getClearedMemory(getNumWords()); pVal[0] = val; if (isSigned && int64_t(val) < 0) @@ -85,6 +86,7 @@ void APInt::initSlowCase(uint64_t val, bool isSigned) { } void APInt::initSlowCase(const APInt& that) { + VAL = 0; pVal = getMemory(getNumWords()); memcpy(pVal, that.pVal, getNumWords() * APINT_WORD_SIZE); } @@ -96,6 +98,7 @@ void APInt::initFromArray(ArrayRef bigVal) { VAL = bigVal[0]; else { // Get memory, cleared to 0 + VAL = 0; pVal = getClearedMemory(getNumWords()); // Calculate the number of words to copy unsigned words = std::min(bigVal.size(), getNumWords()); @@ -107,12 +110,12 @@ void APInt::initFromArray(ArrayRef bigVal) { } APInt::APInt(unsigned numBits, ArrayRef bigVal) - : BitWidth(numBits), VAL(0) { + : BitWidth(numBits) { initFromArray(bigVal); } APInt::APInt(unsigned numBits, unsigned numWords, const uint64_t bigVal[]) - : BitWidth(numBits), VAL(0) { + : BitWidth(numBits) { initFromArray(makeArrayRef(bigVal, numWords)); }