3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-13 22:41:15 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2017-10-07 00:09:28 +01:00
commit cabdc1f64c

View file

@ -100,33 +100,19 @@ bool expr_dominators::compute_dominators() {
for (unsigned i = 0; i + 1 < m_post2expr.size(); ++i) { for (unsigned i = 0; i + 1 < m_post2expr.size(); ++i) {
expr * child = m_post2expr[i]; expr * child = m_post2expr[i];
ptr_vector<expr> const& p = m_parents[child]; ptr_vector<expr> const& p = m_parents[child];
SASSERT(!p.empty()); expr * new_idom = 0, *idom2 = 0;
if (p.size() == 1) { for (auto& pred : p) {
if (!m_doms.contains(child)) { if (m_doms.contains(pred)) {
m_doms.insert(child, p[0]); new_idom = !new_idom ? pred : intersect(new_idom, pred);
change = true; }
}
} }
else { if (!new_idom) {
expr * new_idom = 0, *idom2 = 0; m_doms.insert(child, p[0]);
for (unsigned j = 0; j < p.size(); ++j) { change = true;
if (!new_idom) { }
m_doms.find(p[j], new_idom); else if (!m_doms.find(child, idom2) || idom2 != new_idom) {
} m_doms.insert(child, new_idom);
else if (m_doms.find(p[j], idom2)) { change = true;
new_idom = intersect(new_idom, idom2);
}
}
if (!new_idom) {
m_doms.insert(child, p[0]);
TRACE("simplify", tout << expr_ref(child, m) << " |-> " << expr_ref(p[0], m) << "\n";);
change = true;
}
else if (!m_doms.find(child, idom2) || idom2 != new_idom) {
m_doms.insert(child, new_idom);
TRACE("simplify", tout << expr_ref(child, m) << " |-> " << expr_ref(new_idom, m) << "\n";);
change = true;
}
} }
} }
iterations *= 2; iterations *= 2;