[lld] r282505 - Use xxhash for fast --build-id.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 28 13:47:15 PDT 2016


Thank you for doing this. I wanted to move Murmur hash to libSupport, and
this patch essentially does that.

On Tue, Sep 27, 2016 at 9:43 AM, Rafael Espindola via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: rafael
> Date: Tue Sep 27 11:43:49 2016
> New Revision: 282505
>
> URL: http://llvm.org/viewvc/llvm-project?rev=282505&view=rev
> Log:
> Use xxhash for fast --build-id.
>
> The speed improvements I got were:
>
> firefox
>   master 7.050784981
>   patch  6.842361079 0.970439617353
> chromium
>   master 4.260626249
>   patch  4.183148025 0.981815296749
> chromium fast
>   master 1.829028591
>   patch  1.806439277 0.987649556649
> the gold plugin
>   master 0.336154128
>   patch  0.331893374 0.987324998728
> clang
>   master 0.561869781
>   patch  0.558640828 0.994253200458
> llvm-as
>   master 0.034025959
>   patch  0.033984389 0.99877828572
> the gold plugin fsds
>   master 0.360710529
>   patch  0.356483564 0.988281559145
> clang fsds
>   master 0.640518422
>   patch  0.632329874 0.987215749432
> llvm-as fsds
>   master 0.031569416
>   patch  0.030822055 0.976326423017
> scylla
>   master 3.154770529
>   patch  3.11982016 0.988921422754
>
> Modified:
>     lld/trunk/ELF/OutputSections.cpp
>
> Modified: lld/trunk/ELF/OutputSections.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/
> OutputSections.cpp?rev=282505&r1=282504&r2=282505&view=diff
> ============================================================
> ==================
> --- lld/trunk/ELF/OutputSections.cpp (original)
> +++ lld/trunk/ELF/OutputSections.cpp Tue Sep 27 11:43:49 2016
> @@ -18,8 +18,9 @@
>  #include "llvm/Support/Dwarf.h"
>  #include "llvm/Support/MD5.h"
>  #include "llvm/Support/MathExtras.h"
> -#include "llvm/Support/SHA1.h"
>  #include "llvm/Support/RandomNumberGenerator.h"
> +#include "llvm/Support/SHA1.h"
> +#include "llvm/Support/xxhash.h"
>
>  using namespace llvm;
>  using namespace llvm::dwarf;
> @@ -1681,59 +1682,12 @@ template <class ELFT> void BuildIdSectio
>    HashBuf = Buf + 16;
>  }
>
> -static uint64_t murmurHash64A(const void *Key, int Len) {
> -  uint64_t Seed = 0;
> -  const uint64_t M = 0xc6a4a7935bd1e995LLU;
> -  const int R = 47;
> -
> -  uint64_t H = Seed ^ (Len * M);
> -
> -  const uint64_t *Data = (const uint64_t *)Key;
> -  const uint64_t *End = Data + (Len / 8);
> -
> -  while (Data != End) {
> -    uint64_t K = *Data++;
> -
> -    K *= M;
> -    K ^= K >> R;
> -    K *= M;
> -
> -    H ^= K;
> -    H *= M;
> -  }
> -
> -  const unsigned char *Data2 = (const unsigned char *)Data;
> -  switch (Len & 7) {
> -  case 7:
> -    H ^= uint64_t(Data2[6]) << 48;
> -  case 6:
> -    H ^= uint64_t(Data2[5]) << 40;
> -  case 5:
> -    H ^= uint64_t(Data2[4]) << 32;
> -  case 4:
> -    H ^= uint64_t(Data2[3]) << 24;
> -  case 3:
> -    H ^= uint64_t(Data2[2]) << 16;
> -  case 2:
> -    H ^= uint64_t(Data2[1]) << 8;
> -  case 1:
> -    H ^= uint64_t(Data2[0]);
> -    H *= M;
> -  };
> -
> -  H ^= H >> R;
> -  H *= M;
> -  H ^= H >> R;
> -
> -  return H;
> -}
> -
>  template <class ELFT>
>  void BuildIdFastHash<ELFT>::writeBuildId(ArrayRef<uint8_t> Buf) {
>    const endianness E = ELFT::TargetEndianness;
>
> -  // 64-bit murmur2 hash
> -  uint64_t Hash = murmurHash64A(Buf.data(), Buf.size());
> +  // 64-bit xxhash
> +  uint64_t Hash = xxHash64(StringRef((const char *)Buf.data(),
> Buf.size()));
>    write64<E>(this->HashBuf, Hash);
>  }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160928/2c0e58cf/attachment.html>


More information about the llvm-commits mailing list