Skip to content

Commit 0a16bb6

Browse files
author
Daniel Kroening
committed
use code_blockt::add and code_blockt constructor for adding a statement
.move_operands() is avoided; there is no measurable performance benefit.
1 parent 63bf323 commit 0a16bb6

20 files changed

+132
-214
lines changed

jbmc/src/java_bytecode/java_bytecode_concurrency_instrumentation.cpp

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,7 @@ static void monitor_exits(codet &code, const codet &monitorexit)
139139
if(statement == ID_return)
140140
{
141141
// Replace the return with a monitor exit plus return block
142-
code_blockt return_block;
143-
return_block.add(monitorexit);
144-
return_block.move_to_operands(code);
145-
code = return_block;
142+
code = code_blockt({monitorexit, code});
146143
}
147144
else if(
148145
statement == ID_label || statement == ID_block ||
@@ -261,13 +258,7 @@ static void instrument_synchronized_code(
261258
monitor_exits(code, monitorexit);
262259

263260
// Wrap the code into a try finally
264-
code_blockt try_block;
265-
try_block.move_to_operands(monitorenter);
266-
try_block.move_to_operands(catch_push);
267-
try_block.move_to_operands(code);
268-
try_block.move_to_operands(catch_pop);
269-
try_block.move_to_operands(catch_label);
270-
code = try_block;
261+
code = code_blockt({monitorenter, catch_push, code, catch_pop, catch_label});
271262
}
272263

273264
/// Transforms the codet stored in in \p f_code, which is a call to function
@@ -329,17 +320,8 @@ static void instrument_start_thread(
329320
code_assignt tmp_d(next_symbol.symbol_expr(), plus);
330321
code_assignt tmp_e(current_symbol.symbol_expr(), next_symbol.symbol_expr());
331322

332-
code_blockt block;
333-
block.add(tmp_a);
334-
block.add(tmp_b);
335-
block.add(tmp_c);
336-
block.add(codet(ID_atomic_begin));
337-
block.add(tmp_d);
338-
block.add(tmp_e);
339-
block.add(codet(ID_atomic_end));
340-
block.add_source_location() = f_code.source_location();
341-
342-
code = block;
323+
code = code_blockt({ tmp_a, tmp_b, tmp_c, codet(ID_atomic_begin), tmp_d, tmp_e, codet(ID_atomic_end) };
324+
code.add_source_location() = f_code.source_location();
343325
}
344326

345327
/// Transforms the codet stored in in \p f_code, which is a call to function
@@ -371,12 +353,9 @@ static void instrument_end_thread(
371353
code_labelt tmp_b(lbl2);
372354
tmp_b.op0() = codet(ID_skip);
373355

374-
code_blockt block;
375-
block.add(tmp_a);
376-
block.add(tmp_b);
377-
block.add_source_location() = code.source_location();
378-
379-
code = block;
356+
const auto location = code.source_location();
357+
code = code_blockt({tmp_a, tmp_b});
358+
code.add_source_location() = location;
380359
}
381360

382361
/// Transforms the codet stored in in \p f_code, which is a call to function

jbmc/src/java_bytecode/java_bytecode_convert_class.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -853,10 +853,7 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
853853
symbol_table.add(local_symbol);
854854
const auto &local_symexpr=local_symbol.symbol_expr();
855855

856-
code_blockt clone_body;
857-
858856
code_declt declare_cloned(local_symexpr);
859-
clone_body.move_to_operands(declare_cloned);
860857

861858
source_locationt location;
862859
location.set_function(local_name);
@@ -868,7 +865,6 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
868865
old_array, length_component.get_name(), length_component.type());
869866
java_new_array.copy_to_operands(old_length);
870867
code_assignt create_blank(local_symexpr, java_new_array);
871-
clone_body.move_to_operands(create_blank);
872868

873869
member_exprt old_data(
874870
old_array, data_component.get_name(), data_component.type());
@@ -898,7 +894,6 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
898894
const auto &index_symexpr=index_symbol.symbol_expr();
899895

900896
code_declt declare_index(index_symexpr);
901-
clone_body.move_to_operands(declare_index);
902897

903898
code_fort copy_loop;
904899

@@ -920,14 +915,13 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
920915
code_assignt copy_cell(new_cell, old_cell);
921916
copy_loop.body()=copy_cell;
922917

923-
// End for-loop
924-
clone_body.move_to_operands(copy_loop);
925-
926918
member_exprt new_base_class(
927919
new_array, base_class_component.get_name(), base_class_component.type());
928920
address_of_exprt retval(new_base_class);
929921
code_returnt return_inst(retval);
930-
clone_body.move_to_operands(return_inst);
922+
923+
const code_blockt clone_body(
924+
{declare_cloned, create_blank, declare_index, copy_loop, return_inst});
931925

932926
symbolt clone_symbol;
933927
clone_symbol.name=clone_name;

jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -873,7 +873,7 @@ code_blockt &java_bytecode_convert_methodt::get_or_create_block_for_pcrange(
873873
for(auto blockidx=child_offset, blocklim=child_offset+nblocks;
874874
blockidx!=blocklim;
875875
++blockidx)
876-
newblock.move_to_operands(this_block_children[blockidx]);
876+
newblock.add(to_code(this_block_children[blockidx]));
877877

878878
// Relabel the inner header:
879879
to_code_label(to_code(newblock.operands()[0])).set_label(new_label_irep);
@@ -1728,7 +1728,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
17281728
{
17291729
symbol_exprt lhs=tmp_variable("$stack", s_it->type());
17301730
code_assignt a(lhs, *s_it);
1731-
more_code.copy_to_operands(a);
1731+
more_code.add(a);
17321732

17331733
s_it->swap(lhs);
17341734
}
@@ -1744,7 +1744,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
17441744
assert(has_prefix(os_it->get_string(ID_C_base_name), "$stack"));
17451745
symbol_exprt lhs=to_symbol_expr(*os_it);
17461746
code_assignt a(lhs, expr);
1747-
more_code.copy_to_operands(a);
1747+
more_code.add(a);
17481748

17491749
expr.swap(lhs);
17501750
++os_it;
@@ -1753,7 +1753,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
17531753

17541754
if(results.empty())
17551755
{
1756-
more_code.copy_to_operands(c);
1756+
more_code.add(c);
17571757
c.swap(more_code);
17581758
}
17591759
else
@@ -1835,7 +1835,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
18351835
if(start_new_block)
18361836
{
18371837
code_labelt newlabel(label(std::to_string(address)), code_blockt());
1838-
root_block.move_to_operands(newlabel);
1838+
root_block.add(newlabel);
18391839
root.branch.push_back(block_tree_nodet::get_leaf());
18401840
assert((root.branch_addresses.empty() ||
18411841
root.branch_addresses.back()<address) &&
@@ -1913,7 +1913,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
19131913
}
19141914

19151915
for(auto &block : root_block.operands())
1916-
code.move_to_operands(block);
1916+
code.add(to_code(block));
19171917

19181918
return code;
19191919
}
@@ -2256,12 +2256,7 @@ void java_bytecode_convert_methodt::convert_invoke(
22562256
{
22572257
codet clinit_call = get_clinit_call(arg0.get(ID_C_class));
22582258
if(clinit_call.get_statement() != ID_skip)
2259-
{
2260-
code_blockt ret_block;
2261-
ret_block.move_to_operands(clinit_call);
2262-
ret_block.move_to_operands(c);
2263-
c = std::move(ret_block);
2264-
}
2259+
c = code_blockt({clinit_call, c});
22652260
}
22662261
}
22672262

@@ -2324,10 +2319,7 @@ void java_bytecode_convert_methodt::convert_athrow(
23242319
assume_location.set("user-provided", true);
23252320
assume_code.add_source_location() = assume_location;
23262321

2327-
code_blockt ret_block;
2328-
ret_block.move_to_operands(assert_code);
2329-
ret_block.move_to_operands(assume_code);
2330-
c = ret_block;
2322+
c = code_blockt({assert_code, assume_code});
23312323
}
23322324
else
23332325
{
@@ -2398,10 +2390,7 @@ codet &java_bytecode_convert_methodt::do_exception_handling(
23982390
exception_ids[i], handler_labels[i]));
23992391
}
24002392

2401-
code_blockt try_block;
2402-
try_block.move_to_operands(catch_push);
2403-
try_block.move_to_operands(c);
2404-
c = try_block;
2393+
c = code_blockt({catch_push, c});
24052394
}
24062395
else
24072396
{
@@ -2439,10 +2428,7 @@ codet &java_bytecode_convert_methodt::do_exception_handling(
24392428
start_pc = exception_row.start_pc;
24402429
// add CATCH_POP instruction
24412430
code_pop_catcht catch_pop;
2442-
code_blockt end_try_block;
2443-
end_try_block.move_to_operands(c);
2444-
end_try_block.move_to_operands(catch_pop);
2445-
c = end_try_block;
2431+
c = end_try_block({c, catch_pop});
24462432
}
24472433
}
24482434
}
@@ -2468,11 +2454,11 @@ void java_bytecode_convert_methodt::convert_multianewarray(
24682454
constant_exprt size_limit = from_integer(max_array_length, java_int_type());
24692455
binary_relation_exprt le_max_size(op[0], ID_le, size_limit);
24702456
code_assumet assume_le_max_size(le_max_size);
2471-
create.move_to_operands(assume_le_max_size);
2457+
create.add(assume_le_max_size);
24722458
}
24732459

24742460
const exprt tmp = tmp_variable("newarray", ref_type);
2475-
create.copy_to_operands(code_assignt(tmp, java_new_array));
2461+
create.add(code_assignt(tmp, java_new_array));
24762462
c = std::move(create);
24772463
results[0] = tmp;
24782464
}
@@ -2525,10 +2511,10 @@ void java_bytecode_convert_methodt::convert_newarray(
25252511
constant_exprt size_limit = from_integer(max_array_length, java_int_type());
25262512
binary_relation_exprt le_max_size(op[0], ID_le, size_limit);
25272513
code_assumet assume_le_max_size(le_max_size);
2528-
c.move_to_operands(assume_le_max_size);
2514+
to_code_block(c).add(assume_le_max_size);
25292515
}
25302516
const exprt tmp = tmp_variable("newarray", ref_type);
2531-
c.copy_to_operands(code_assignt(tmp, java_new_array));
2517+
to_code_block(c).add(code_assignt(tmp, java_new_array));
25322518
results[0] = tmp;
25332519
}
25342520

@@ -2551,10 +2537,7 @@ void java_bytecode_convert_methodt::convert_new(
25512537
get_clinit_call(to_symbol_type(arg0.type()).get_identifier());
25522538
if(clinit_call.get_statement() != ID_skip)
25532539
{
2554-
code_blockt ret_block;
2555-
ret_block.move_to_operands(clinit_call);
2556-
ret_block.move_to_operands(c);
2557-
c = std::move(ret_block);
2540+
c = code_blockt({clinit_call, c});
25582541
}
25592542
results[0] = tmp;
25602543
}
@@ -2579,15 +2562,15 @@ codet java_bytecode_convert_methodt::convert_putstatic(
25792562
// the field.
25802563
codet clinit_call = get_clinit_call(arg0.get_string(ID_class));
25812564
if(clinit_call.get_statement() != ID_skip)
2582-
block.move_to_operands(clinit_call);
2565+
block.add(clinit_call);
25832566

25842567
save_stack_entries(
25852568
"stack_static_field",
25862569
symbol_expr.type(),
25872570
block,
25882571
bytecode_write_typet::STATIC_FIELD,
25892572
symbol_expr.get_identifier());
2590-
block.copy_to_operands(code_assignt(symbol_expr, op[0]));
2573+
block.add(code_assignt(symbol_expr, op[0]));
25912574
return block;
25922575
}
25932576

@@ -2602,7 +2585,7 @@ codet java_bytecode_convert_methodt::convert_putfield(
26022585
block,
26032586
bytecode_write_typet::FIELD,
26042587
arg0.get(ID_component_name));
2605-
block.copy_to_operands(code_assignt(to_member(op[0], arg0), op[1]));
2588+
block.add(code_assignt(to_member(op[0], arg0), op[1]));
26062589
return block;
26072590
}
26082591

@@ -2744,7 +2727,7 @@ codet java_bytecode_convert_methodt::convert_iinc(
27442727
arg1_int_type.make_typecast(java_int_type());
27452728
code_assign.rhs() =
27462729
plus_exprt(variable(arg0, 'i', address, CAST_AS_NEEDED), arg1_int_type);
2747-
block.copy_to_operands(code_assign);
2730+
block.add(code_assign);
27482731
return block;
27492732
}
27502733

@@ -2849,7 +2832,7 @@ code_blockt java_bytecode_convert_methodt::convert_ret(
28492832
code_gotot g(label(number));
28502833
g.add_source_location() = location;
28512834
if(idx == idxlim - 1)
2852-
c.move_to_operands(g);
2835+
c.add(g);
28532836
else
28542837
{
28552838
code_ifthenelset branch;
@@ -2860,7 +2843,7 @@ code_blockt java_bytecode_convert_methodt::convert_ret(
28602843
branch.cond().add_source_location() = location;
28612844
branch.then_case() = g;
28622845
branch.add_source_location() = location;
2863-
c.move_to_operands(branch);
2846+
c.add(branch);
28642847
}
28652848
}
28662849
return c;
@@ -2911,7 +2894,7 @@ codet java_bytecode_convert_methodt::convert_store(
29112894
var_name);
29122895
code_assignt assign(var, toassign);
29132896
assign.add_source_location() = location;
2914-
block.move(assign);
2897+
block.add(assign);
29152898
return block;
29162899
}
29172900

@@ -2943,7 +2926,7 @@ codet java_bytecode_convert_methodt::convert_astore(
29432926

29442927
code_assignt array_put(element, op[2]);
29452928
array_put.add_source_location() = location;
2946-
block.move(array_put);
2929+
block.add(array_put);
29472930
return block;
29482931
}
29492932

@@ -3274,6 +3257,6 @@ void java_bytecode_convert_methodt::create_stack_tmp_var(
32743257
{
32753258
const exprt tmp_var=
32763259
tmp_variable(tmp_var_prefix, tmp_var_type);
3277-
block.copy_to_operands(code_assignt(tmp_var, stack_entry));
3260+
block.add(code_assignt(tmp_var, stack_entry));
32783261
stack_entry=tmp_var;
32793262
}

0 commit comments

Comments
 (0)