Skip to content

Commit f88d3c1

Browse files
committed
Add simplify_byte_update support for big-endian systems
We previously only supported little-endian architectures for some of the simplify_byte_update simplification rules.
1 parent 524c8b4 commit f88d3c1

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/util/simplify_expr.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2017,14 +2017,17 @@ simplify_exprt::simplify_byte_update(const byte_update_exprt &expr)
20172017
const auto val_size = pointer_offset_bits(value.type(), ns);
20182018
const auto root_size = pointer_offset_bits(root.type(), ns);
20192019

2020+
const auto matching_byte_extract_id =
2021+
expr.id() == ID_byte_update_little_endian ? ID_byte_extract_little_endian
2022+
: ID_byte_extract_big_endian;
2023+
20202024
// byte update of full object is byte_extract(new value)
20212025
if(
20222026
offset.is_zero() && val_size.has_value() && *val_size > 0 &&
20232027
root_size.has_value() && *root_size > 0 && *val_size >= *root_size)
20242028
{
20252029
byte_extract_exprt be(
2026-
expr.id() == ID_byte_update_little_endian ? ID_byte_extract_little_endian
2027-
: ID_byte_extract_big_endian,
2030+
matching_byte_extract_id,
20282031
value,
20292032
offset,
20302033
expr.get_bits_per_byte(),
@@ -2075,14 +2078,11 @@ simplify_exprt::simplify_byte_update(const byte_update_exprt &expr)
20752078
* value)
20762079
*/
20772080

2078-
if(expr.id()!=ID_byte_update_little_endian)
2079-
return unchanged(expr);
2080-
20812081
if(value.id()==ID_with)
20822082
{
20832083
const with_exprt &with=to_with_expr(value);
20842084

2085-
if(with.old().id()==ID_byte_extract_little_endian)
2085+
if(with.old().id() == matching_byte_extract_id)
20862086
{
20872087
const byte_extract_exprt &extract=to_byte_extract_expr(with.old());
20882088

@@ -2222,7 +2222,7 @@ simplify_exprt::simplify_byte_update(const byte_update_exprt &expr)
22222222
*update_size > 0 && m_size_bytes > *update_size))
22232223
{
22242224
byte_update_exprt v(
2225-
ID_byte_update_little_endian,
2225+
expr.id(),
22262226
member_exprt(root, component.get_name(), component.type()),
22272227
from_integer(*offset_int - *m_offset, offset.type()),
22282228
value,
@@ -2241,7 +2241,7 @@ simplify_exprt::simplify_byte_update(const byte_update_exprt &expr)
22412241
else
22422242
{
22432243
byte_extract_exprt v(
2244-
ID_byte_extract_little_endian,
2244+
matching_byte_extract_id,
22452245
value,
22462246
from_integer(*m_offset - *offset_int, offset.type()),
22472247
expr.get_bits_per_byte(),
@@ -2287,7 +2287,7 @@ simplify_exprt::simplify_byte_update(const byte_update_exprt &expr)
22872287
bytes_req = (*val_size) / expr.get_bits_per_byte() - val_offset;
22882288

22892289
byte_extract_exprt new_val(
2290-
ID_byte_extract_little_endian,
2290+
matching_byte_extract_id,
22912291
value,
22922292
from_integer(val_offset, offset.type()),
22932293
expr.get_bits_per_byte(),

0 commit comments

Comments
 (0)