summaryrefslogtreecommitdiff
path: root/include/llvm/ADT/PointerIntPair.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-11-29 01:18:05 +0000
committerChris Lattner <sabre@nondot.org>2008-11-29 01:18:05 +0000
commit9ac30537aa3c201b6950bc708e02b1885c288c8d (patch)
tree323b82c4740d9ff97ebba2d10cf261e2bf9695db /include/llvm/ADT/PointerIntPair.h
parentd55da4de048684e3791dbae8018666e5b7549506 (diff)
downloadllvm-9ac30537aa3c201b6950bc708e02b1885c288c8d.tar.gz
llvm-9ac30537aa3c201b6950bc708e02b1885c288c8d.tar.bz2
llvm-9ac30537aa3c201b6950bc708e02b1885c288c8d.tar.xz
Fix spello, add DenseMapInfo specialization for PointerIntPair.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60228 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT/PointerIntPair.h')
-rw-r--r--include/llvm/ADT/PointerIntPair.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/include/llvm/ADT/PointerIntPair.h b/include/llvm/ADT/PointerIntPair.h
index 6b437b9ff5..60671da77e 100644
--- a/include/llvm/ADT/PointerIntPair.h
+++ b/include/llvm/ADT/PointerIntPair.h
@@ -18,6 +18,9 @@
namespace llvm {
+template<typename T>
+struct DenseMapInfo;
+
/// PointerIntPair - This class implements a pair of a pointer and small
/// integer. It is designed to represent this in the space required by one
/// pointer by bitmangling the integer into the low part of the pointer. This
@@ -65,5 +68,24 @@ public:
}
};
+// Provide specialization of DenseMapInfo for PointerIntPair.
+template<typename PointerTy, unsigned IntBits, typename IntType>
+struct DenseMapInfo<PointerIntPair<PointerTy, IntBits, IntType> > {
+ typedef PointerIntPair<PointerTy, IntBits, IntType> Ty;
+ static Ty getEmptyKey() {
+ return Ty(reinterpret_cast<PointerTy>(-1),
+ IntType((1 << IntBits)-1));
+ }
+ static Ty getTombstoneKey() {
+ return Ty(reinterpret_cast<PointerTy>(-2), IntType(0));
+ }
+ static unsigned getHashValue(Ty V) {
+ uintptr_t IV = reinterpret_cast<uintptr_t>(V.getOpaqueValue());
+ return unsigned(IV) ^ unsigned(IV >> 9);
+ }
+ static bool isEqual(const Ty &LHS, const Ty &RHS) { return LHS == RHS; }
+ static bool isPod() { return true; }
+};
+
} // end namespace llvm
#endif