[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