[lld] r326091 - Re-land: "[Support] Replace HashString with djbHash."

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 26 09:21:39 PST 2018


Jonas Devlieghere via llvm-commits <llvm-commits at lists.llvm.org> writes:

> Author: jdevlieghere
> Date: Mon Feb 26 07:16:42 2018
> New Revision: 326091
>
> URL: http://llvm.org/viewvc/llvm-project?rev=326091&view=rev
> Log:
> Re-land: "[Support] Replace HashString with djbHash."
>
> This patch removes the HashString function from StringExtraces and
> replaces its uses with calls to djbHash from DJB.h.
>
> This change is *almost* NFC. While the algorithm is identical, the
> djbHash implementation in StringExtras used 0 as its default seed while
> the implementation in DJB uses 5381. The latter has been shown to result
> in less collisions and improved avalanching and is used by the DWARF
> accelerator tables.
>
> Because some test were implicitly relying on the hash order, I've
> reverted to using zero as a seed for the following two files:
>
>   lld/include/lld/Core/SymbolTable.h
>   llvm/lib/Support/StringMap.cpp
>
> Differential revision: https://reviews.llvm.org/D43615
>
> Modified:
>     lld/trunk/include/lld/Core/SymbolTable.h
>
> Modified: lld/trunk/include/lld/Core/SymbolTable.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/SymbolTable.h?rev=326091&r1=326090&r2=326091&view=diff
> ==============================================================================
> --- lld/trunk/include/lld/Core/SymbolTable.h (original)
> +++ lld/trunk/include/lld/Core/SymbolTable.h Mon Feb 26 07:16:42 2018
> @@ -12,7 +12,7 @@
>  
>  #include "lld/Common/LLVM.h"
>  #include "llvm/ADT/DenseSet.h"
> -#include "llvm/ADT/StringExtras.h"
> +#include "llvm/Support/DJB.h"
>  #include <cstring>
>  #include <map>
>  #include <vector>
> @@ -65,7 +65,7 @@ private:
>      static StringRef getEmptyKey() { return StringRef(); }
>      static StringRef getTombstoneKey() { return StringRef(" ", 1); }
>      static unsigned getHashValue(StringRef const val) {
> -      return llvm::HashString(val);
> +      return llvm::djbHash(val, 0);

I don't get any test failures if I change this to llvm::djbHash(val);

Cheers,
Rafael


More information about the llvm-commits mailing list