@@ -198,6 +198,21 @@ Function: verilog_synthesist::synth_expr
198198
199199exprt verilog_synthesist::synth_expr (exprt expr, symbol_statet symbol_state)
200200{
201+ if (expr.id () == ID_function_call)
202+ {
203+ return expand_function_call (to_function_call_expr (expr), symbol_state);
204+ }
205+ else if (expr.id () == ID_hierarchical_identifier)
206+ {
207+ expand_hierarchical_identifier (
208+ to_hierarchical_identifier_expr (expr), symbol_state);
209+ return expr;
210+ }
211+
212+ // Do the operands recursively
213+ for (auto &op : expr.operands ())
214+ op = synth_expr (op, symbol_state);
215+
201216 if (expr.id ()==ID_symbol)
202217 {
203218 const symbolt &symbol=ns.lookup (to_symbol_expr (expr));
@@ -245,9 +260,6 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
245260 }
246261 else if (expr.id () == ID_concatenation)
247262 {
248- for (auto &op : expr.operands ())
249- op = synth_expr (op, symbol_state);
250-
251263 if (
252264 expr.type ().id () == ID_verilog_unsignedbv ||
253265 expr.type ().id () == ID_verilog_signedbv)
@@ -259,31 +271,19 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
259271
260272 return expr;
261273 }
262- else if (expr.id ()==ID_function_call)
263- {
264- return expand_function_call (to_function_call_expr (expr), symbol_state);
265- }
266- else if (expr.id ()==ID_hierarchical_identifier)
267- {
268- expand_hierarchical_identifier (
269- to_hierarchical_identifier_expr (expr),
270- symbol_state);
271- return expr;
272- }
273274 else if (expr.id () == ID_power)
274275 {
275276 auto &power_expr = to_power_expr (expr);
276- DATA_INVARIANT (
277- power_expr.lhs ().type () == power_expr.type (),
278- " power expression type consistency" );
279- power_expr.lhs () = synth_expr (power_expr.lhs (), symbol_state);
280- power_expr.rhs () = synth_expr (power_expr.rhs (), symbol_state);
281277
282278 // encode into aval/bval
283279 if (is_four_valued (expr.type ()))
284280 return aval_bval (power_expr);
285281 else
286282 {
283+ DATA_INVARIANT (
284+ power_expr.lhs ().type () == power_expr.type (),
285+ " power expression type consistency" );
286+
287287 auto rhs_int = numeric_cast<std::size_t >(power_expr.rhs ());
288288 if (rhs_int.has_value ())
289289 {
@@ -306,7 +306,6 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
306306 {
307307 {
308308 auto &op = to_typecast_expr (expr).op ();
309- op = synth_expr (op, symbol_state);
310309
311310 // we perform some form of simplification for these
312311 if (op.is_constant ())
@@ -347,8 +346,6 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
347346 auto &part_select = to_verilog_non_indexed_part_select_expr (expr);
348347 auto &src = part_select.src ();
349348
350- src = synth_expr (src, symbol_state);
351-
352349 auto op1 = numeric_cast_v<mp_integer>(to_constant_expr (part_select.msb ()));
353350 auto op2 = numeric_cast_v<mp_integer>(to_constant_expr (part_select.lsb ()));
354351
@@ -449,46 +446,30 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
449446 }
450447 else if (expr.id () == ID_verilog_logical_equality)
451448 {
452- for (auto &op : expr.operands ())
453- op = synth_expr (op, symbol_state);
454449 return aval_bval (to_verilog_logical_equality_expr (expr));
455450 }
456451 else if (expr.id () == ID_verilog_logical_inequality)
457452 {
458- for (auto &op : expr.operands ())
459- op = synth_expr (op, symbol_state);
460453 return aval_bval (to_verilog_logical_inequality_expr (expr));
461454 }
462455 else if (expr.id () == ID_verilog_wildcard_equality)
463456 {
464- for (auto &op : expr.operands ())
465- op = synth_expr (op, symbol_state);
466457 return aval_bval (to_verilog_wildcard_equality_expr (expr));
467458 }
468459 else if (expr.id () == ID_verilog_wildcard_inequality)
469460 {
470- for (auto &op : expr.operands ())
471- op = synth_expr (op, symbol_state);
472461 return aval_bval (to_verilog_wildcard_inequality_expr (expr));
473462 }
474463 else if (expr.id () == ID_not)
475464 {
476465 auto ¬_expr = to_not_expr (expr);
477- not_expr.op () = synth_expr (not_expr.op (), symbol_state);
478466
479467 // encode into aval/bval
480468 if (is_four_valued (expr.type ()))
481469 return aval_bval (not_expr);
482470 else
483471 return expr; // leave as is
484472 }
485- else if (expr.has_operands ())
486- {
487- for (auto &op : expr.operands ())
488- op = synth_expr (op, symbol_state);
489-
490- return expr;
491- }
492473 else
493474 return expr; // leave as is
494475
0 commit comments