Skip to content

Commit d723b64

Browse files
Make set_l2_indices return a renamedt
This captures the information of which renaming the expression has been through.
1 parent fcaeb7b commit d723b64

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

src/goto-symex/goto_symex_state.cpp

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,8 @@ void goto_symex_statet::assignment(
188188
const auto level2_it =
189189
level2.current_names.emplace(l1_identifier, std::make_pair(lhs, 0)).first;
190190
symex_renaming_levelt::increase_counter(level2_it);
191-
lhs = set_l2_indices(lhs, ns);
191+
const renamedt<ssa_exprt, L2> l2_lhs = set_l2_indices(std::move(lhs), ns);
192+
lhs = l2_lhs.get();
192193

193194
// in case we happen to be multi-threaded, record the memory access
194195
bool is_shared=l2_thread_write_encoding(lhs, ns);
@@ -247,12 +248,10 @@ goto_symex_statet::set_l1_indices(ssa_exprt ssa_expr, const namespacet &ns)
247248
return level1(level0(std::move(ssa_expr), ns, source.thread_nr));
248249
}
249250

250-
ssa_exprt
251+
renamedt<ssa_exprt, L2>
251252
goto_symex_statet::set_l2_indices(ssa_exprt ssa_expr, const namespacet &ns)
252253
{
253-
renamedt<ssa_exprt, L2> l2 =
254-
level2(level1(level0(std::move(ssa_expr), ns, source.thread_nr)));
255-
return l2.get();
254+
return level2(level1(level0(std::move(ssa_expr), ns, source.thread_nr)));
256255
}
257256

258257
template <levelt level>
@@ -327,7 +326,11 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
327326
if(p_it != propagation.end())
328327
expr=p_it->second; // already L2
329328
else
330-
ssa = set_l2_indices(ssa, ns);
329+
{
330+
const renamedt<ssa_exprt, L2> l2_ssa =
331+
set_l2_indices(std::move(ssa), ns);
332+
ssa = l2_ssa.get();
333+
}
331334
}
332335
}
333336
}
@@ -441,8 +444,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
441444
if(!no_write.op().is_false())
442445
cond |= guardt{no_write.op()};
443446

444-
if_exprt tmp(cond.as_expr(), ssa_l1, ssa_l1);
445-
tmp.true_case() = set_l2_indices(to_ssa_expr(tmp.true_case()), ns);
447+
const renamedt<ssa_exprt, L2> l2_true_case = set_l2_indices(ssa_l1, ns);
446448

447449
if(a_s_read.second.empty())
448450
{
@@ -452,8 +454,9 @@ bool goto_symex_statet::l2_thread_read_encoding(
452454
symex_renaming_levelt::increase_counter(level2_it);
453455
a_s_read.first=level2.current_count(l1_identifier);
454456
}
457+
const renamedt<ssa_exprt, L2> l2_false_case = set_l2_indices(ssa_l1, ns);
455458

456-
to_ssa_expr(tmp.false_case()).set_level_2(a_s_read.first);
459+
if_exprt tmp{cond.as_expr(), l2_true_case.get(), l2_false_case.get()};
457460

458461
if(cond.is_false())
459462
{
@@ -475,7 +478,9 @@ bool goto_symex_statet::l2_thread_read_encoding(
475478
source,
476479
symex_targett::assignment_typet::PHI);
477480

478-
expr = set_l2_indices(ssa_l1, ns);
481+
const renamedt<ssa_exprt, L2> ssa_l2 =
482+
set_l2_indices(std::move(ssa_l1), ns);
483+
expr = ssa_l2.get();
479484

480485
a_s_read.second.push_back(guard);
481486
if(!no_write.op().is_false())
@@ -491,13 +496,16 @@ bool goto_symex_statet::l2_thread_read_encoding(
491496
// No event and no fresh index, but avoid constant propagation
492497
if(!record_events)
493498
{
494-
expr = set_l2_indices(ssa_l1, ns);
499+
const renamedt<ssa_exprt, L2> ssa_l2 =
500+
set_l2_indices(std::move(ssa_l1), ns);
501+
expr = ssa_l2.get();
495502
return true;
496503
}
497504

498505
// produce a fresh L2 name
499506
symex_renaming_levelt::increase_counter(level2_it);
500-
expr = set_l2_indices(ssa_l1, ns);
507+
const renamedt<ssa_exprt, L2> ssa_l2 = set_l2_indices(std::move(ssa_l1), ns);
508+
expr = ssa_l2.get();
501509

502510
// and record that
503511
INVARIANT_STRUCTURED(

src/goto-symex/goto_symex_state.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class goto_symex_statet final : public goto_statet
120120
renamedt<ssa_exprt, L1> set_l1_indices(ssa_exprt expr, const namespacet &ns);
121121

122122
/// Update level 0, 1 and 2 values.
123-
ssa_exprt set_l2_indices(ssa_exprt expr, const namespacet &ns);
123+
renamedt<ssa_exprt, L2> set_l2_indices(ssa_exprt expr, const namespacet &ns);
124124

125125
// this maps L1 names to (L2) types
126126
typedef std::unordered_map<irep_idt, typet> l1_typest;

0 commit comments

Comments
 (0)