Skip to content

Commit de3aa2d

Browse files
Split set_ssa_indices function
The level is already known when we call this function so the cases can be kept in different functions.
1 parent dd3dcc1 commit de3aa2d

File tree

2 files changed

+44
-38
lines changed

2 files changed

+44
-38
lines changed

src/goto-symex/goto_symex_state.cpp

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ void goto_symex_statet::assignment(
211211
if(level2.current_names.find(l1_identifier)==level2.current_names.end())
212212
level2.current_names[l1_identifier]=std::make_pair(lhs, 0);
213213
level2.increase_counter(l1_identifier);
214-
set_ssa_indices(lhs, ns, L2);
214+
set_l2_indices(lhs, ns);
215215

216216
// in case we happen to be multi-threaded, record the memory access
217217
bool is_shared=l2_thread_write_encoding(lhs, ns);
@@ -253,37 +253,34 @@ void goto_symex_statet::assignment(
253253
#endif
254254
}
255255

256-
void goto_symex_statet::set_ssa_indices(
256+
void goto_symex_statet::set_l0_indices(
257257
ssa_exprt &ssa_expr,
258-
const namespacet &ns,
259-
levelt level)
258+
const namespacet &ns)
260259
{
261-
switch(level)
262-
{
263-
case L0:
264-
level0(ssa_expr, ns, source.thread_nr);
265-
break;
266-
267-
case L1:
268-
if(!ssa_expr.get_level_2().empty())
269-
return;
270-
if(!ssa_expr.get_level_1().empty())
271-
return;
272-
level0(ssa_expr, ns, source.thread_nr);
273-
level1(ssa_expr);
274-
break;
260+
level0(ssa_expr, ns, source.thread_nr);
261+
}
275262

276-
case L2:
277-
if(!ssa_expr.get_level_2().empty())
278-
return;
279-
level0(ssa_expr, ns, source.thread_nr);
280-
level1(ssa_expr);
281-
ssa_expr.set_level_2(level2.current_count(ssa_expr.get_identifier()));
282-
break;
263+
void goto_symex_statet::set_l1_indices(
264+
ssa_exprt &ssa_expr,
265+
const namespacet &ns)
266+
{
267+
if(!ssa_expr.get_level_2().empty())
268+
return;
269+
if(!ssa_expr.get_level_1().empty())
270+
return;
271+
level0(ssa_expr, ns, source.thread_nr);
272+
level1(ssa_expr);
273+
}
283274

284-
default:
285-
UNREACHABLE;
286-
}
275+
void goto_symex_statet::set_l2_indices(
276+
ssa_exprt &ssa_expr,
277+
const namespacet &ns)
278+
{
279+
if(!ssa_expr.get_level_2().empty())
280+
return;
281+
level0(ssa_expr, ns, source.thread_nr);
282+
level1(ssa_expr);
283+
ssa_expr.set_level_2(level2.current_count(ssa_expr.get_identifier()));
287284
}
288285

289286
void goto_symex_statet::rename(
@@ -298,15 +295,21 @@ void goto_symex_statet::rename(
298295
{
299296
ssa_exprt &ssa=to_ssa_expr(expr);
300297

301-
if(level==L0 || level==L1)
298+
if(level == L0)
299+
{
300+
set_l0_indices(ssa, ns);
301+
rename(expr.type(), ssa.get_identifier(), ns, level);
302+
ssa.update_type();
303+
}
304+
else if(level == L1)
302305
{
303-
set_ssa_indices(ssa, ns, level);
306+
set_l1_indices(ssa, ns);
304307
rename(expr.type(), ssa.get_identifier(), ns, level);
305308
ssa.update_type();
306309
}
307310
else if(level==L2)
308311
{
309-
set_ssa_indices(ssa, ns, L1);
312+
set_l1_indices(ssa, ns);
310313
rename(expr.type(), ssa.get_identifier(), ns, level);
311314
ssa.update_type();
312315

@@ -327,7 +330,7 @@ void goto_symex_statet::rename(
327330
if(p_it != propagation.end())
328331
expr=p_it->second; // already L2
329332
else
330-
set_ssa_indices(ssa, ns, L2);
333+
set_l2_indices(ssa, ns);
331334
}
332335
}
333336
}
@@ -453,7 +456,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
453456
cond=or_exprt(no_write.op(), cond);
454457

455458
if_exprt tmp(cond, ssa_l1, ssa_l1);
456-
set_ssa_indices(to_ssa_expr(tmp.true_case()), ns, L2);
459+
set_l2_indices(to_ssa_expr(tmp.true_case()), ns);
457460

458461
if(a_s_read.second.empty())
459462
{
@@ -485,7 +488,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
485488
source,
486489
symex_targett::assignment_typet::PHI);
487490

488-
set_ssa_indices(ssa_l1, ns, L2);
491+
set_l2_indices(ssa_l1, ns);
489492
expr=ssa_l1;
490493

491494
a_s_read.second.push_back(guard);
@@ -501,14 +504,14 @@ bool goto_symex_statet::l2_thread_read_encoding(
501504
// No event and no fresh index, but avoid constant propagation
502505
if(!record_events)
503506
{
504-
set_ssa_indices(ssa_l1, ns, L2);
507+
set_l2_indices(ssa_l1, ns);
505508
expr=ssa_l1;
506509
return true;
507510
}
508511

509512
// produce a fresh L2 name
510513
level2.increase_counter(l1_identifier);
511-
set_ssa_indices(ssa_l1, ns, L2);
514+
set_l2_indices(ssa_l1, ns);
512515
expr=ssa_l1;
513516

514517
// and record that
@@ -570,7 +573,7 @@ void goto_symex_statet::rename_address(
570573
ssa_exprt &ssa=to_ssa_expr(expr);
571574

572575
// only do L1!
573-
set_ssa_indices(ssa, ns, L1);
576+
set_l1_indices(ssa, ns);
574577

575578
rename(expr.type(), ssa.get_identifier(), ns, level);
576579
ssa.update_type();

src/goto-symex/goto_symex_state.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,10 @@ class goto_symex_statet final
9292
protected:
9393
void rename_address(exprt &expr, const namespacet &ns, levelt level);
9494

95-
void set_ssa_indices(ssa_exprt &expr, const namespacet &ns, levelt level=L2);
95+
void set_l0_indices(ssa_exprt &expr, const namespacet &ns);
96+
void set_l1_indices(ssa_exprt &expr, const namespacet &ns);
97+
void set_l2_indices(ssa_exprt &expr, const namespacet &ns);
98+
9699
// only required for value_set.assign
97100
void get_l1_name(exprt &expr) const;
98101

0 commit comments

Comments
 (0)