- iterator I = find(n, Subtree);
- if (I == end()) {
- Edge edge(n, R, Subtree);
- iterator Insert = std::lower_bound(begin(), end(), edge);
- Relations.insert(Insert, edge);
- } else {
- LatticeVal LV = static_cast<LatticeVal>(I->LV & R);
- assert(validPredicate(LV) && "Invalid union of lattice values.");
- if (LV != I->LV) {
- if (Subtree != I->Subtree) {
- assert(Subtree->DominatedBy(I->Subtree) &&
- "Find returned subtree that doesn't apply.");
-
- Edge edge(n, R, Subtree);
- iterator Insert = std::lower_bound(begin(), end(), edge);
- Relations.insert(Insert, edge); // invalidates I
- I = find(n, Subtree);
- }