Skip to content

Commit a1aec2a

Browse files
committed
netlist conversion: replace recursion by explicit stack
1 parent 564222c commit a1aec2a

File tree

1 file changed

+37
-11
lines changed

1 file changed

+37
-11
lines changed

src/trans-netlist/trans_to_netlist.cpp

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,15 @@ class convert_trans_to_netlistt:public messaget
141141

142142
literalt convert_rhs(const rhst &);
143143

144-
void finalize_lhs(lhs_mapt::iterator);
145-
146-
void convert_lhs_rec(const exprt &expr, std::size_t from, std::size_t to);
144+
// The bv_varidts of the definitions that are yet to be processed.
145+
using lhs_stackt = std::stack<bv_varidt>;
146+
void add_to_stack(
147+
const exprt &expr,
148+
std::size_t from,
149+
std::size_t to,
150+
lhs_stackt &);
151+
void lhs_loop(lhs_stackt &);
152+
void finalize_definition(lhs_mapt::iterator);
147153

148154
void convert_constraints();
149155

@@ -547,7 +553,7 @@ void convert_trans_to_netlistt::finalize_lhs(lhs_mapt::iterator lhs_it)
547553

548554
/*******************************************************************\
549555
550-
Function: convert_trans_to_netlistt::convert_lhs_rec
556+
Function: convert_trans_to_netlistt::lhs_loop
551557
552558
Inputs:
553559
@@ -557,10 +563,27 @@ Function: convert_trans_to_netlistt::convert_lhs_rec
557563
558564
\*******************************************************************/
559565

560-
void convert_trans_to_netlistt::convert_lhs_rec(
566+
void convert_trans_to_netlistt::lhs_loop(lhs_stackt &lhs_stack)
567+
{
568+
}
569+
570+
/*******************************************************************\
571+
572+
Function: convert_trans_to_netlistt::add_to_stack
573+
574+
Inputs:
575+
576+
Outputs:
577+
578+
Purpose:
579+
580+
\*******************************************************************/
581+
582+
void convert_trans_to_netlistt::add_to_stack(
561583
const exprt &expr,
562584
std::size_t from,
563-
std::size_t to)
585+
std::size_t to,
586+
lhs_stackt &lhs_stack)
564587
{
565588
PRECONDITION(from <= to);
566589

@@ -574,6 +597,8 @@ void convert_trans_to_netlistt::convert_lhs_rec(
574597
bv_varid.bit_nr<=to;
575598
bv_varid.bit_nr++)
576599
{
600+
lhs_stack.push(bv_varid);
601+
#if 0
577602
lhs_mapt::iterator it=lhs_map.find(bv_varid);
578603

579604
if(it==lhs_map.end())
@@ -582,8 +607,9 @@ void convert_trans_to_netlistt::convert_lhs_rec(
582607

583608
// we only need to do wires
584609
if(!it->second.var->is_wire()) return;
585-
610+
586611
finalize_lhs(it);
612+
#endif
587613
}
588614

589615
return;
@@ -595,7 +621,7 @@ void convert_trans_to_netlistt::convert_lhs_rec(
595621
to_extractbit_expr(expr).index(), i)) // constant?
596622
{
597623
from = i.to_ulong();
598-
convert_lhs_rec(to_extractbit_expr(expr).src(), from, from);
624+
add_to_stack(to_extractbit_expr(expr).src(), from, from, lhs_stack);
599625
return;
600626
}
601627
}
@@ -614,7 +640,7 @@ void convert_trans_to_netlistt::convert_lhs_rec(
614640
from = new_from.to_ulong();
615641
to = new_to.to_ulong();
616642

617-
convert_lhs_rec(to_extractbits_expr(expr).src(), from, to);
643+
add_to_stack(to_extractbits_expr(expr).src(), from, to, lhs_stack);
618644
return;
619645
}
620646
}
@@ -634,7 +660,7 @@ void convert_trans_to_netlistt::convert_lhs_rec(
634660
if(width==0)
635661
continue;
636662

637-
convert_lhs_rec(*it, 0, width - 1);
663+
add_to_stack(*it, 0, width - 1, lhs_stack);
638664
}
639665
}
640666

@@ -658,7 +684,7 @@ literalt convert_trans_to_netlistt::convert_rhs(const rhst &rhs)
658684
if(!rhs_entry.converted)
659685
{
660686
// get all lhs symbols this depends on
661-
convert_lhs_rec(rhs_entry.expr, 0, rhs_entry.width - 1);
687+
add_to_stack(rhs_entry.expr, 0, rhs_entry.width - 1, lhs_stack);
662688

663689
rhs_entry.converted=true;
664690

0 commit comments

Comments
 (0)