r206640 - Teach users of OnDiskHashTable to define hash_value and offset types

Duncan P. N. Exon Smith dexonsmith at apple.com
Fri Apr 18 16:48:48 PDT 2014


On 2014-Apr-18, at 13:27, Justin Bogner <mail at justinbogner.com> wrote:

> Author: bogner
> Date: Fri Apr 18 15:27:24 2014
> New Revision: 206640
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=206640&view=rev
> Log:
> Teach users of OnDiskHashTable to define hash_value and offset types
> 
> This paves the way to making OnDiskHashTable work with hashes that are
> not 32 bits wide and to making OnDiskHashTable work very large hash
> tables. The LLVM change to use these types is upcoming.
> 
> Modified:
>    cfe/trunk/lib/Frontend/CacheTokens.cpp
>    cfe/trunk/lib/Lex/PTHLexer.cpp
>    cfe/trunk/lib/Serialization/ASTReaderInternals.h
>    cfe/trunk/lib/Serialization/ASTWriter.cpp
>    cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp
> 
> Modified: cfe/trunk/lib/Frontend/CacheTokens.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CacheTokens.cpp?rev=206640&r1=206639&r2=206640&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CacheTokens.cpp (original)
> +++ cfe/trunk/lib/Frontend/CacheTokens.cpp Fri Apr 18 15:27:24 2014
> @@ -117,7 +117,10 @@ public:
>   typedef PTHEntry data_type;
>   typedef const PTHEntry& data_type_ref;
> 
> -  static unsigned ComputeHash(PTHEntryKeyVariant V) {
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> +
> +  static hash_value_type ComputeHash(PTHEntryKeyVariant V) {
>     return llvm::HashString(V.getString());
>   }
> 
> @@ -599,7 +602,10 @@ public:
>   typedef uint32_t  data_type;
>   typedef data_type data_type_ref;
> 
> -  static unsigned ComputeHash(PTHIdKey* key) {
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> +
> +  static hash_value_type ComputeHash(PTHIdKey* key) {
>     return llvm::HashString(key->II->getName());
>   }
> 
> 
> Modified: cfe/trunk/lib/Lex/PTHLexer.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PTHLexer.cpp?rev=206640&r1=206639&r2=206640&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Lex/PTHLexer.cpp (original)
> +++ cfe/trunk/lib/Lex/PTHLexer.cpp Fri Apr 18 15:27:24 2014
> @@ -318,8 +318,10 @@ public:
> class PTHFileLookupCommonTrait {
> public:
>   typedef std::pair<unsigned char, const char*> internal_key_type;
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> 
> -  static unsigned ComputeHash(internal_key_type x) {
> +  static hash_value_type ComputeHash(internal_key_type x) {
>     return llvm::HashString(x.second);
>   }
> 
> @@ -363,13 +365,11 @@ public:
> 
> class PTHStringLookupTrait {
> public:
> -  typedef uint32_t
> -          data_type;
> -
> -  typedef const std::pair<const char*, unsigned>
> -          external_key_type;
> -
> +  typedef uint32_t data_type;
> +  typedef const std::pair<const char*, unsigned> external_key_type;
>   typedef external_key_type internal_key_type;
> +  typedef uint32_t hash_value_type;

Looks to me like this one should be "unsigned", not "uint32_t", for
consistency with the old ComputeHash.  (Not sure it matters?)

> +  typedef unsigned offset_type;
> 
>   static bool EqualKey(const internal_key_type& a,
>                        const internal_key_type& b) {
> @@ -377,7 +377,7 @@ public:
>                                   : false;
>   }
> 
> -  static unsigned ComputeHash(const internal_key_type& a) {
> +  static hash_value_type ComputeHash(const internal_key_type& a) {
>     return llvm::HashString(StringRef(a.first, a.second));
>   }
> 
> 
> Modified: cfe/trunk/lib/Serialization/ASTReaderInternals.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderInternals.h?rev=206640&r1=206639&r2=206640&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReaderInternals.h (original)
> +++ cfe/trunk/lib/Serialization/ASTReaderInternals.h Fri Apr 18 15:27:24 2014
> @@ -46,6 +46,8 @@ public:
>   /// particular lookup t
>   typedef llvm::support::ulittle32_t LE32DeclID;
>   typedef std::pair<LE32DeclID *, LE32DeclID *> data_type;
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> 
>   /// \brief Special internal key for declaration names.
>   /// The hash table creates keys for comparison; we do not create
> @@ -67,7 +69,7 @@ public:
>     return a.Kind == b.Kind && a.Data == b.Data;
>   }
> 
> -  unsigned ComputeHash(const DeclNameKey &Key) const;
> +  hash_value_type ComputeHash(const DeclNameKey &Key) const;
>   internal_key_type GetInternalKey(const external_key_type& Name) const;
> 
>   static std::pair<unsigned, unsigned>
> @@ -92,13 +94,14 @@ class ASTIdentifierLookupTraitBase {
> public:
>   typedef StringRef external_key_type;
>   typedef StringRef internal_key_type;
> -  
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> 
>   static bool EqualKey(const internal_key_type& a, const internal_key_type& b) {
>     return a == b;
>   }
> 
> -  static unsigned ComputeHash(const internal_key_type& a);
> +  static hash_value_type ComputeHash(const internal_key_type& a);
> 
>   static std::pair<unsigned, unsigned>
>   ReadKeyDataLength(const unsigned char*& d);
> @@ -160,6 +163,8 @@ public:
> 
>   typedef Selector external_key_type;
>   typedef external_key_type internal_key_type;
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> 
>   ASTSelectorLookupTrait(ASTReader &Reader, ModuleFile &F) 
>     : Reader(Reader), F(F) { }
> @@ -169,7 +174,7 @@ public:
>     return a == b;
>   }
> 
> -  static unsigned ComputeHash(Selector Sel);
> +  static hash_value_type ComputeHash(Selector Sel);
> 
>   static const internal_key_type&
>   GetInternalKey(const external_key_type& x) { return x; }
> @@ -211,12 +216,14 @@ public:
>   typedef const internal_key_type &internal_key_ref;
> 
>   typedef HeaderFileInfo data_type;
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> 
>   HeaderFileInfoTrait(ASTReader &Reader, ModuleFile &M, HeaderSearch *HS,
>                       const char *FrameworkStrings)
>   : Reader(Reader), M(M), HS(HS), FrameworkStrings(FrameworkStrings) { }
> 
> -  static unsigned ComputeHash(internal_key_ref ikey);
> +  static hash_value_type ComputeHash(internal_key_ref ikey);
>   static internal_key_type GetInternalKey(const FileEntry *FE);
>   bool EqualKey(internal_key_ref a, internal_key_ref b);
> 
> 
> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=206640&r1=206639&r2=206640&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Fri Apr 18 15:27:24 2014
> @@ -1482,8 +1482,10 @@ namespace {
> 
>     typedef HeaderFileInfo data_type;
>     typedef const data_type &data_type_ref;
> +    typedef unsigned hash_value_type;
> +    typedef unsigned offset_type;
> 
> -    static unsigned ComputeHash(key_type_ref key) {
> +    static hash_value_type ComputeHash(key_type_ref key) {
>       // The hash is based only on size/time of the file, so that the reader can
>       // match even when symlinking or excess path elements ("foo/../", "../")
>       // change the form of the name. However, complete path is still the key.
> @@ -1855,8 +1857,10 @@ public:
> 
>   typedef Data data_type;
>   typedef const data_type &data_type_ref;
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> 
> -  static unsigned ComputeHash(IdentID IdID) {
> +  static hash_value_type ComputeHash(IdentID IdID) {
>     return llvm::hash_value(IdID);
>   }
> 
> @@ -2738,9 +2742,12 @@ public:
>   };
>   typedef const data_type& data_type_ref;
> 
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> +
>   explicit ASTMethodPoolTrait(ASTWriter &Writer) : Writer(Writer) { }
> 
> -  static unsigned ComputeHash(Selector Sel) {
> +  static hash_value_type ComputeHash(Selector Sel) {
>     return serialization::ComputeHash(Sel);
>   }
> 
> @@ -3090,11 +3097,14 @@ public:
>   typedef IdentID data_type;
>   typedef data_type data_type_ref;
> 
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> +
>   ASTIdentifierTableTrait(ASTWriter &Writer, Preprocessor &PP, 
>                           IdentifierResolver &IdResolver, bool IsModule)
>     : Writer(Writer), PP(PP), IdResolver(IdResolver), IsModule(IsModule) { }
> 
> -  static unsigned ComputeHash(const IdentifierInfo* II) {
> +  static hash_value_type ComputeHash(const IdentifierInfo* II) {
>     return llvm::HashString(II->getName());
>   }
> 
> @@ -3349,9 +3359,12 @@ public:
>   typedef DeclContext::lookup_result data_type;
>   typedef const data_type& data_type_ref;
> 
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> +
>   explicit ASTDeclContextNameLookupTrait(ASTWriter &Writer) : Writer(Writer) { }
> 
> -  unsigned ComputeHash(DeclarationName Name) {
> +  hash_value_type ComputeHash(DeclarationName Name) {
>     llvm::FoldingSetNodeID ID;
>     ID.AddInteger(Name.getNameKind());
> 
> 
> Modified: cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp?rev=206640&r1=206639&r2=206640&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp (original)
> +++ cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp Fri Apr 18 15:27:24 2014
> @@ -72,12 +72,14 @@ public:
>   typedef StringRef external_key_type;
>   typedef StringRef internal_key_type;
>   typedef SmallVector<unsigned, 2> data_type;
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> 
>   static bool EqualKey(const internal_key_type& a, const internal_key_type& b) {
>     return a == b;
>   }
> 
> -  static unsigned ComputeHash(const internal_key_type& a) {
> +  static hash_value_type ComputeHash(const internal_key_type& a) {
>     return llvm::HashString(a);
>   }
> 
> @@ -645,8 +647,10 @@ public:
>   typedef StringRef key_type_ref;
>   typedef SmallVector<unsigned, 2> data_type;
>   typedef const SmallVector<unsigned, 2> &data_type_ref;
> +  typedef unsigned hash_value_type;
> +  typedef unsigned offset_type;
> 
> -  static unsigned ComputeHash(key_type_ref Key) {
> +  static hash_value_type ComputeHash(key_type_ref Key) {
>     return llvm::HashString(Key);
>   }
> 
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list