Skip to content

Commit ae2d5ee

Browse files
Extract a rename_level2_ssa function
This is useful for the cases when the solver knows the expression to be an SSA exprt.
1 parent 424b51a commit ae2d5ee

File tree

2 files changed

+30
-24
lines changed

2 files changed

+30
-24
lines changed

src/goto-symex/goto_symex_state.cpp

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -371,35 +371,40 @@ exprt goto_symex_statet::rename_level1(exprt expr, const namespacet &ns)
371371
return expr;
372372
}
373373

374+
exprt goto_symex_statet::rename_level2_ssa(ssa_exprt ssa, const namespacet &ns)
375+
{
376+
set_l1_indices(ssa, ns);
377+
rename(ssa.type(), ssa.get_identifier(), ns);
378+
ssa.update_type();
379+
380+
if(l2_thread_read_encoding(ssa, ns))
381+
{
382+
// renaming taken care of by l2_thread_encoding
383+
}
384+
else if(!ssa.get_level_2().empty())
385+
{
386+
// already at L2
387+
}
388+
else
389+
{
390+
// We also consider propagation if we go up to L2.
391+
// L1 identifiers are used for propagation!
392+
auto p_it = propagation.find(ssa.get_identifier());
393+
394+
if(p_it != propagation.end())
395+
return p_it->second; // already L2
396+
397+
set_l2_indices(ssa, ns);
398+
}
399+
return ssa;
400+
}
401+
374402
void goto_symex_statet::rename_level2(exprt &expr, const namespacet &ns)
375403
{
376404
// rename all the symbols with their last known value
377405
renaming_strategyt strategy;
378406
strategy.rename_ssa = [this](ssa_exprt ssa, const namespacet &ns) -> exprt {
379-
set_l1_indices(ssa, ns);
380-
rename(ssa.type(), ssa.get_identifier(), ns, L2);
381-
ssa.update_type();
382-
383-
if(l2_thread_read_encoding(ssa, ns))
384-
{
385-
// renaming taken care of by l2_thread_encoding
386-
}
387-
else if(!ssa.get_level_2().empty())
388-
{
389-
// already at L2
390-
}
391-
else
392-
{
393-
// We also consider propagation if we go up to L2.
394-
// L1 identifiers are used for propagation!
395-
auto p_it = propagation.find(ssa.get_identifier());
396-
397-
if(p_it != propagation.end())
398-
return p_it->second; // already L2
399-
400-
set_l2_indices(ssa, ns);
401-
}
402-
return ssa;
407+
return rename_level2_ssa(ssa, ns);
403408
};
404409
strategy.rename_address =
405410
[&](address_of_exprt &address_of_expr, const namespacet &ns) {

src/goto-symex/goto_symex_state.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,7 @@ class goto_symex_statet final : public goto_statet
182182
ssa_exprt rename_level0_ssa(ssa_exprt ssa, const namespacet &ns);
183183
ssa_exprt rename_level1_ssa(ssa_exprt expr, const namespacet &ns);
184184
exprt rename_level1(exprt expr, const namespacet &ns);
185+
exprt rename_level2_ssa(ssa_exprt expr, const namespacet &ns);
185186
void rename_level2(exprt &expr, const namespacet &ns);
186187
void rename(
187188
typet &type,

0 commit comments

Comments
 (0)