+template <> struct DenseMapInfo<sampleprof::CallsiteLocation> {
+ typedef DenseMapInfo<uint32_t> OffsetInfo;
+ typedef DenseMapInfo<uint32_t> DiscriminatorInfo;
+ typedef DenseMapInfo<StringRef> CalleeNameInfo;
+ static inline sampleprof::CallsiteLocation getEmptyKey() {
+ return sampleprof::CallsiteLocation(OffsetInfo::getEmptyKey(),
+ DiscriminatorInfo::getEmptyKey(), "");
+ }
+ static inline sampleprof::CallsiteLocation getTombstoneKey() {
+ return sampleprof::CallsiteLocation(OffsetInfo::getTombstoneKey(),
+ DiscriminatorInfo::getTombstoneKey(),
+ "");
+ }
+ static inline unsigned getHashValue(sampleprof::CallsiteLocation Val) {
+ return DenseMapInfo<std::pair<uint32_t, uint32_t>>::getHashValue(
+ std::pair<uint32_t, uint32_t>(Val.LineOffset, Val.Discriminator));
+ }
+ static inline bool isEqual(sampleprof::CallsiteLocation LHS,
+ sampleprof::CallsiteLocation RHS) {
+ return LHS.LineOffset == RHS.LineOffset &&
+ LHS.Discriminator == RHS.Discriminator &&
+ LHS.CalleeName.equals(RHS.CalleeName);
+ }
+};
+