[llvm-commits] [llvm] r67990 - in /llvm/trunk/include/llvm/ADT: DenseMap.h PointerIntPair.h
Chris Lattner
sabre at nondot.org
Sat Mar 28 23:33:23 PDT 2009
Author: lattner
Date: Sun Mar 29 01:33:22 2009
New Revision: 67990
URL: http://llvm.org/viewvc/llvm-project?rev=67990&view=rev
Log:
When forming sentinels for empty/tombstone, make sure to respect the
pointer's expected number of zero low-bits.
This should fix the breakage I introduced recently.
Modified:
llvm/trunk/include/llvm/ADT/DenseMap.h
llvm/trunk/include/llvm/ADT/PointerIntPair.h
Modified: llvm/trunk/include/llvm/ADT/DenseMap.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/DenseMap.h?rev=67990&r1=67989&r2=67990&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/DenseMap.h (original)
+++ llvm/trunk/include/llvm/ADT/DenseMap.h Sun Mar 29 01:33:22 2009
@@ -14,7 +14,7 @@
#ifndef LLVM_ADT_DENSEMAP_H
#define LLVM_ADT_DENSEMAP_H
-#include "llvm/Support/DataTypes.h"
+#include "llvm/Support/PointerLikeTypeTraits.h"
#include "llvm/Support/MathExtras.h"
#include <cassert>
#include <utility>
@@ -33,8 +33,16 @@
// Provide DenseMapInfo for all pointers.
template<typename T>
struct DenseMapInfo<T*> {
- static inline T* getEmptyKey() { return reinterpret_cast<T*>(-1); }
- static inline T* getTombstoneKey() { return reinterpret_cast<T*>(-2); }
+ static inline T* getEmptyKey() {
+ intptr_t Val = -1;
+ Val <<= PointerLikeTypeTraits<T*>::NumLowBitsAvailable;
+ return reinterpret_cast<T*>(Val);
+ }
+ static inline T* getTombstoneKey() {
+ intptr_t Val = -2;
+ Val <<= PointerLikeTypeTraits<T*>::NumLowBitsAvailable;
+ return reinterpret_cast<T*>(Val);
+ }
static unsigned getHashValue(const T *PtrVal) {
return (unsigned((uintptr_t)PtrVal) >> 4) ^
(unsigned((uintptr_t)PtrVal) >> 9);
Modified: llvm/trunk/include/llvm/ADT/PointerIntPair.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/PointerIntPair.h?rev=67990&r1=67989&r2=67990&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/PointerIntPair.h (original)
+++ llvm/trunk/include/llvm/ADT/PointerIntPair.h Sun Mar 29 01:33:22 2009
@@ -107,11 +107,14 @@
struct DenseMapInfo<PointerIntPair<PointerTy, IntBits, IntType> > {
typedef PointerIntPair<PointerTy, IntBits, IntType> Ty;
static Ty getEmptyKey() {
- return Ty(reinterpret_cast<PointerTy>(-1 << IntBits),
- IntType((1 << IntBits)-1));
+ intptr_t Val = -1;
+ Val <<= PointerLikeTypeTraits<PointerTy>::NumLowBitsAvailable;
+ return Ty(reinterpret_cast<PointerTy>(Val), IntType((1 << IntBits)-1));
}
static Ty getTombstoneKey() {
- return Ty(reinterpret_cast<PointerTy>(-2 << IntBits), IntType(0));
+ intptr_t Val = -2;
+ Val <<= PointerLikeTypeTraits<PointerTy>::NumLowBitsAvailable;
+ return Ty(reinterpret_cast<PointerTy>(Val), IntType(0));
}
static unsigned getHashValue(Ty V) {
uintptr_t IV = reinterpret_cast<uintptr_t>(V.getOpaqueValue());
More information about the llvm-commits
mailing list