From: Craig Topper Date: Tue, 18 Apr 2017 05:02:21 +0000 (+0000) Subject: [APInt] Cleanup the reverseBits slow case a little. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0f06c8216fc07d8766fa5711bb162f0482ee171c;p=llvm [APInt] Cleanup the reverseBits slow case a little. Use lshrInPlace. Use single bit extract and operator|=(uint64_t) to avoid a few temporary APInts. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@300527 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Support/APInt.cpp b/lib/Support/APInt.cpp index 1094a61cf1c..5ac98e1c127 100644 --- a/lib/Support/APInt.cpp +++ b/lib/Support/APInt.cpp @@ -774,14 +774,12 @@ APInt APInt::reverseBits() const { } APInt Val(*this); - APInt Reversed(*this); - int S = BitWidth - 1; + APInt Reversed(BitWidth, 0); + unsigned S = BitWidth; - const APInt One(BitWidth, 1); - - for ((Val = Val.lshr(1)); Val != 0; (Val = Val.lshr(1))) { + for (; Val != 0; Val.lshrInPlace(1)) { Reversed <<= 1; - Reversed |= (Val & One); + Reversed |= Val[0]; --S; }