@@ -198,6 +198,21 @@ Function: verilog_synthesist::synth_expr
198
198
199
199
exprt verilog_synthesist::synth_expr (exprt expr, symbol_statet symbol_state)
200
200
{
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
+
201
216
if (expr.id ()==ID_symbol)
202
217
{
203
218
const symbolt &symbol=ns.lookup (to_symbol_expr (expr));
@@ -245,9 +260,6 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
245
260
}
246
261
else if (expr.id () == ID_concatenation)
247
262
{
248
- for (auto &op : expr.operands ())
249
- op = synth_expr (op, symbol_state);
250
-
251
263
if (
252
264
expr.type ().id () == ID_verilog_unsignedbv ||
253
265
expr.type ().id () == ID_verilog_signedbv)
@@ -259,31 +271,19 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
259
271
260
272
return expr;
261
273
}
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
- }
273
274
else if (expr.id () == ID_power)
274
275
{
275
276
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);
281
277
282
278
// encode into aval/bval
283
279
if (is_four_valued (expr.type ()))
284
280
return aval_bval (power_expr);
285
281
else
286
282
{
283
+ DATA_INVARIANT (
284
+ power_expr.lhs ().type () == power_expr.type (),
285
+ " power expression type consistency" );
286
+
287
287
auto rhs_int = numeric_cast<std::size_t >(power_expr.rhs ());
288
288
if (rhs_int.has_value ())
289
289
{
@@ -306,7 +306,6 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
306
306
{
307
307
{
308
308
auto &op = to_typecast_expr (expr).op ();
309
- op = synth_expr (op, symbol_state);
310
309
311
310
// we perform some form of simplification for these
312
311
if (op.is_constant ())
@@ -347,8 +346,6 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
347
346
auto &part_select = to_verilog_non_indexed_part_select_expr (expr);
348
347
auto &src = part_select.src ();
349
348
350
- src = synth_expr (src, symbol_state);
351
-
352
349
auto op1 = numeric_cast_v<mp_integer>(to_constant_expr (part_select.msb ()));
353
350
auto op2 = numeric_cast_v<mp_integer>(to_constant_expr (part_select.lsb ()));
354
351
@@ -449,46 +446,30 @@ exprt verilog_synthesist::synth_expr(exprt expr, symbol_statet symbol_state)
449
446
}
450
447
else if (expr.id () == ID_verilog_logical_equality)
451
448
{
452
- for (auto &op : expr.operands ())
453
- op = synth_expr (op, symbol_state);
454
449
return aval_bval (to_verilog_logical_equality_expr (expr));
455
450
}
456
451
else if (expr.id () == ID_verilog_logical_inequality)
457
452
{
458
- for (auto &op : expr.operands ())
459
- op = synth_expr (op, symbol_state);
460
453
return aval_bval (to_verilog_logical_inequality_expr (expr));
461
454
}
462
455
else if (expr.id () == ID_verilog_wildcard_equality)
463
456
{
464
- for (auto &op : expr.operands ())
465
- op = synth_expr (op, symbol_state);
466
457
return aval_bval (to_verilog_wildcard_equality_expr (expr));
467
458
}
468
459
else if (expr.id () == ID_verilog_wildcard_inequality)
469
460
{
470
- for (auto &op : expr.operands ())
471
- op = synth_expr (op, symbol_state);
472
461
return aval_bval (to_verilog_wildcard_inequality_expr (expr));
473
462
}
474
463
else if (expr.id () == ID_not)
475
464
{
476
465
auto ¬_expr = to_not_expr (expr);
477
- not_expr.op () = synth_expr (not_expr.op (), symbol_state);
478
466
479
467
// encode into aval/bval
480
468
if (is_four_valued (expr.type ()))
481
469
return aval_bval (not_expr);
482
470
else
483
471
return expr; // leave as is
484
472
}
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
- }
492
473
else
493
474
return expr; // leave as is
494
475
0 commit comments