27
27
28
28
static void get_l1_name (exprt &expr);
29
29
30
+ static void set_l2_indices (
31
+ const symex_level0t &level0,
32
+ const symex_level1t &level1,
33
+ const symex_level2t &level2,
34
+ ssa_exprt &ssa_expr,
35
+ unsigned int thread_nr,
36
+ const namespacet &ns);
37
+
30
38
goto_symex_statet::goto_symex_statet ()
31
39
: symex_target(nullptr ), record_events(true ), dirty()
32
40
{
@@ -184,7 +192,7 @@ void goto_symex_statet::assignment(
184
192
const auto level2_it =
185
193
level2.current_names .emplace (l1_identifier, std::make_pair (lhs, 0 )).first ;
186
194
symex_renaming_levelt::increase_counter (level2_it);
187
- set_l2_indices (lhs, ns);
195
+ set_l2_indices (level0, level1, level2, lhs, source. thread_nr , ns);
188
196
189
197
// in case we happen to be multi-threaded, record the memory access
190
198
bool is_shared=l2_thread_write_encoding (lhs, ns);
@@ -255,13 +263,17 @@ static void set_l1_indices(
255
263
level1 (ssa_expr);
256
264
}
257
265
258
- void goto_symex_statet::set_l2_indices (
266
+ static void set_l2_indices (
267
+ const symex_level0t &level0,
268
+ const symex_level1t &level1,
269
+ const symex_level2t &level2,
259
270
ssa_exprt &ssa_expr,
271
+ unsigned int thread_nr,
260
272
const namespacet &ns)
261
273
{
262
274
if (!ssa_expr.get_level_2 ().empty ())
263
275
return ;
264
- level0 (ssa_expr, ns, source. thread_nr );
276
+ level0 (ssa_expr, ns, thread_nr);
265
277
level1 (ssa_expr);
266
278
ssa_expr.set_level_2 (level2.current_count (ssa_expr.get_identifier ()));
267
279
}
@@ -313,7 +325,7 @@ void goto_symex_statet::rename(
313
325
if (p_it != propagation.end ())
314
326
expr=p_it->second ; // already L2
315
327
else
316
- set_l2_indices (ssa, ns);
328
+ set_l2_indices (level0, level1, level2, ssa, source. thread_nr , ns);
317
329
}
318
330
}
319
331
}
@@ -430,7 +442,8 @@ bool goto_symex_statet::l2_thread_read_encoding(
430
442
cond |= guardt{no_write.op ()};
431
443
432
444
if_exprt tmp (cond.as_expr (), ssa_l1, ssa_l1);
433
- set_l2_indices (to_ssa_expr (tmp.true_case ()), ns);
445
+ auto &ssa_true = to_ssa_expr (tmp.true_case ());
446
+ set_l2_indices (level0, level1, level2, ssa_true, source.thread_nr , ns);
434
447
435
448
if (a_s_read.second .empty ())
436
449
{
@@ -463,7 +476,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
463
476
source,
464
477
symex_targett::assignment_typet::PHI);
465
478
466
- set_l2_indices (ssa_l1, ns);
479
+ set_l2_indices (level0, level1, level2, ssa_l1, source. thread_nr , ns);
467
480
expr=ssa_l1;
468
481
469
482
a_s_read.second .push_back (guard);
@@ -480,14 +493,14 @@ bool goto_symex_statet::l2_thread_read_encoding(
480
493
// No event and no fresh index, but avoid constant propagation
481
494
if (!record_events)
482
495
{
483
- set_l2_indices (ssa_l1, ns);
496
+ set_l2_indices (level0, level1, level2, ssa_l1, source. thread_nr , ns);
484
497
expr=ssa_l1;
485
498
return true ;
486
499
}
487
500
488
501
// produce a fresh L2 name
489
502
symex_renaming_levelt::increase_counter (level2_it);
490
- set_l2_indices (ssa_l1, ns);
503
+ set_l2_indices (level0, level1, level2, ssa_l1, source. thread_nr , ns);
491
504
expr=ssa_l1;
492
505
493
506
// and record that
0 commit comments