summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2012-05-19 19:15:32 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2012-05-19 19:15:32 +0000
commit2dded79f1c20010b89f1af46ebfbf52435f21695 (patch)
treee6b6eedfb0d6ad37f74385f62e87c7fb6790c4c1
parent1ed0fa452c68d0dc7b260ec85b681d83f90e9180 (diff)
downloadbcm5719-llvm-2dded79f1c20010b89f1af46ebfbf52435f21695.tar.gz
bcm5719-llvm-2dded79f1c20010b89f1af46ebfbf52435f21695.zip
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. llvm-svn: 157124
-rw-r--r--llvm/include/llvm/ADT/ValueMap.h22
1 files changed, 17 insertions, 5 deletions
diff --git a/llvm/include/llvm/ADT/ValueMap.h b/llvm/include/llvm/ADT/ValueMap.h
index 707d07d32cb..121abc2b65f 100644
--- a/llvm/include/llvm/ADT/ValueMap.h
+++ b/llvm/include/llvm/ADT/ValueMap.h
@@ -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;
+ }
};
OpenPOWER on IntegriCloud