Skip to content

Commit 8b95abe

Browse files
Refactor simplify_minus
* Use to_minus_expr instead of asserting the expression id * Rename the local variables for easier readability
1 parent 4924fb8 commit 8b95abe

File tree

1 file changed

+20
-21
lines changed

1 file changed

+20
-21
lines changed

src/util/simplify_expr_int.cpp

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -604,54 +604,53 @@ bool simplify_exprt::simplify_plus(exprt &expr)
604604

605605
bool simplify_exprt::simplify_minus(exprt &expr)
606606
{
607-
if(!is_number(expr.type()) &&
608-
expr.type().id()!=ID_pointer)
607+
auto const &minus_expr = to_minus_expr(expr);
608+
if(!is_number(minus_expr.type()) &&
609+
minus_expr.type().id()!=ID_pointer)
609610
return true;
610611

611-
exprt::operandst &operands=expr.operands();
612-
613-
assert(expr.id()==ID_minus);
612+
const exprt::operandst &operands = minus_expr.operands();
614613

615614
if(operands.size()!=2)
616615
return true;
617616

618-
if(is_number(expr.type()) &&
619-
is_number(operands[0].type()) &&
620-
is_number(operands[1].type()))
617+
if(
618+
is_number(minus_expr.type()) && is_number(operands[0].type()) &&
619+
is_number(operands[1].type()))
621620
{
622621
// rewrite "a-b" to "a+(-b)"
623-
unary_minus_exprt tmp2(operands[1]);
624-
simplify_unary_minus(tmp2);
622+
unary_minus_exprt rhs_negated(operands[1]);
623+
simplify_unary_minus(rhs_negated);
625624

626-
plus_exprt tmp(operands[0], tmp2);
627-
simplify_node(tmp);
625+
plus_exprt plus_expr(operands[0], rhs_negated);
626+
simplify_node(plus_expr);
628627

629-
expr.swap(tmp);
628+
expr.swap(plus_expr);
630629
return false;
631630
}
632-
else if(expr.type().id()==ID_pointer &&
631+
else if(minus_expr.type().id()==ID_pointer &&
633632
operands[0].type().id()==ID_pointer &&
634633
is_number(operands[1].type()))
635634
{
636635
// pointer arithmetic: rewrite "p-i" to "p+(-i)"
637-
unary_minus_exprt tmp2(operands[1]);
638-
simplify_unary_minus(tmp2);
636+
unary_minus_exprt negated_pointer_offset(operands[1]);
637+
simplify_unary_minus(negated_pointer_offset);
639638

640-
plus_exprt tmp(operands[0], tmp2);
641-
simplify_plus(tmp);
639+
plus_exprt pointer_offset_expr(operands[0], negated_pointer_offset);
640+
simplify_plus(pointer_offset_expr);
642641

643-
expr.swap(tmp);
642+
expr.swap(pointer_offset_expr);
644643
return false;
645644
}
646-
else if(is_number(expr.type()) &&
645+
else if(is_number(minus_expr.type()) &&
647646
operands[0].type().id()==ID_pointer &&
648647
operands[1].type().id()==ID_pointer)
649648
{
650649
// pointer arithmetic: rewrite "p-p" to "0"
651650

652651
if(operands[0]==operands[1])
653652
{
654-
exprt zero=from_integer(0, expr.type());
653+
exprt zero=from_integer(0, minus_expr.type());
655654
CHECK_RETURN(zero.is_not_nil());
656655
expr=zero;
657656
return false;

0 commit comments

Comments
 (0)