Do map insert+find in one step. TODO -= 2.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86133 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2009-11-05 14:33:27 +00:00
parent e9684c682a
commit bcaa2157dd

View File

@ -370,13 +370,13 @@ private:
/// by properly seeding constants etc. /// by properly seeding constants etc.
LatticeVal &getValueState(Value *V) { LatticeVal &getValueState(Value *V) {
assert(!isa<StructType>(V->getType()) && "Should use getStructValueState"); assert(!isa<StructType>(V->getType()) && "Should use getStructValueState");
// TODO: Change to do insert+find in one operation.
DenseMap<Value*, LatticeVal>::iterator I = ValueState.find(V);
if (I != ValueState.end())
return I->second; // Common case, already in the map.
LatticeVal &LV = ValueState[V]; std::pair<DenseMap<Value*, LatticeVal>::iterator, bool> I =
ValueState.insert(std::make_pair(V, LatticeVal()));
LatticeVal &LV = I.first->second;
if (!I.second)
return LV; // Common case, already in the map.
if (Constant *C = dyn_cast<Constant>(V)) { if (Constant *C = dyn_cast<Constant>(V)) {
// Undef values remain undefined. // Undef values remain undefined.
@ -395,15 +395,15 @@ private:
assert(isa<StructType>(V->getType()) && "Should use getValueState"); assert(isa<StructType>(V->getType()) && "Should use getValueState");
assert(i < cast<StructType>(V->getType())->getNumElements() && assert(i < cast<StructType>(V->getType())->getNumElements() &&
"Invalid element #"); "Invalid element #");
// TODO: Change to do insert+find in one operation. std::pair<DenseMap<std::pair<Value*, unsigned>, LatticeVal>::iterator,
DenseMap<std::pair<Value*, unsigned>, LatticeVal>::iterator bool> I = StructValueState.insert(
I = StructValueState.find(std::make_pair(V, i)); std::make_pair(std::make_pair(V, i), LatticeVal()));
if (I != StructValueState.end()) LatticeVal &LV = I.first->second;
return I->second; // Common case, already in the map.
if (!I.second)
LatticeVal &LV = StructValueState[std::make_pair(V, i)]; return LV; // Common case, already in the map.
if (Constant *C = dyn_cast<Constant>(V)) { if (Constant *C = dyn_cast<Constant>(V)) {
if (isa<UndefValue>(C)) if (isa<UndefValue>(C))
; // Undef values remain undefined. ; // Undef values remain undefined.