Index: include/llvm/ADT/DenseMapInfo.h =================================================================== --- include/llvm/ADT/DenseMapInfo.h +++ include/llvm/ADT/DenseMapInfo.h @@ -30,6 +30,29 @@ //static bool isEqual(const T &LHS, const T &RHS); }; +template struct CachedHash { + CachedHash(T Val) : Val(Val) { Hash = DenseMapInfo::getHashValue(Val); } + CachedHash(T Val, unsigned Hash) : Val(Val), Hash(Hash) {} + T Val; + unsigned Hash; +}; + +// Provide DenseMapInfo for all CachedHash. +template struct DenseMapInfo> { + static CachedHash getEmptyKey() { + T N = DenseMapInfo::getEmptyKey(); + return {N, 0}; + } + static CachedHash getTombstoneKey() { + T N = DenseMapInfo::getTombstoneKey(); + return {N, 0}; + } + static unsigned getHashValue(CachedHash Val) { return Val.Hash; } + static bool isEqual(CachedHash A, CachedHash B) { + return DenseMapInfo::isEqual(A.Val, B.Val); + } +}; + // Provide DenseMapInfo for all pointers. template struct DenseMapInfo {