[llvm] r185852 - StringRef: add DenseMapInfo for StringRef.

Eric Christopher echristo at gmail.com
Mon Jul 8 12:48:04 PDT 2013


On Mon, Jul 8, 2013 at 12:47 PM, Manman Ren <mren at apple.com> wrote:
>
> On Jul 8, 2013, at 12:43 PM, Eric Christopher <echristo at gmail.com> wrote:
>
> Remove the implementation in include/llvm/Support/YAMLTraits.h.
> Added a DenseMap type DITypeHashMap in DebugInfo.h:
>  DenseMap<std::pair<StringRef, unsigned>, MDNode*>
>
>
> I imagine you have a follow-on patch for this, but I'd rather see it
> as part of the next patch.
>
>
> Yes there will be follow-on patches that use DITypeHashMap.

To be clear with my statement above, please remove DITypeHashMap for
now. After the amount of confusion in the email threads I'd rather go
through pre-commit review for this code.

Thanks.

-eric

> Yes YAML code is using a DenseMap of StringRef.
>
> Manman
>
>
> I assume, also, that the YAML code is exercising it?
>
> -eric
>
> Modified:
>    llvm/trunk/include/llvm/ADT/StringRef.h
>    llvm/trunk/include/llvm/DebugInfo.h
>    llvm/trunk/include/llvm/Support/YAMLTraits.h
>    llvm/trunk/lib/Support/StringRef.cpp
>
> Modified: llvm/trunk/include/llvm/ADT/StringRef.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/StringRef.h?rev=185852&r1=185851&r2=185852&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/StringRef.h (original)
> +++ llvm/trunk/include/llvm/ADT/StringRef.h Mon Jul  8 14:17:48 2013
> @@ -548,6 +548,14 @@ namespace llvm {
>   template <typename T> struct isPodLike;
>   template <> struct isPodLike<StringRef> { static const bool value = true;
> };
>
> +  template <typename T> struct DenseMapInfo;
> +  template<> struct DenseMapInfo<StringRef> {
> +    static StringRef getEmptyKey() { return StringRef(); }
> +    static StringRef getTombstoneKey() { return StringRef(" ", 0); }
> +    static unsigned getHashValue(StringRef const val);
> +    static bool isEqual(StringRef const lhs,
> +                        StringRef const rhs) { return lhs.equals(rhs); }
> +  };
> }
>
> #endif
>
> Modified: llvm/trunk/include/llvm/DebugInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo.h?rev=185852&r1=185851&r2=185852&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo.h (original)
> +++ llvm/trunk/include/llvm/DebugInfo.h Mon Jul  8 14:17:48 2013
> @@ -17,6 +17,7 @@
> #ifndef LLVM_DEBUGINFO_H
> #define LLVM_DEBUGINFO_H
>
> +#include "llvm/ADT/DenseMap.h"
> #include "llvm/ADT/SmallPtrSet.h"
> #include "llvm/ADT/SmallVector.h"
> #include "llvm/ADT/StringRef.h"
> @@ -45,6 +46,9 @@ namespace llvm {
>   class DIType;
>   class DIObjCProperty;
>
> +  /// Map from a pair <unique type name, an unsigned flag> to MDNode.
> +  typedef DenseMap<std::pair<StringRef, unsigned>, MDNode*> DITypeHashMap;
> +
>   /// DIDescriptor - A thin wraper around MDNode to access encoded debug
> info.
>   /// This should not be stored in a container, because the underlying
> MDNode
>   /// may change in certain situations.
>
> Modified: llvm/trunk/include/llvm/Support/YAMLTraits.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/YAMLTraits.h?rev=185852&r1=185851&r2=185852&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/YAMLTraits.h (original)
> +++ llvm/trunk/include/llvm/Support/YAMLTraits.h Mon Jul  8 14:17:48 2013
> @@ -760,15 +760,7 @@ private:
>     }
>     static inline bool classof(const MapHNode *) { return true; }
>
> -    struct StrMappingInfo {
> -      static StringRef getEmptyKey() { return StringRef(); }
> -      static StringRef getTombstoneKey() { return StringRef(" ", 0); }
> -      static unsigned getHashValue(StringRef const val) {
> -                                                return
> llvm::HashString(val); }
> -      static bool isEqual(StringRef const lhs,
> -                          StringRef const rhs) { return lhs.equals(rhs); }
> -    };
> -    typedef llvm::DenseMap<StringRef, HNode*, StrMappingInfo> NameToNode;
> +    typedef llvm::DenseMap<StringRef, HNode*> NameToNode;
>
>     bool isValidKey(StringRef key);
>
>
> Modified: llvm/trunk/lib/Support/StringRef.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/StringRef.cpp?rev=185852&r1=185851&r2=185852&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Support/StringRef.cpp (original)
> +++ llvm/trunk/lib/Support/StringRef.cpp Mon Jul  8 14:17:48 2013
> @@ -11,6 +11,7 @@
> #include "llvm/ADT/APInt.h"
> #include "llvm/ADT/Hashing.h"
> #include "llvm/ADT/OwningPtr.h"
> +#include "llvm/ADT/StringExtras.h"
> #include "llvm/ADT/edit_distance.h"
> #include <bitset>
>
> @@ -465,3 +466,7 @@ bool StringRef::getAsInteger(unsigned Ra
> hash_code llvm::hash_value(StringRef S) {
>   return hash_combine_range(S.begin(), S.end());
> }
> +
> +unsigned DenseMapInfo<StringRef>::getHashValue(StringRef const val) {
> +  return llvm::HashString(val);
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>



More information about the llvm-commits mailing list