3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-10-11 18:28:08 +00:00

cache is_shared information in the enode

observed perf overhead for QF_NIA is that assume_eqs in theory_lra incurs significant overhead when calling is_relevant_and_shared. The call to context::is_shared and the loop checking for beta redexes is a main bottleneck. The bottleneck is avoided by caching the result if is_shared inside the enode. It is invalidated for every merge/unmerge.
This commit is contained in:
Nikolaj Bjorner 2023-09-23 17:19:06 -07:00
parent eea9c0bec6
commit 61319ffd85
6 changed files with 58 additions and 6 deletions

View file

@ -49,6 +49,7 @@ namespace smt {
n->m_iscope_lvl = iscope_lvl;
n->m_lbl_hash = -1;
n->m_proof_is_logged = false;
n->m_is_shared = 2;
unsigned num_args = n->get_num_args();
for (unsigned i = 0; i < num_args; i++) {
enode * arg = app2enode[owner->get_arg(i)->get_id()];