Skip to content

Commit 6f24123

Browse files
committed
reduce hash table lookups in expr_abstract in half
1 parent a6e59ea commit 6f24123

File tree

2 files changed

+8
-10
lines changed

2 files changed

+8
-10
lines changed

src/ast/expr_abstract.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,14 @@ void expr_abstractor::operator()(unsigned base, unsigned num_bound, expr* const*
4141

4242
while(!m_stack.empty()) {
4343
curr = m_stack.back();
44-
if (m_map.contains(curr)) {
44+
auto &val = m_map.insert_if_not_there(curr, nullptr);
45+
if (val) {
4546
m_stack.pop_back();
4647
continue;
4748
}
4849
switch(curr->get_kind()) {
4950
case AST_VAR: {
50-
m_map.insert(curr, curr);
51+
val = curr;
5152
m_stack.pop_back();
5253
break;
5354
}
@@ -56,7 +57,7 @@ void expr_abstractor::operator()(unsigned base, unsigned num_bound, expr* const*
5657
bool all_visited = true;
5758
bool changed = false;
5859
m_args.reset();
59-
for (unsigned i = 0; i < a->get_num_args(); ++i) {
60+
for (unsigned i = 0, e = a->get_num_args(); i < e; ++i) {
6061
if (!m_map.find(a->get_arg(i), b)) {
6162
m_stack.push_back(a->get_arg(i));
6263
all_visited = false;
@@ -73,7 +74,7 @@ void expr_abstractor::operator()(unsigned base, unsigned num_bound, expr* const*
7374
} else {
7475
b = curr;
7576
}
76-
m_map.insert(curr, b);
77+
val = b;
7778
m_stack.pop_back();
7879
}
7980
break;
@@ -84,14 +85,14 @@ void expr_abstractor::operator()(unsigned base, unsigned num_bound, expr* const*
8485
expr_ref result1(m);
8586
unsigned new_base = base + q->get_num_decls();
8687

87-
for (unsigned i = 0; i < q->get_num_patterns(); ++i) {
88+
for (unsigned i = 0, e = q->get_num_patterns(); i < e; ++i) {
8889
result1 = expr_abstract(m, new_base, num_bound, bound, q->get_pattern(i));
8990
patterns.push_back(result1.get());
9091
}
9192
result1 = expr_abstract(m, new_base, num_bound, bound, q->get_expr());
9293
b = m.update_quantifier(q, patterns.size(), patterns.data(), result1.get());
9394
m_pinned.push_back(b);
94-
m_map.insert(curr, b);
95+
val = b;
9596
m_stack.pop_back();
9697
break;
9798
}
@@ -115,7 +116,7 @@ void expr_abstract(ast_manager& m, unsigned base, unsigned num_bound, expr* cons
115116
tout << result << "\n";);
116117
}
117118

118-
expr_ref mk_quantifier(quantifier_kind k, ast_manager& m, unsigned num_bound, app* const* bound, expr* n) {
119+
static expr_ref mk_quantifier(quantifier_kind k, ast_manager& m, unsigned num_bound, app* const* bound, expr* n) {
119120
expr_ref result(m);
120121
expr_abstract(m, 0, num_bound, (expr* const*)bound, n, result);
121122
if (num_bound > 0) {

src/ast/expr_abstract.h

-3
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,3 @@ expr_ref mk_forall(ast_manager& m, unsigned num_bound, app* const* bound, expr*
3939
expr_ref mk_exists(ast_manager& m, unsigned num_bound, app* const* bound, expr* n);
4040
inline expr_ref mk_forall(ast_manager& m, app* b, expr* n) { return mk_forall(m, 1, &b, n); }
4141
inline expr_ref mk_forall(ast_manager& m, expr* b, expr* n) { return mk_forall(m, to_app(b), n); }
42-
43-
44-

0 commit comments

Comments
 (0)