Skip to content

Commit c58ebb3

Browse files
committed
Verilog: lowering for four-valued zero-extend
This adds a lowering for zero_extend expressions for four-valued operands.
1 parent c4f0cd0 commit c58ebb3

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

src/verilog/aval_bval_encoding.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,3 +470,8 @@ exprt aval_bval(const shift_exprt &expr)
470470
auto x = make_x(expr.type());
471471
return if_exprt{distance_has_xz, x, combined};
472472
}
473+
474+
exprt aval_bval(const zero_extend_exprt &expr)
475+
{
476+
abort();
477+
}

src/verilog/aval_bval_encoding.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,7 @@ exprt aval_bval(const verilog_implies_exprt &);
6565
exprt aval_bval(const typecast_exprt &);
6666
/// lowering for shifts
6767
exprt aval_bval(const shift_exprt &);
68+
/// lowering for zero extension
69+
exprt aval_bval(const zero_extend_exprt &);
6870

6971
#endif

src/verilog/verilog_lowering.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,20 @@ exprt verilog_lowering(exprt expr)
625625
else
626626
return expr;
627627
}
628+
else if(expr.id() == ID_zero_extend)
629+
{
630+
auto &zero_extend = to_zero_extend_expr(expr);
631+
632+
if(
633+
is_four_valued(zero_extend.type()) ||
634+
is_four_valued(zero_extend.op().type()))
635+
{
636+
// encode into aval/bval
637+
return aval_bval(zero_extend);
638+
}
639+
else
640+
return expr; // leave as is
641+
}
628642
else
629643
return expr; // leave as is
630644

0 commit comments

Comments
 (0)