mirror of
https://github.com/Z3Prover/z3
synced 2025-04-14 21:08:46 +00:00
fix some basic mistakes in dominator code
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
597f77cd77
commit
8d8e4cbc51
|
@ -69,7 +69,7 @@ private:
|
||||||
m_post2expr.push_back(e);
|
m_post2expr.push_back(e);
|
||||||
todo.pop_back();
|
todo.pop_back();
|
||||||
for (expr* arg : *a) {
|
for (expr* arg : *a) {
|
||||||
add_edge(m_parents, a, arg);
|
add_edge(m_parents, arg, a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,12 +83,17 @@ private:
|
||||||
unsigned n1 = m_expr2post[x];
|
unsigned n1 = m_expr2post[x];
|
||||||
unsigned n2 = m_expr2post[y];
|
unsigned n2 = m_expr2post[y];
|
||||||
while (n1 != n2) {
|
while (n1 != n2) {
|
||||||
if (n1 < n2)
|
if (n1 < n2) {
|
||||||
n1 = m_doms[n1];
|
x = m_doms[x];
|
||||||
else if (n1 > n2)
|
n1 = m_expr2post[x];
|
||||||
n2 = m_doms[n2];
|
}
|
||||||
|
else if (n1 > n2) {
|
||||||
|
y = m_doms[y];
|
||||||
|
n2 = m_expr2post[y];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return n1;
|
SASSERT(x == y);
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
void compute_dominators() {
|
void compute_dominators() {
|
||||||
|
@ -111,6 +116,7 @@ private:
|
||||||
}
|
}
|
||||||
if (!m_doms.find(child, idom2) || idom2 != new_idom) {
|
if (!m_doms.find(child, idom2) || idom2 != new_idom) {
|
||||||
m_doms.insert(child, new_idom);
|
m_doms.insert(child, new_idom);
|
||||||
|
change = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,10 +124,7 @@ private:
|
||||||
|
|
||||||
void extract_tree() {
|
void extract_tree() {
|
||||||
for (auto const& kv : m_doms) {
|
for (auto const& kv : m_doms) {
|
||||||
expr * child = kv.m_key;
|
add_edge(m_tree, kv.m_value, kv.m_key);
|
||||||
for (expr * parent : kv.m_value) {
|
|
||||||
add_edge(m_tree, parent, child);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue