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:
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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user