diff options
author | Mathias Preiner <mathias.preiner@gmail.com> | 2018-08-16 23:07:49 -0700 |
---|---|---|
committer | Andres Noetzli <andres.noetzli@gmail.com> | 2018-08-16 23:07:49 -0700 |
commit | 420f25b1c8103bec7d5fd63a8ade2d9373395e55 (patch) | |
tree | 353bb0635d2f5d0f6fdca69b1dac96a16404de3f /src/smt | |
parent | 7181344be7b4f723ded3fae8d9b269ffc401caa4 (diff) |
Refactor eager atoms preprocessing pass. (#2318)
Diffstat (limited to 'src/smt')
-rw-r--r-- | src/smt/smt_engine.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index 4c63d6592..34a5a6d5b 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -74,6 +74,7 @@ #include "preprocessing/passes/bool_to_bv.h" #include "preprocessing/passes/bv_abstraction.h" #include "preprocessing/passes/bv_ackermann.h" +#include "preprocessing/passes/bv_eager_atoms.h" #include "preprocessing/passes/bv_gauss.h" #include "preprocessing/passes/bv_intro_pow2.h" #include "preprocessing/passes/bv_to_bool.h" @@ -2642,6 +2643,8 @@ void SmtEnginePrivate::finishInit() new BoolToBV(d_preprocessingPassContext.get())); std::unique_ptr<BvAbstraction> bvAbstract( new BvAbstraction(d_preprocessingPassContext.get())); + std::unique_ptr<BvEagerAtoms> bvEagerAtoms( + new BvEagerAtoms(d_preprocessingPassContext.get())); std::unique_ptr<BVAckermann> bvAckermann( new BVAckermann(d_preprocessingPassContext.get())); std::unique_ptr<BVGauss> bvGauss( @@ -2684,6 +2687,8 @@ void SmtEnginePrivate::finishInit() std::move(bvAbstract)); d_preprocessingPassRegistry.registerPass("bv-ackermann", std::move(bvAckermann)); + d_preprocessingPassRegistry.registerPass("bv-eager-atoms", + std::move(bvEagerAtoms)); d_preprocessingPassRegistry.registerPass("bv-gauss", std::move(bvGauss)); d_preprocessingPassRegistry.registerPass("bv-intro-pow2", std::move(bvIntroPow2)); @@ -4394,16 +4399,9 @@ void SmtEnginePrivate::processAssertions() { Trace("smt-proc") << "SmtEnginePrivate::processAssertions() : post-theory-preprocessing" << endl; dumpAssertions("post-theory-preprocessing", d_assertions); - // If we are using eager bit-blasting wrap assertions in fake atom so that - // everything gets bit-blasted to internal SAT solver - if (options::bitblastMode() == theory::bv::BITBLAST_MODE_EAGER) { - for (unsigned i = 0; i < d_assertions.size(); ++i) { - TNode atom = d_assertions[i]; - Node eager_atom = NodeManager::currentNM()->mkNode(kind::BITVECTOR_EAGER_ATOM, atom); - d_assertions.replace(i, eager_atom); - TheoryModel* m = d_smt.d_theoryEngine->getModel(); - m->addSubstitution(eager_atom, atom); - } + if (options::bitblastMode() == theory::bv::BITBLAST_MODE_EAGER) + { + d_preprocessingPassRegistry.getPass("bv-eager-atoms")->apply(&d_assertions); } //notify theory engine new preprocessed assertions |