Skip to content

Commit 4f5647d

Browse files
Merge pull request #3554 from romainbrenguier/optimize/symex-assignment
Optimize calls to increase_counter
2 parents 3f6675c + e71ca91 commit 4f5647d

File tree

5 files changed

+32
-24
lines changed

5 files changed

+32
-24
lines changed

src/goto-symex/goto_symex_state.cpp

+11-9
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ void goto_symex_statet::assignment(
187187
#endif
188188

189189
// do the l2 renaming
190-
if(level2.current_names.find(l1_identifier)==level2.current_names.end())
191-
level2.current_names[l1_identifier]=std::make_pair(lhs, 0);
192-
level2.increase_counter(l1_identifier);
190+
const auto level2_it =
191+
level2.current_names.emplace(l1_identifier, std::make_pair(lhs, 0)).first;
192+
symex_renaming_levelt::increase_counter(level2_it);
193193
set_l2_indices(lhs, ns);
194194

195195
// in case we happen to be multi-threaded, record the memory access
@@ -442,9 +442,10 @@ bool goto_symex_statet::l2_thread_read_encoding(
442442

443443
if(a_s_read.second.empty())
444444
{
445-
if(level2.current_names.find(l1_identifier)==level2.current_names.end())
446-
level2.current_names[l1_identifier]=std::make_pair(ssa_l1, 0);
447-
level2.increase_counter(l1_identifier);
445+
auto level2_it =
446+
level2.current_names.emplace(l1_identifier, std::make_pair(ssa_l1, 0))
447+
.first;
448+
symex_renaming_levelt::increase_counter(level2_it);
448449
a_s_read.first=level2.current_count(l1_identifier);
449450
}
450451

@@ -480,8 +481,9 @@ bool goto_symex_statet::l2_thread_read_encoding(
480481
return true;
481482
}
482483

483-
if(level2.current_names.find(l1_identifier)==level2.current_names.end())
484-
level2.current_names[l1_identifier]=std::make_pair(ssa_l1, 0);
484+
const auto level2_it =
485+
level2.current_names.emplace(l1_identifier, std::make_pair(ssa_l1, 0))
486+
.first;
485487

486488
// No event and no fresh index, but avoid constant propagation
487489
if(!record_events)
@@ -492,7 +494,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
492494
}
493495

494496
// produce a fresh L2 name
495-
level2.increase_counter(l1_identifier);
497+
symex_renaming_levelt::increase_counter(level2_it);
496498
set_l2_indices(ssa_l1, ns);
497499
expr=ssa_l1;
498500

src/goto-symex/renaming_level.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,9 @@ struct symex_renaming_levelt
3838
}
3939

4040
/// Increase the counter corresponding to an identifier
41-
void increase_counter(const irep_idt &identifier)
41+
static void increase_counter(const current_namest::iterator &it)
4242
{
43-
PRECONDITION(current_names.find(identifier) != current_names.end());
44-
++current_names[identifier].second;
43+
++it->second.second;
4544
}
4645

4746
/// Add the \c ssa_exprt of current_names to vars

src/goto-symex/symex_dead.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void goto_symext::symex_dead(statet &state)
5252
state.propagation.erase(l1_identifier);
5353

5454
// L2 renaming
55-
if(state.level2.current_names.find(l1_identifier)!=
56-
state.level2.current_names.end())
57-
state.level2.increase_counter(l1_identifier);
55+
auto level2_it = state.level2.current_names.find(l1_identifier);
56+
if(level2_it != state.level2.current_names.end())
57+
symex_renaming_levelt::increase_counter(level2_it);
5858
}

src/goto-symex/symex_decl.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ void goto_symext::symex_decl(statet &state, const symbol_exprt &expr)
6868
// L2 renaming
6969
// inlining may yield multiple declarations of the same identifier
7070
// within the same L1 context
71-
if(state.level2.current_names.find(l1_identifier)==
72-
state.level2.current_names.end())
73-
state.level2.current_names[l1_identifier]=std::make_pair(ssa, 0);
74-
state.level2.increase_counter(l1_identifier);
71+
const auto level2_it =
72+
state.level2.current_names.emplace(l1_identifier, std::make_pair(ssa, 0))
73+
.first;
74+
symex_renaming_levelt::increase_counter(level2_it);
7575
const bool record_events=state.record_events;
7676
state.record_events=false;
7777
state.rename(ssa, ns);

src/goto-symex/symex_function_call.cpp

+12-5
Original file line numberDiff line numberDiff line change
@@ -408,25 +408,32 @@ void goto_symext::locality(
408408
const irep_idt l0_name=ssa.get_identifier();
409409

410410
// save old L1 name for popping the frame
411-
const auto c_it = state.level1.current_names.find(l0_name);
411+
auto c_it = state.level1.current_names.find(l0_name);
412412

413-
if(c_it!=state.level1.current_names.end())
413+
if(c_it != state.level1.current_names.end())
414+
{
414415
frame.old_level1[l0_name]=c_it->second;
416+
c_it->second = std::make_pair(ssa, frame_nr);
417+
}
418+
else
419+
{
420+
c_it = state.level1.current_names
421+
.emplace(l0_name, std::make_pair(ssa, frame_nr))
422+
.first;
423+
}
415424

416425
// do L1 renaming -- these need not be unique, as
417426
// identifiers may be shared among functions
418427
// (e.g., due to inlining or other code restructuring)
419428

420-
state.level1.current_names[l0_name]=
421-
std::make_pair(ssa, frame_nr);
422429
state.rename(ssa, ns, goto_symex_statet::L1);
423430

424431
irep_idt l1_name=ssa.get_identifier();
425432
unsigned offset=0;
426433

427434
while(state.l1_history.find(l1_name)!=state.l1_history.end())
428435
{
429-
state.level1.increase_counter(l0_name);
436+
symex_renaming_levelt::increase_counter(c_it);
430437
++offset;
431438
ssa.set_level_1(frame_nr+offset);
432439
l1_name=ssa.get_identifier();

0 commit comments

Comments
 (0)