[llvm-commits] [llvm] r60228 - /llvm/trunk/include/llvm/ADT/PointerIntPair.h

Chris Lattner sabre at nondot.org
Fri Nov 28 17:18:07 PST 2008


Author: lattner
Date: Fri Nov 28 19:18:05 2008
New Revision: 60228

URL: http://llvm.org/viewvc/llvm-project?rev=60228&view=rev
Log:
Fix spello, add DenseMapInfo specialization for PointerIntPair.

Modified:
    llvm/trunk/include/llvm/ADT/PointerIntPair.h

Modified: llvm/trunk/include/llvm/ADT/PointerIntPair.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/PointerIntPair.h?rev=60228&r1=60227&r2=60228&view=diff

==============================================================================
--- llvm/trunk/include/llvm/ADT/PointerIntPair.h (original)
+++ llvm/trunk/include/llvm/ADT/PointerIntPair.h Fri Nov 28 19:18:05 2008
@@ -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 @@
   }
 };
 
+// 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





More information about the llvm-commits mailing list