Skip to content

Commit eb0a457

Browse files
author
Daniel Kroening
committed
simplify_exprt::simplify_bitwise is now independent of bitvector representation
1 parent ec8b34d commit eb0a457

File tree

1 file changed

+7
-23
lines changed

1 file changed

+7
-23
lines changed

src/util/simplify_expr_int.cpp

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -717,9 +717,6 @@ bool simplify_exprt::simplify_bitwise(exprt &expr)
717717

718718
while(expr.operands().size()>=2)
719719
{
720-
const irep_idt &a_str=expr.op0().get(ID_value);
721-
const irep_idt &b_str=expr.op1().get(ID_value);
722-
723720
if(!expr.op0().is_constant())
724721
break;
725722

@@ -732,32 +729,19 @@ bool simplify_exprt::simplify_bitwise(exprt &expr)
732729
if(expr.op1().type()!=expr.type())
733730
break;
734731

735-
INVARIANT(
736-
a_str.size() == b_str.size(),
737-
"bitvectors of the same type have the same size");
732+
const auto a_val=bv2integer(id2string(to_constant_expr(expr.op0()).get_value()), false);
733+
const auto b_val=bv2integer(id2string(to_constant_expr(expr.op1()).get_value()), false);
738734

739-
std::string new_value;
740-
new_value.resize(width);
735+
mp_integer new_value;
741736

742737
if(expr.id()==ID_bitand)
743-
{
744-
for(std::size_t i=0; i<width; i++)
745-
new_value[i]=(a_str[i]=='1' && b_str[i]=='1')?'1':'0';
746-
}
738+
new_value=bitwise_and(a_val, b_val);
747739
else if(expr.id()==ID_bitor)
748-
{
749-
for(std::size_t i=0; i<width; i++)
750-
new_value[i]=(a_str[i]=='1' || b_str[i]=='1')?'1':'0';
751-
}
740+
new_value=bitwise_or(a_val, b_val);
752741
else if(expr.id()==ID_bitxor)
753-
{
754-
for(std::size_t i=0; i<width; i++)
755-
new_value[i]=((a_str[i]=='1')!=(b_str[i]=='1'))?'1':'0';
756-
}
757-
else
758-
break;
742+
new_value=bitwise_xor(a_val, b_val);
759743

760-
constant_exprt new_op(new_value, expr.type());
744+
constant_exprt new_op(integer2bv(new_value, width), expr.type());
761745

762746
// erase first operand
763747
expr.operands().erase(expr.operands().begin());

0 commit comments

Comments
 (0)