1
0
mirror of https://github.com/c64scene-ar/llvm-6502.git synced 2025-03-30 20:34:21 +00:00

ValueMap: Use DenseMap's find_as mechanism to reduce use list churn.

Otherwise just looking up a value in the map requires creating a VH, adding it to the use lists and destroying it again.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157124 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2012-05-19 19:15:32 +00:00
parent 4e4c3408a5
commit 96edb648e2

@ -111,20 +111,21 @@ public:
/// count - Return true if the specified key is in the map.
bool count(const KeyT &Val) const {
return Map.count(Wrap(Val));
return Map.find_as(Val) != Map.end();
}
iterator find(const KeyT &Val) {
return iterator(Map.find(Wrap(Val)));
return iterator(Map.find_as(Val));
}
const_iterator find(const KeyT &Val) const {
return const_iterator(Map.find(Wrap(Val)));
return const_iterator(Map.find_as(Val));
}
/// lookup - Return the entry for the specified key, or a default
/// constructed value if no such entry exists.
ValueT lookup(const KeyT &Val) const {
return Map.lookup(Wrap(Val));
typename MapT::const_iterator I = Map.find_as(Val);
return I != Map.end() ? I->second : ValueT();
}
// Inserts key,value pair into the map if the key isn't already in the map.
@ -145,7 +146,12 @@ public:
bool erase(const KeyT &Val) {
return Map.erase(Wrap(Val));
typename MapT::iterator I = Map.find_as(Val);
if (I == Map.end())
return false;
Map.erase(I);
return true;
}
void erase(iterator I) {
return Map.erase(I.base());
@ -256,9 +262,15 @@ struct DenseMapInfo<ValueMapCallbackVH<KeyT, ValueT, Config> > {
static unsigned getHashValue(const VH &Val) {
return PointerInfo::getHashValue(Val.Unwrap());
}
static unsigned getHashValue(const KeyT &Val) {
return PointerInfo::getHashValue(Val);
}
static bool isEqual(const VH &LHS, const VH &RHS) {
return LHS == RHS;
}
static bool isEqual(const KeyT &LHS, const VH &RHS) {
return LHS == RHS;
}
};