Substantial Changes:
authorTim King <taking@cs.nyu.edu>
Mon, 25 Nov 2013 23:36:06 +0000 (18:36 -0500)
committerTim King <taking@cs.nyu.edu>
Mon, 25 Nov 2013 23:36:06 +0000 (18:36 -0500)
commit22df6e9e8618614e8c33700c55705266912500ae
tree20d78676c1e819517f371e8bc5e6363008fc9154
parent91424455840a7365a328cbcc3d02ec453fe9d0ea
Substantial Changes:

-ITE Simplification
-- Moved the utilities in src/theory/ite_simplifier.{h,cpp} to ite_utilities.
-- Separated simpWithCare from simpITE.
-- Disabled ite simplification on repeat simplification by default. Currently, ite simplification cannot help unless we internally make new constant leaf ites equal to constants.
-- simplifyWithCare() is now only run on QF_AUFBV by default. Speeds up nec benchmarks dramatically.
-- Added a new compress ites pass that is only run on QF_LIA by default.  This targets the perverse structure of ites generated during ite simplification on nec benchmarks.
-- After ite simplification, if the ite simplifier was used many times and the NodeManager's node pool is large enough, this garbage collects: zombies from the NodeManager repeatedly, the ite simplification caches, and the theory rewrite caches.

- TheoryEngine
-- Added TheoryEngine::donePPSimpITE() which orchestrates a number of ite simplifications above.
-- Switched UnconstrainedSimplifier to a pointer.

- RemoveITEs
-- Added a heuristic for checking whether or not a node contains term ites and if not, not bothering to invoke the rest of RemoveITE::run(). This safely changes the type of the cache used on misses of run. This cache can be cleared in the future. Currently disabled pending additional testing.

- TypeChecker
-- added a neverIsConst() rule to the typechecker. Operators that cannot be used in constructing constant expressions by computeIsConst() can now avoid caching on Node::isConst() calls.

- Theory Bool Rewriter
-- Added additional simplifications for boolean ites.

Minor Changes:

- TheoryModel
-- Removed vestigial copy of the ITESimplifier.
- AttributeManager
-- Fixed a garbage collection bug when deleting the node table caused the NodeManager to reclaimZombies() which caused memory corruption by deleting from the attributeManager.

- TypeChecker
-- added a neverIsConst() rule to the typechecker. Operators that cannot be used in constructing constant expressions by computeIsConst() can now avoid caching on Node::isConst() calls.

-NodeManager
-- Added additional functions for reclaiming zombies.
-- Exposed the size of the node pool for heuristics that worry about memory consumption.

- NaryBuilder
-- Added convenience classes for constructing associative and commutative n-ary operators.
-- Added a pass that turns associative and commutative n-ary operators into binary operators. (Mostly for printing expressions for strict parsers.)
30 files changed:
src/Makefile.am
src/expr/attribute.cpp
src/expr/attribute.h
src/expr/mkexpr
src/expr/node.cpp
src/expr/node_manager.cpp
src/expr/node_manager.h
src/expr/options
src/expr/type_checker.h
src/expr/type_checker_template.cpp
src/smt/options
src/smt/smt_engine.cpp
src/theory/booleans/theory_bool_rewriter.cpp
src/theory/booleans/theory_bool_rewriter.h
src/theory/ite_simplifier.cpp [deleted file]
src/theory/ite_simplifier.h [deleted file]
src/theory/ite_utilities.cpp [new file with mode: 0644]
src/theory/ite_utilities.h [new file with mode: 0644]
src/theory/model.h
src/theory/theory_engine.cpp
src/theory/theory_engine.h
src/theory/unconstrained_simplifier.cpp
src/theory/unconstrained_simplifier.h
src/util/Makefile.am
src/util/ite_removal.cpp
src/util/ite_removal.h
src/util/nary_builder.cpp [new file with mode: 0644]
src/util/nary_builder.h [new file with mode: 0644]
test/regress/regress0/arith/Makefile.am
test/regress/regress0/arith/prp-13-24.smt2 [new file with mode: 0644]