d_passes["bv-intro-pow2"]->apply(&assertions);
}
- // Since this pass is not robust for the information tracking necessary for
- // unsat cores, it's only applied if we are not doing unsat core computation
- if (!options::unsatCores())
- {
- d_passes["apply-substs"]->apply(&assertions);
- }
-
- // Assertions MUST BE guaranteed to be rewritten by this point
- d_passes["rewrite"]->apply(&assertions);
-
// Lift bit-vectors of size 1 to bool
if (options::bitvectorToBool())
{
if (options::solveBVAsInt() != options::SolveBVAsIntMode::OFF)
{
d_passes["bv-to-int"]->apply(&assertions);
+ // after running bv-to-int, we need to immediately run
+ // theory-preprocess and ite-removal so that newlly created
+ // terms and assertions are normalized (e.g., div is expanded).
+ d_passes["theory-preprocess"]->apply(&assertions);
}
+ // Since this pass is not robust for the information tracking necessary for
+ // unsat cores, it's only applied if we are not doing unsat core computation
+ if (!options::unsatCores())
+ {
+ d_passes["apply-substs"]->apply(&assertions);
+ }
+
+ // Assertions MUST BE guaranteed to be rewritten by this point
+ d_passes["rewrite"]->apply(&assertions);
+
// Convert non-top-level Booleans to bit-vectors of size 1
if (options::boolToBitvector() != options::BoolToBVMode::OFF)
{
regress2/bug812.smt2
regress2/bv/opStructure_MBA_6.scrambled.min.smt2
regress2/bv_to_int2.smt2
+ regress2/bv_to_int_5095.smt2
+ regress2/bv_to_int_5095_2.smt2
regress2/bv_to_int_ashr.smt2
regress2/bv_to_int_bitwise.smt2
regress2/bv_to_int_bvmul1.smt2
--- /dev/null
+; EXPECT: sat
+(set-logic QF_BV)
+(set-option :solve-bv-as-int sum)
+(set-option :incremental true)
+(declare-fun _substvar_27_ () Bool)
+(declare-const bv_40-3 (_ BitVec 40))
+(assert (= bv_40-3 (_ bv0 40)))
+(push 1)
+(assert _substvar_27_)
+(check-sat)
\ No newline at end of file