Skip to content

Commit 570cd83

Browse files
committed
Extensions to simplify_byte_extract
Further simplify extracts from arrays and structs
1 parent 94221eb commit 570cd83

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

src/util/simplify_expr.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2061,7 +2061,9 @@ bool simplify_exprt::simplify_byte_extract(byte_extract_exprt &expr)
20612061
assert(el_size%8==0);
20622062
mp_integer el_bytes=el_size/8;
20632063

2064-
if(base_type_eq(expr.type(), op_type_ptr->subtype(), ns))
2064+
if(base_type_eq(expr.type(), op_type_ptr->subtype(), ns) ||
2065+
(expr.type().id()==ID_pointer &&
2066+
op_type_ptr->subtype().id()==ID_pointer))
20652067
{
20662068
if(offset%el_bytes==0)
20672069
{
@@ -2071,6 +2073,7 @@ bool simplify_exprt::simplify_byte_extract(byte_extract_exprt &expr)
20712073
index_exprt(
20722074
result,
20732075
from_integer(offset, expr.offset().type()));
2076+
result.make_typecast(expr.type());
20742077

20752078
expr.swap(result);
20762079
simplify_rec(expr);
@@ -2128,7 +2131,7 @@ bool simplify_exprt::simplify_byte_extract(byte_extract_exprt &expr)
21282131
simplify_member(expr.op());
21292132
expr.offset()=
21302133
from_integer(offset-m_offset_bits/8, expr.offset().type());
2131-
simplify_rec(expr.offset());
2134+
simplify_rec(expr);
21322135

21332136
return false;
21342137
}

0 commit comments

Comments
 (0)