diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2007-09-16 22:31:47 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@dberlin.org> | 2007-09-16 22:31:47 +0000 |
commit | 7f44657c2f4409416a083a9e63d2b4ea7cdca43e (patch) | |
tree | 994cc8030cda3c8dbce3a044b62138adb20c1633 /include/llvm | |
parent | aad158891c1881a81cbb8bf296d31aab91ffeb2b (diff) | |
download | external_llvm-7f44657c2f4409416a083a9e63d2b4ea7cdca43e.zip external_llvm-7f44657c2f4409416a083a9e63d2b4ea7cdca43e.tar.gz external_llvm-7f44657c2f4409416a083a9e63d2b4ea7cdca43e.tar.bz2 |
Fix a few bugs related to zero'ing of elements
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42017 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm')
-rw-r--r-- | include/llvm/ADT/SparseBitVector.h | 59 |
1 files changed, 14 insertions, 45 deletions
diff --git a/include/llvm/ADT/SparseBitVector.h b/include/llvm/ADT/SparseBitVector.h index cfa57f4..5622aab 100644 --- a/include/llvm/ADT/SparseBitVector.h +++ b/include/llvm/ADT/SparseBitVector.h @@ -212,7 +212,7 @@ public: BitWord old = changed ? 0 : Bits[i]; Bits[i] |= RHS.Bits[i]; - if (old != Bits[i]) + if (!changed && old != Bits[i]) changed = true; } return changed; @@ -242,17 +242,17 @@ public: if (Bits[i] != 0) allzero = false; - if (old != Bits[i]) + if (!changed && old != Bits[i]) changed = true; } - BecameZero = !allzero; + BecameZero = allzero; return changed; } // Intersect this Element with the complement of RHS and return true if this // one changed. BecameZero is set to true if this element became all-zero // bits. bool intersectWithComplement(const SparseBitVectorElement &RHS, - bool &BecameZero) { + bool &BecameZero) { bool changed = false; bool allzero = true; @@ -264,10 +264,10 @@ public: if (Bits[i] != 0) allzero = false; - if (old != Bits[i]) + if (!changed && old != Bits[i]) changed = true; } - BecameZero = !allzero; + BecameZero = allzero; return changed; } // Three argument version of intersectWithComplement that intersects @@ -283,7 +283,7 @@ public: if (Bits[i] != 0) allzero = false; } - BecameZero = !allzero; + BecameZero = allzero; } }; @@ -548,12 +548,6 @@ public: if (Elements.empty() && RHS.Elements.empty()) return false; - // See if the first bitmap element is the same in both. This is only - // possible if they are the same bitmap. - if (Iter1 != Elements.end() && Iter2 != RHS.Elements.end()) - if (*Iter1 == *Iter2) - return false; - while (Iter2 != RHS.Elements.end()) { if (Iter1 == Elements.end() || Iter1->index() > Iter2->index()) { Elements.insert(Iter1, @@ -582,12 +576,6 @@ public: if (Elements.empty() && RHS.Elements.empty()) return false; - // See if the first bitmap element is the same in both. This is only - // possible if they are the same bitmap. - if (Iter1 != Elements.end() && Iter2 != RHS.Elements.end()) - if (*Iter1 == *Iter2) - return false; - // Loop through, intersecting as we go, erasing elements when necessary. while (Iter2 != RHS.Elements.end()) { if (Iter1 == Elements.end()) @@ -600,9 +588,11 @@ public: changed |= Iter1->intersectWith(*Iter2, BecameZero); if (BecameZero) { ElementListIter IterTmp = Iter1; + ++Iter1; Elements.erase(IterTmp); + } else { + ++Iter1; } - ++Iter1; ++Iter2; } else { ElementListIter IterTmp = Iter1; @@ -626,14 +616,6 @@ public: if (Elements.empty() && RHS.Elements.empty()) return false; - // See if the first bitmap element is the same in both. This is only - // possible if they are the same bitmap. - if (Iter1 != Elements.end() && Iter2 != RHS.Elements.end()) - if (*Iter1 == *Iter2) { - Elements.clear(); - return true; - } - // Loop through, intersecting as we go, erasing elements when necessary. while (Iter2 != RHS.Elements.end()) { if (Iter1 == Elements.end()) @@ -646,9 +628,11 @@ public: changed |= Iter1->intersectWithComplement(*Iter2, BecameZero); if (BecameZero) { ElementListIter IterTmp = Iter1; + ++Iter1; Elements.erase(IterTmp); + } else { + ++Iter1; } - ++Iter1; ++Iter2; } else { ElementListIter IterTmp = Iter1; @@ -678,13 +662,6 @@ public: if (RHS1.empty() && RHS2.empty()) return; - // See if the first bitmap element is the same in both. This is only - // possible if they are the same bitmap. - if (Iter1 != RHS1.Elements.end() && Iter2 != RHS2.Elements.end()) - if (*Iter1 == *Iter2) { - return; - } - // Loop through, intersecting as we go, erasing elements when necessary. while (Iter2 != RHS2.Elements.end()) { if (Iter1 == RHS1.Elements.end()) @@ -702,7 +679,6 @@ public: } else delete NewElement; - ++Iter1; ++Iter2; } else { @@ -740,13 +716,6 @@ public: if (Elements.empty() && RHS.Elements.empty()) return false; - // See if the first bitmap element is the same in both. This is only - // possible if they are the same bitmap. - if (Iter1 != Elements.end() && Iter2 != RHS.Elements.end()) - if (*Iter1 == *Iter2) { - return true; - } - // Loop through, intersecting stopping when we hit bits in common. while (Iter2 != RHS.Elements.end()) { if (Iter1 == Elements.end()) @@ -824,7 +793,7 @@ inline bool operator &=(SparseBitVector<ElementSize> &LHS, const SparseBitVector<ElementSize> *RHS) { return LHS &= (*RHS); } - + // Dump a SparseBitVector to a stream template <unsigned ElementSize> |