From 528361252150b9734809271a7f00e198fdc593ef Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Fri, 23 Apr 2021 13:28:10 +0000 Subject: [PATCH] Cleanup and use propt::new_variables Several places still locally had a for loop where each step performed a call to propt::new_variable, which is all taken care of by propt::new_variables(width). Also override this method in cnft to avoid repeated calls to set_no_variables. --- src/solvers/flattening/boolbv.cpp | 4 +--- .../flattening/boolbv_byte_extract.cpp | 3 +-- src/solvers/flattening/boolbv_case.cpp | 6 +----- src/solvers/flattening/boolbv_cond.cpp | 6 +++--- src/solvers/flattening/boolbv_index.cpp | 21 +++++-------------- src/solvers/flattening/bv_pointers.cpp | 20 +++--------------- src/solvers/flattening/bv_utils.cpp | 14 +++---------- src/solvers/flattening/equality.cpp | 6 +----- src/solvers/prop/prop.cpp | 4 ++-- src/solvers/prop/prop.h | 2 +- src/solvers/sat/cnf.cpp | 18 ++++++++++++++-- src/solvers/sat/cnf.h | 1 + 12 files changed, 38 insertions(+), 67 deletions(-) diff --git a/src/solvers/flattening/boolbv.cpp b/src/solvers/flattening/boolbv.cpp index a29414a760a..cc389edb31d 100644 --- a/src/solvers/flattening/boolbv.cpp +++ b/src/solvers/flattening/boolbv.cpp @@ -534,9 +534,7 @@ exprt boolbvt::make_free_bv_expr(const typet &type) { const std::size_t width = boolbv_width(type); PRECONDITION(width != 0); - bvt bv(width); - for(auto &lit : bv) - lit = prop.new_variable(); + bvt bv = prop.new_variables(width); return make_bv_expr(type, bv); } diff --git a/src/solvers/flattening/boolbv_byte_extract.cpp b/src/solvers/flattening/boolbv_byte_extract.cpp index 868f393ba3b..1a787ff7208 100644 --- a/src/solvers/flattening/boolbv_byte_extract.cpp +++ b/src/solvers/flattening/boolbv_byte_extract.cpp @@ -128,8 +128,7 @@ bvt boolbvt::convert_byte_extract(const byte_extract_exprt &expr) if(prop.has_set_to()) { // free variables - for(std::size_t i=0; i= 3, "case should have at least three operands"); diff --git a/src/solvers/flattening/boolbv_cond.cpp b/src/solvers/flattening/boolbv_cond.cpp index 9c7d15e8465..d7d546d374d 100644 --- a/src/solvers/flattening/boolbv_cond.cpp +++ b/src/solvers/flattening/boolbv_cond.cpp @@ -20,7 +20,6 @@ bvt boolbvt::convert_cond(const cond_exprt &expr) return conversion_failed(expr); bvt bv; - bv.resize(width); DATA_INVARIANT(operands.size() >= 2, "cond must have at least two operands"); @@ -34,8 +33,7 @@ bvt boolbvt::convert_cond(const cond_exprt &expr) literalt cond_literal=const_literal(false); // make it free variables - for(auto &literal : bv) - literal = prop.new_variable(); + bv = prop.new_variables(width); forall_operands(it, expr) { @@ -60,6 +58,8 @@ bvt boolbvt::convert_cond(const cond_exprt &expr) } else { + bv.resize(width); + // functional version -- go backwards for(std::size_t i=expr.operands().size(); i!=0; i-=2) { diff --git a/src/solvers/flattening/boolbv_index.cpp b/src/solvers/flattening/boolbv_index.cpp index 5feb1513a85..0b2cec1dba2 100644 --- a/src/solvers/flattening/boolbv_index.cpp +++ b/src/solvers/flattening/boolbv_index.cpp @@ -67,9 +67,7 @@ bvt boolbvt::convert_index(const index_exprt &expr) else { // free variables - bv.reserve(width); - for(std::size_t i = 0; i < width; i++) - bv.push_back(prop.new_variable()); + bv = prop.new_variables(width); record_array_index(expr); @@ -219,10 +217,7 @@ bvt boolbvt::convert_index(const index_exprt &expr) if(prop.has_set_to()) { // free variables - - bv.resize(width); - for(std::size_t i=0; i(offset + i)]; + std::size_t offset_int = numeric_cast_v(offset); + return bvt(tmp.begin() + offset_int, tmp.begin() + offset_int + width); } else if( array.id() == ID_member || array.id() == ID_index || @@ -354,9 +346,6 @@ bvt boolbvt::convert_index( else { // out of bounds - for(std::size_t i=0; i