@@ -1587,12 +1587,24 @@ simplify_exprt::resultt<> simplify_exprt::simplify_inequality_no_constant(
1587
1587
if (expr.op0 ().type ().id () == ID_floatbv)
1588
1588
return unchanged (expr);
1589
1589
1590
- // simplifications below require same-object, which we don't check for
1591
- if (
1592
- expr.op0 ().type ().id () == ID_pointer && expr.id () != ID_equal &&
1593
- expr.id () != ID_notequal)
1590
+ if (expr.op0 ().type ().id () == ID_pointer)
1594
1591
{
1595
- return unchanged (expr);
1592
+ exprt ptr_op0 = simplify_object (expr.op0 ()).expr ;
1593
+ exprt ptr_op1 = simplify_object (expr.op1 ()).expr ;
1594
+
1595
+ if (ptr_op0 == ptr_op1)
1596
+ {
1597
+ pointer_offset_exprt offset_op0{expr.op0 (), size_type ()};
1598
+ pointer_offset_exprt offset_op1{expr.op1 (), size_type ()};
1599
+
1600
+ return changed (simplify_rec (binary_relation_exprt{
1601
+ std::move (offset_op0), expr.id (), std::move (offset_op1)}));
1602
+ }
1603
+ // simplifications below require same-object, which we don't check for
1604
+ else if (expr.id () != ID_equal && expr.id () != ID_notequal)
1605
+ {
1606
+ return unchanged (expr);
1607
+ }
1596
1608
}
1597
1609
1598
1610
// eliminate strict inequalities
@@ -1651,19 +1663,6 @@ simplify_exprt::resultt<> simplify_exprt::simplify_inequality_no_constant(
1651
1663
new_expr.rhs () = simplify_node (new_expr.rhs ());
1652
1664
return changed (simplify_inequality (new_expr)); // recursive call
1653
1665
}
1654
- else if (expr.op0 ().type ().id () == ID_pointer)
1655
- {
1656
- exprt ptr_op0 = simplify_object (expr.op0 ()).expr ;
1657
- exprt ptr_op1 = simplify_object (expr.op1 ()).expr ;
1658
-
1659
- if (ptr_op0 == ptr_op1)
1660
- {
1661
- pointer_offset_exprt offset_op0{expr.op0 (), size_type ()};
1662
- pointer_offset_exprt offset_op1{expr.op1 (), size_type ()};
1663
-
1664
- return changed (simplify_rec (equal_exprt{offset_op0, offset_op1}));
1665
- }
1666
- }
1667
1666
}
1668
1667
1669
1668
return unchanged (expr);
0 commit comments