1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00

StringRef: add DenseMapInfo for StringRef.

Remove the implementation in include/llvm/Support/YAMLTraits.h.
Added a DenseMap type DITypeHashMap in DebugInfo.h:
  DenseMap<std::pair<StringRef, unsigned>, MDNode*>

llvm-svn: 185852
This commit is contained in:
Manman Ren 2013-07-08 19:17:48 +00:00
parent 993565f337
commit 9e950598ce
4 changed files with 18 additions and 9 deletions

View File

@ -548,6 +548,14 @@ namespace llvm {
template <typename T> struct isPodLike; template <typename T> struct isPodLike;
template <> struct isPodLike<StringRef> { static const bool value = true; }; 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 #endif

View File

@ -17,6 +17,7 @@
#ifndef LLVM_DEBUGINFO_H #ifndef LLVM_DEBUGINFO_H
#define LLVM_DEBUGINFO_H #define LLVM_DEBUGINFO_H
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringRef.h"
@ -45,6 +46,9 @@ namespace llvm {
class DIType; class DIType;
class DIObjCProperty; 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. /// DIDescriptor - A thin wraper around MDNode to access encoded debug info.
/// This should not be stored in a container, because the underlying MDNode /// This should not be stored in a container, because the underlying MDNode
/// may change in certain situations. /// may change in certain situations.

View File

@ -760,15 +760,7 @@ private:
} }
static inline bool classof(const MapHNode *) { return true; } static inline bool classof(const MapHNode *) { return true; }
struct StrMappingInfo { typedef llvm::DenseMap<StringRef, HNode*> NameToNode;
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;
bool isValidKey(StringRef key); bool isValidKey(StringRef key);

View File

@ -11,6 +11,7 @@
#include "llvm/ADT/APInt.h" #include "llvm/ADT/APInt.h"
#include "llvm/ADT/Hashing.h" #include "llvm/ADT/Hashing.h"
#include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/OwningPtr.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/edit_distance.h" #include "llvm/ADT/edit_distance.h"
#include <bitset> #include <bitset>
@ -465,3 +466,7 @@ bool StringRef::getAsInteger(unsigned Radix, APInt &Result) const {
hash_code llvm::hash_value(StringRef S) { hash_code llvm::hash_value(StringRef S) {
return hash_combine_range(S.begin(), S.end()); return hash_combine_range(S.begin(), S.end());
} }
unsigned DenseMapInfo<StringRef>::getHashValue(StringRef const val) {
return llvm::HashString(val);
}