@@ -188,7 +188,7 @@ void goto_symex_statet::assignment(
188
188
const auto level2_it =
189
189
level2.current_names .emplace (l1_identifier, std::make_pair (lhs, 0 )).first ;
190
190
symex_renaming_levelt::increase_counter (level2_it);
191
- set_l2_indices (lhs, ns);
191
+ lhs = set_l2_indices (std::move ( lhs) , ns). get ( );
192
192
193
193
// in case we happen to be multi-threaded, record the memory access
194
194
bool is_shared=l2_thread_write_encoding (lhs, ns);
@@ -247,15 +247,10 @@ goto_symex_statet::set_l1_indices(ssa_exprt ssa_expr, const namespacet &ns)
247
247
return level1 (level0 (std::move (ssa_expr), ns, source.thread_nr ));
248
248
}
249
249
250
- void goto_symex_statet::set_l2_indices (
251
- ssa_exprt &ssa_expr,
252
- const namespacet &ns)
250
+ renamedt<ssa_exprt, L2>
251
+ goto_symex_statet::set_l2_indices (ssa_exprt ssa_expr, const namespacet &ns)
253
252
{
254
- if (!ssa_expr.get_level_2 ().empty ())
255
- return ;
256
- renamedt<ssa_exprt, L2> l2 =
257
- level2 (level1 (level0 (std::move (ssa_expr), ns, source.thread_nr )));
258
- ssa_expr = l2.get ();
253
+ return level2 (level1 (level0 (std::move (ssa_expr), ns, source.thread_nr )));
259
254
}
260
255
261
256
template <levelt level>
@@ -323,7 +318,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
323
318
if (p_it != propagation.end ())
324
319
expr=p_it->second ; // already L2
325
320
else
326
- set_l2_indices (ssa, ns);
321
+ ssa = set_l2_indices (std::move ( ssa) , ns). get ( );
327
322
}
328
323
}
329
324
}
@@ -437,8 +432,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
437
432
if (!no_write.op ().is_false ())
438
433
cond |= guardt{no_write.op ()};
439
434
440
- if_exprt tmp (cond.as_expr (), ssa_l1, ssa_l1);
441
- set_l2_indices (to_ssa_expr (tmp.true_case ()), ns);
435
+ const renamedt<ssa_exprt, L2> l2_true_case = set_l2_indices (ssa_l1, ns);
442
436
443
437
if (a_s_read.second .empty ())
444
438
{
@@ -448,14 +442,13 @@ bool goto_symex_statet::l2_thread_read_encoding(
448
442
symex_renaming_levelt::increase_counter (level2_it);
449
443
a_s_read.first =level2.current_count (l1_identifier);
450
444
}
445
+ const renamedt<ssa_exprt, L2> l2_false_case = set_l2_indices (ssa_l1, ns);
451
446
452
- to_ssa_expr (tmp.false_case ()).set_level_2 (a_s_read.first );
453
-
447
+ exprt tmp;
454
448
if (cond.is_false ())
455
- {
456
- exprt t=tmp.false_case ();
457
- t.swap (tmp);
458
- }
449
+ tmp = l2_false_case.get ();
450
+ else
451
+ tmp = if_exprt{cond.as_expr (), l2_true_case.get (), l2_false_case.get ()};
459
452
460
453
const bool record_events_bak=record_events;
461
454
record_events=false ;
@@ -471,8 +464,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
471
464
source,
472
465
symex_targett::assignment_typet::PHI);
473
466
474
- set_l2_indices (ssa_l1, ns);
475
- expr=ssa_l1;
467
+ expr = set_l2_indices (std::move (ssa_l1), ns).get ();
476
468
477
469
a_s_read.second .push_back (guard);
478
470
if (!no_write.op ().is_false ())
@@ -488,15 +480,13 @@ bool goto_symex_statet::l2_thread_read_encoding(
488
480
// No event and no fresh index, but avoid constant propagation
489
481
if (!record_events)
490
482
{
491
- set_l2_indices (ssa_l1, ns);
492
- expr=ssa_l1;
483
+ expr = set_l2_indices (std::move (ssa_l1), ns).get ();
493
484
return true ;
494
485
}
495
486
496
487
// produce a fresh L2 name
497
488
symex_renaming_levelt::increase_counter (level2_it);
498
- set_l2_indices (ssa_l1, ns);
499
- expr=ssa_l1;
489
+ expr = set_l2_indices (std::move (ssa_l1), ns).get ();
500
490
501
491
// and record that
502
492
INVARIANT_STRUCTURED (
0 commit comments