On Fri, 2013-08-30 at 15:44 +0200, Michael Matz wrote:
> Hi,
> 
> On Thu, 29 Aug 2013, David Malcolm wrote:
> 
> > Successfully bootstrapped and tested on x86_64-unknown-linux-gnu: all
> > testcases show the same results as an unpatched build (relative to
> > r202029).
> 
> I'd like to see some statistics for cc1{,plus} codesize and for compile 
> time of something reasonably large (needing say 60 seconds to 
> compile normally), before/after patch series.

Here's the result of a pair of builds of r202029 without and with the
patches, configured with --enable-checking=release, running "make", then
stripping debuginfo [1]

# ll */build/gcc/cc1
-rwxr-xr-x. 1 root root 13230048 Aug 30 15:00 control/build/gcc/cc1
-rwxr-xr-x. 1 root root 13230144 Aug 30 15:00 experiment/build/gcc/cc1
(98 bytes difference)

# ll */build/gcc/cc1obj
-rwxr-xr-x. 1 root root 13426336 Aug 30 15:00 control/build/gcc/cc1obj
-rwxr-xr-x. 1 root root 13426432 Aug 30 15:00 experiment/build/gcc/cc1obj
(96 bytes diff)

# ll */build/gcc/cc1plus
-rwxr-xr-x. 1 root root 14328480 Aug 29 13:59 control/build/gcc/cc1plus
-rwxr-xr-x. 1 root root 14328608 Aug 29 13:59 experiment/build/gcc/cc1plus
(128 bytes diff)

# ll */build/gcc/f951
-rwxr-xr-x. 1 root root 13960728 Aug 30 15:05 control/build/gcc/f951
-rwxr-xr-x. 1 root root 13960856 Aug 30 15:05 experiment/build/gcc/f951
(128 bytes diff)

# ll */build/gcc/jc1
-rwxr-xr-x. 1 root root 12607704 Aug 30 15:17 control/build/gcc/jc1
-rwxr-xr-x. 1 root root 12607704 Aug 30 15:17 experiment/build/gcc/jc1
(the same size)

So the overall sizes of such binaries are essentially unchanged.

To dig a bit deeper, I extended my asmdiff tool [2] to compare sizes of
functions; I'm attaching the results of comparing cc1plus before/after.

Any suggestions on what to compile to compare performance?  By 60
seconds, do you mean 60s for one TU, or do you mean a large build e.g.
the linux kernel?

> And the manual GTY markers are so not maintainable in the long run, 
> gengtype or something else really needs to be taught to create them 
> automatically.

Apart from the GTY aspect, how do people feel about the patch series?
FWIW I have vague thoughts about doing something similar for tree -
doing so *might* give an easier route to the type vs expression
separation that Andrew spoke about at the Cauldron rearchitecture BoF.
(I started looking at doing a similar C++-ification of rtx, but...
gahhhhh)

Dave

[1] yes, I built as root; this was done on a throwaway provisioning of a
RHEL 6.4 x86_64 box.
[2] https://github.com/davidmalcolm/asmdiff
Old: test/control/build/gcc/cc1plus
New: test/experiment/build/gcc/cc1plus
  Function removed: Function('_start-0x1a684')
  Function removed: Function('gt_pch_p_18gimple_statement_d(void*, void*, void 
(*)(void*, void*), void*)')
  Function removed: Function('gt_ggc_mx_gimple_statement_d(void*)')
  Function removed: Function('gt_pch_nx_gimple_statement_d(void*)')
  Function removed: Function('vec<constraint_expr, va_heap, 
vl_ptr>::safe_push(constraint_expr const&)')
  Function added: Function('_start-0x1a6ac')
  Function added: Function('gt_ggc_mx(gimple_statement_base*)')
  Function added: Function('gt_pch_nx(gimple_statement_base*)')
  Function added: Function('gt_pch_nx(gimple_statement_base*, void (*)(void*, 
void*), void*)')
  Function added: Function('gt_pch_p_21gimple_statement_base(void*, void*, void 
(*)(void*, void*), void*)')
  Function added: Function('gt_ggc_mx_gimple_statement_base(void*)')
  Function added: Function('gt_pch_nx_gimple_statement_base(void*)')
  Function hash_table<oecount_hasher, xcallocator>::find_slot_with_hash(void 
const*, unsigned int, insert_option) changed size from 5984 to 5872 bytes
  Function same_succ_def::equal(same_succ_def const*, same_succ_def const*) 
changed size from 480 to 512 bytes
  Function maybe_remove_unreachable_handlers() changed size from 112 to 128 
bytes
  Function verify_ssa_operands(gimple_statement_d*) changed size from 927 to 
960 bytes
    (renamed to verify_ssa_operands(gimple_statement_base*))
  Function vect_analyze_data_ref_accesses(_loop_vec_info*, _bb_vec_info*) 
changed size from 3920 to 3872 bytes
  Function make_pass_ipa_pta(gcc::context*) changed size from 36880 to 16464 
bytes
  Function inline_merge_summary(cgraph_edge*) changed size from 17904 to 17920 
bytes
  Function release_defs_bitset(bitmap_head_def*) changed size from 2464 to 2304 
bytes
  Function gt_pch_nx(loop*&) changed size from 144 to 32 bytes
  Function make_pass_fold_builtins(gcc::context*) changed size from 5711 to 
5727 bytes
  Function dump_value_range(_IO_FILE*, value_range_d*) changed size from 32880 
to 32800 bytes
  Function extract_true_false_edges_from_block(basic_block_def*, edge_def**, 
edge_def**) changed size from 20208 to 20224 bytes
  Function tree_ssa_lim() changed size from 4847 to 4831 bytes
  Function gt_ggc_mx_control_flow_graph(void*) changed size from 96 to 192 bytes
  Function vectorize_loops() changed size from 3999 to 4191 bytes
  Function dump_node(tree_node const*, int, _IO_FILE*) changed size from 10784 
to 10928 bytes
  Function stmt_can_throw_external(gimple_statement_d*) changed size from 6399 
to 6431 bytes
    (renamed to stmt_can_throw_external(gimple_statement_base*))
  Function remove_phi_args(edge_def*) changed size from 272 to 288 bytes
  Function degenerate_phi_result(gimple_statement_d*) changed size from 6608 to 
6592 bytes
    (renamed to degenerate_phi_result(gimple_statement_base*))
  Function make_pass_fre(gcc::context*) changed size from 32815 to 33055 bytes
  Function make_pass_strlen(gcc::context*) changed size from 16815 to 16207 
bytes
  Function build_type_cast(tree_node*, gimple_statement_d*, ssa_mode) changed 
size from 1376 to 47 bytes
    (renamed to build_type_cast(tree_node*, gimple_statement_base*, ssa_mode))
  Function replace_uses_by(tree_node*, tree_node*) changed size from 5600 to 
5632 bytes
  Function update_stmt_operands(gimple_statement_d*) changed size from 3968 to 
4000 bytes
    (renamed to update_stmt_operands(gimple_statement_base*))
  Function gimplify_and_update_call_from_tree(gimple_stmt_iterator_d*, 
tree_node*) changed size from 1232 to 1200 bytes
  Function hash_table<expr_elt_hasher, 
xcallocator>::find_slot_with_hash(expr_hash_elt const*, unsigned int, 
insert_option) changed size from 7392 to 7359 bytes
  Function split_constant_offset(tree_node*, tree_node**, tree_node**) changed 
size from 1440 to 1392 bytes
  Function hash_table<iv_inv_expr_hasher, 
xcallocator>::find_slot_with_hash(iv_inv_expr_ent const*, unsigned int, 
insert_option) changed size from 1328 to 1312 bytes
  Function dump_dfa_stats(_IO_FILE*) changed size from 1791 to 1824 bytes
  Function copy_decl_no_change(tree_node*, copy_body_data*) changed size from 
4384 to 4352 bytes
  Function _start changed size from 956 to 948 bytes
  Function vn_nary_op_insert_stmt(gimple_statement_d*, tree_node*) changed size 
from 8896 to 9824 bytes
    (renamed to vn_nary_op_insert_stmt(gimple_statement_base*, tree_node*))
  Function vect_finish_stmt_generation(gimple_statement_d*, 
gimple_statement_d*, gimple_stmt_iterator_d*) changed size from 1184 to 1200 
bytes
    (renamed to vect_finish_stmt_generation(gimple_statement_base*, 
gimple_statement_base*, gimple_stmt_iterator_d*))
  Function hash_table<ssa_names_hasher, 
xcallocator>::find_slot_with_hash(name_to_bb const*, unsigned int, 
insert_option) changed size from 7248 to 7216 bytes
  Function loop_niter_by_eval(loop*, edge_def*) changed size from 848 to 864 
bytes
  Function move_ssa_defining_stmt_for_defs(gimple_statement_d*, 
gimple_statement_d*) changed size from 848 to 832 bytes
    (renamed to move_ssa_defining_stmt_for_defs(gimple_statement_base*, 
gimple_statement_base*))
  Function update_call_from_tree(gimple_stmt_iterator_d*, tree_node*) changed 
size from 943 to 928 bytes
  Function reset_debug_uses(gimple_statement_d*) changed size from 2352 to 2304 
bytes
    (renamed to reset_debug_uses(gimple_statement_base*))
  Function void va_stack::reserve<adjust_info>(vec<adjust_info, va_stack, 
vl_embed>*&, unsigned int, bool) changed size from 17296 to 17088 bytes
  Function hash_table<simduid_to_vf, xcallocator>::expand() changed size from 
50672 to 51088 bytes
  Function gimple_stmt_may_fallthru(gimple_statement_d*) changed size from 287 
to 272 bytes
    (renamed to gimple_stmt_may_fallthru(gimple_statement_base*))
  Function gimple_call_copy_skip_args(gimple_statement_d*, bitmap_head_def*) 
changed size from 672 to 688 bytes
    (renamed to gimple_call_copy_skip_args(gimple_statement_base*, 
bitmap_head_def*))
  Function make_pass_diagnose_omp_blocks(gcc::context*) changed size from 14128 
to 14144 bytes
  Function mark_virtual_phi_result_for_renaming(gimple_statement_d*) changed 
size from 8800 to 8736 bytes
    (renamed to mark_virtual_phi_result_for_renaming(gimple_statement_base*))
  Function make_pass_early_ipa_sra(gcc::context*) changed size from 21151 to 
21167 bytes
  Function vect_pattern_recog(_loop_vec_info*, _bb_vec_info*) changed size from 
10095 to 10112 bytes
  Function input_bb(lto_input_block*, LTO_tags, data_in*, function*, int) 
changed size from 2912 to 2975 bytes
  Function gimple_find_values_to_profile(vec<histogram_value_t*, va_heap, 
vl_ptr>*) changed size from 15888 to 15856 bytes
  Function walk_gimple_op(gimple_statement_d*, tree_node* (*)(tree_node**, 
int*, void*), walk_stmt_info*) changed size from 2064 to 2000 bytes
    (renamed to walk_gimple_op(gimple_statement_base*, tree_node* 
(*)(tree_node**, int*, void*), walk_stmt_info*))
  Function make_pass_ch(gcc::context*) changed size from 22672 to 22704 bytes
  Function vect_can_advance_ivs_p(_loop_vec_info*) changed size from 6880 to 
7472 bytes
  Function lto_end_uncompression(lto_compression_stream*) changed size from 
31600 to 31536 bytes
  Function gimple_copy(gimple_statement_d*) changed size from 928 to 895 bytes
    (renamed to gimple_copy(gimple_statement_base*))
  Function coalesce_ssa_name() changed size from 8911 to 8895 bytes
  Function fixup_noreturn_call(gimple_statement_d*) changed size from 2544 to 
2560 bytes
    (renamed to fixup_noreturn_call(gimple_statement_base*))
  Function make_pass_strength_reduction(gcc::context*) changed size from 8239 
to 8223 bytes
  Function hash_table<vn_phi_hasher, xcallocator>::find_slot_with_hash(vn_phi_s 
const*, unsigned int, insert_option) changed size from 5904 to 5728 bytes
  Function copy_reference_ops_from_call(gimple_statement_d*, 
vec<vn_reference_op_struct, va_heap, vl_ptr>*) changed size from 911 to 928 
bytes
    (renamed to copy_reference_ops_from_call(gimple_statement_base*, 
vec<vn_reference_op_struct, va_heap, vl_ptr>*))
  Function vec<data_dependence_relation*, va_heap, vl_ptr>::reserve(unsigned 
int, bool) changed size from 3664 to 3648 bytes
  Function hash_table<mem_ref_hasher, 
xcallocator>::find_slot_with_hash(tree_node const*, unsigned int, 
insert_option) changed size from 2848 to 2832 bytes
  Function vec<vec<tree_node*, va_heap, vl_ptr>, va_heap, 
vl_ptr>::reserve(unsigned int, bool) changed size from 3216 to 3200 bytes
  Function execute_update_addresses_taken() changed size from 2784 to 2768 bytes
  Function vectorizable_condition(gimple_statement_d*, gimple_stmt_iterator_d*, 
gimple_statement_d**, tree_node*, int, _slp_tree*) changed size from 17648 to 
17696 bytes
    (renamed to vectorizable_condition(gimple_statement_base*, 
gimple_stmt_iterator_d*, gimple_statement_base**, tree_node*, int, _slp_tree*))
  Function supportable_narrowing_operation(tree_code, tree_node*, tree_node*, 
tree_code*, int*, vec<tree_node*, va_heap, vl_ptr>*) changed size from 19984 to 
19968 bytes
  Function vect_record_grouped_load_vectors(gimple_statement_d*, 
vec<tree_node*, va_heap, vl_ptr>) changed size from 384 to 400 bytes
    (renamed to vect_record_grouped_load_vectors(gimple_statement_base*, 
vec<tree_node*, va_heap, vl_ptr>))
  Function vect_enhance_data_refs_alignment(_loop_vec_info*) changed size from 
5328 to 5312 bytes
  Function expr_last(tree_node*) changed size from 16848 to 16816 bytes
  Function make_pass_dse(gcc::context*) changed size from 39600 to 39424 bytes
  Function stmt_could_throw_p(gimple_statement_d*) changed size from 768 to 752 
bytes
    (renamed to stmt_could_throw_p(gimple_statement_base*))
  Function void va_stack::release<tree_node*>(vec<tree_node*, va_stack, 
vl_embed>*&) changed size from 22096 to 22192 bytes
  Function substitute_and_fold(tree_node* (*)(tree_node*), bool 
(*)(gimple_stmt_iterator_d*), bool) changed size from 3728 to 3696 bytes
  Function void va_gc::reserve<gimple_statement_d*, 
va_gc>(vec<gimple_statement_d*, va_gc, vl_embed>*&, unsigned int, bool) changed 
size from 27552 to 27808 bytes
    (renamed to void va_gc::reserve<gimple_statement_base*, 
va_gc>(vec<gimple_statement_base*, va_gc, vl_embed>*&, unsigned int, bool))
  Function blocks_in_phiopt_order() changed size from 11568 to 11536 bytes
  Function debug_currdefs() changed size from 11408 to 11456 bytes
  Function make_pass_ipa_lower_emutls(gcc::context*) changed size from 11888 to 
11920 bytes
  Function vn_nary_op_insert(tree_node*, tree_node*) changed size from 2128 to 
2144 bytes
  Function make_pass_phiprop(gcc::context*) changed size from 13184 to 13168 
bytes
  Function voidify_wrapper_expr(tree_node*, tree_node*) changed size from 3408 
to 1376 bytes
  Function canonicalize_loop_ivs(loop*, tree_node**, bool) changed size from 
1856 to 1904 bytes
  Function multiplier_allowed_in_address_p(long, machine_mode, unsigned char) 
changed size from 11296 to 11280 bytes
  Function gt_ggc_mx(loop*&) changed size from 128 to 32 bytes
  Function cgraph_redirect_edge_call_stmt_to_callee(cgraph_edge*) changed size 
from 1696 to 1664 bytes
  Function operation_could_trap_helper_p(tree_code, bool, bool, bool, bool, 
tree_node*, bool*) changed size from 208 to 224 bytes
  Function compute_may_aliases() changed size from 8624 to 8639 bytes
  Function make_pass_lower_vector_ssa(gcc::context*) changed size from 2768 to 
2783 bytes
  Function dump_all_asserts(_IO_FILE*) changed size from 6640 to 6688 bytes
  Function find_replaceable_exprs(_var_map*) changed size from 5328 to 5263 
bytes
  Function record_vars_into(tree_node*, tree_node*) changed size from 4320 to 
4336 bytes
  Function make_pass_postreload_cse(gcc::context*) changed size from 9632 to 
9616 bytes
  Function expr_invariant_in_loop_p(loop*, tree_node*) changed size from 3200 
to 3232 bytes
  Function hash_table<stridxlist_hasher, xcallocator>::expand() changed size 
from 14784 to 35232 bytes
  Function make_pass_tree_loop_done(gcc::context*) changed size from 31904 to 
31952 bytes
  Function omp_firstprivatize_variable(gimplify_omp_ctx*, tree_node*) changed 
size from 1023 to 3056 bytes
  Function make_pass_phi_only_cprop(gcc::context*) changed size from 12511 to 
12495 bytes
  Function gimplify_self_mod_expr(tree_node**, gimple_statement_d**, 
gimple_statement_d**, bool, tree_node*) changed size from 19632 to 19600 bytes
    (renamed to gimplify_self_mod_expr(tree_node**, gimple_statement_base**, 
gimple_statement_base**, bool, tree_node*))
  Function make_pass_rename_ssa_copies(gcc::context*) changed size from 9840 to 
9776 bytes
  Function update_ssa(unsigned int) changed size from 15328 to 15344 bytes
  Function gt_pch_nx_control_flow_graph(void*) changed size from 96 to 208 bytes
  Function hash_table<instantiate_cache_entry_hasher, xcallocator>::expand() 
changed size from 11664 to 11680 bytes
  Function build_duplicate_type(tree_node*) changed size from 11888 to 11872 
bytes

Reply via email to