<div dir="ltr">Maybe, but if this could improve performance in most cases, why don't we make DenseMap to save StringRef's hash values even if we don't use that wrapper?</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 6, 2016 at 9:58 AM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It is amusing how useful this simple template is. How about we add it<br>
to the programmers manual?<br>
<br>
Cheers,<br>
Rafael<br>
<br>
<br>
On 5 May 2016 at 20:51, Rui Ueyama via llvm-commits<br>
<div class="HOEnZb"><div class="h5"><<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: ruiu<br>
> Date: Thu May  5 19:51:58 2016<br>
> New Revision: 268698<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=268698&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=268698&view=rev</a><br>
> Log:<br>
> Make StringTableBuilder to cache hash values.<br>
><br>
> This change seems to speed up LLD a bit if it has a lot of mergeable<br>
> sections. The number is below. It's not too bad for a small patch.<br>
><br>
> Time to link Clang (debug build):<br>
><br>
> w/o patch 6.3696 seconds<br>
> w/patch   6.2746 seconds (-1.5%)<br>
><br>
> Differential Revision: <a href="http://reviews.llvm.org/D19933" rel="noreferrer" target="_blank">http://reviews.llvm.org/D19933</a><br>
><br>
> Modified:<br>
>     llvm/trunk/include/llvm/MC/StringTableBuilder.h<br>
>     llvm/trunk/lib/MC/StringTableBuilder.cpp<br>
><br>
> Modified: llvm/trunk/include/llvm/MC/StringTableBuilder.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/StringTableBuilder.h?rev=268698&r1=268697&r2=268698&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/StringTableBuilder.h?rev=268698&r1=268697&r2=268698&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/MC/StringTableBuilder.h (original)<br>
> +++ llvm/trunk/include/llvm/MC/StringTableBuilder.h Thu May  5 19:51:58 2016<br>
> @@ -23,7 +23,7 @@ public:<br>
><br>
>  private:<br>
>    SmallString<256> StringTable;<br>
> -  DenseMap<StringRef, size_t> StringIndexMap;<br>
> +  DenseMap<CachedHash<StringRef>, size_t> StringIndexMap;<br>
>    size_t Size = 0;<br>
>    Kind K;<br>
>    unsigned Alignment;<br>
> @@ -57,7 +57,10 @@ public:<br>
>    /// after the table is finalized.<br>
>    size_t getOffset(StringRef S) const;<br>
><br>
> -  const DenseMap<StringRef, size_t> &getMap() const { return StringIndexMap; }<br>
> +  const DenseMap<CachedHash<StringRef>, size_t> &getMap() const {<br>
> +    return StringIndexMap;<br>
> +  }<br>
> +<br>
>    size_t getSize() const { return Size; }<br>
>    void clear();<br>
><br>
><br>
> Modified: llvm/trunk/lib/MC/StringTableBuilder.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/StringTableBuilder.cpp?rev=268698&r1=268697&r2=268698&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/StringTableBuilder.cpp?rev=268698&r1=268697&r2=268698&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/MC/StringTableBuilder.cpp (original)<br>
> +++ llvm/trunk/lib/MC/StringTableBuilder.cpp Thu May  5 19:51:58 2016<br>
> @@ -34,11 +34,11 @@ StringTableBuilder::StringTableBuilder(K<br>
>    }<br>
>  }<br>
><br>
> -typedef std::pair<StringRef, size_t> StringPair;<br>
> +typedef std::pair<CachedHash<StringRef>, size_t> StringPair;<br>
><br>
>  // Returns the character at Pos from end of a string.<br>
>  static int charTailAt(StringPair *P, size_t Pos) {<br>
> -  StringRef S = P->first;<br>
> +  StringRef S = P->first.Val;<br>
>    if (Pos >= S.size())<br>
>      return -1;<br>
>    return (unsigned char)S[S.size() - Pos - 1];<br>
> @@ -86,7 +86,7 @@ void StringTableBuilder::finalizeInOrder<br>
>  }<br>
><br>
>  void StringTableBuilder::finalizeStringTable(bool Optimize) {<br>
> -  typedef std::pair<StringRef, size_t> StringOffsetPair;<br>
> +  typedef std::pair<CachedHash<StringRef>, size_t> StringOffsetPair;<br>
>    std::vector<StringOffsetPair *> Strings;<br>
>    Strings.reserve(StringIndexMap.size());<br>
>    for (StringOffsetPair &P : StringIndexMap)<br>
> @@ -121,7 +121,7 @@ void StringTableBuilder::finalizeStringT<br>
><br>
>    StringRef Previous;<br>
>    for (StringOffsetPair *P : Strings) {<br>
> -    StringRef S = P->first;<br>
> +    StringRef S = P->first.Val;<br>
>      if (K == WinCOFF)<br>
>        assert(S.size() > COFF::NameSize && "Short string in COFF string table!");<br>
><br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>