From 8142799520aa07d6134314761de9d47ac14d27b0 Mon Sep 17 00:00:00 2001 From: ajreynol Date: Thu, 10 Nov 2016 08:55:14 -0600 Subject: [PATCH] Add option for enabling/disabling lazy extended function reduction in bitvectors. --- src/options/bv_options | 3 +++ src/smt/smt_engine.cpp | 5 +++++ src/theory/bv/theory_bv_rewriter.cpp | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/options/bv_options b/src/options/bv_options index 2e6fa2e7a..341060b37 100644 --- a/src/options/bv_options +++ b/src/options/bv_options @@ -69,4 +69,7 @@ expert-option bitvectorQuickXplain --bv-quick-xplain bool :default false expert-option bvIntroducePow2 --bv-intro-pow2 bool :default false introduce bitvector powers of two as a preprocessing pass +option bvLazyRewriteExtf --bv-lazy-rewrite-extf bool :default true :read-write + lazily rewrite extended functions like bv2nat and int2bv + endmodule diff --git a/src/smt/smt_engine.cpp b/src/smt/smt_engine.cpp index d726b836f..e46511e59 100644 --- a/src/smt/smt_engine.cpp +++ b/src/smt/smt_engine.cpp @@ -1594,6 +1594,11 @@ void SmtEngine::setDefaults() { Trace("smt") << "enabling eager bit-vector explanations " << endl; options::bvEagerExplanations.set(true); } + + if( !options::bitvectorEqualitySolver() ){ + Trace("smt") << "disabling bvLazyRewriteExtf since equality solver is disabled" << endl; + options::bvLazyRewriteExtf.set(false); + } // Turn on arith rewrite equalities only for pure arithmetic if(! options::arithRewriteEq.wasSetByUser()) { diff --git a/src/theory/bv/theory_bv_rewriter.cpp b/src/theory/bv/theory_bv_rewriter.cpp index 7b9bdf14f..4c6afa7b9 100644 --- a/src/theory/bv/theory_bv_rewriter.cpp +++ b/src/theory/bv/theory_bv_rewriter.cpp @@ -571,7 +571,7 @@ RewriteResponse TheoryBVRewriter::RewriteRedand(TNode node, bool prerewrite){ RewriteResponse TheoryBVRewriter::RewriteBVToNat(TNode node, bool prerewrite) { //do not use lazy rewrite strategy if equality solver is disabled - if( node[0].isConst() || !options::bitvectorEqualitySolver() ){ + if( node[0].isConst() || !options::bvLazyRewriteExtf() ){ Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); @@ -583,7 +583,7 @@ RewriteResponse TheoryBVRewriter::RewriteBVToNat(TNode node, bool prerewrite) { RewriteResponse TheoryBVRewriter::RewriteIntToBV(TNode node, bool prerewrite) { //do not use lazy rewrite strategy if equality solver is disabled - if( node[0].isConst() || !options::bitvectorEqualitySolver() ){ + if( node[0].isConst() || !options::bvLazyRewriteExtf() ){ Node resultNode = LinearRewriteStrategy < RewriteRule >::apply(node); -- 2.30.2