Message ID | 555604F0.40802@suse.cz |
---|---|
State | New |
Headers | show |
On 05/15/2015 04:38 PM, Martin Liška wrote: > Hello. > > Following patch attempts to rewrite memory reports for GCC's internal allocations > so that it uses a new template type. The type shares parts which are currently duplicated, > adds support for special 'counters' and introduces new support for hash-{set,map,table}. > > Transformation of the current code is a bit tricky as we internally used hash-table as main > data structure which takes care of location-related allocations. As I want to add support even > for hash tables (and all derived types), header files inclusion and forward declaration is utilized. > > Feel free to comment the patch, as well as missing features one may want to track by location sensitive > memory allocation. > > Attachment contains sample output taken from tramp3d-v4.cpp. > > Thanks, > Martin Sorry for the wrong report file, a forgotten option caused a compilation error. Thus, the attached report was really small. Martin Number of expanded macros: 8692 Average number of tokens per macro expansion: 6 Line Table allocations during the compilation process Number of ordinary maps used: 613 Ordinary map used size: 23k Number of ordinary maps allocated: 1638 Ordinary maps allocated size: 63k Number of macro maps used: 8116 Macro maps used size: 317k Macro maps locations size: 455k Macro maps size: 772k Duplicated maps locations size: 150k Total allocated maps size: 1543k Total used maps size: 796k Memory still allocated at the end of the compilation process Size Allocated Used Overhead 8 88k 63k 2640 16 4724k 1910k 101k 32 19M 8078k 357k 64 8156k 5146k 127k 256 2724k 1149k 37k 512 480k 250k 6720 1024 344k 242k 4816 2048 4924k 4920k 67k 4096 4096 4096 56 8192 56k 56k 392 16384 48k 48k 168 65536 128k 128k 112 131072 512k 512k 224 262144 512k 512k 112 524288 1536k 1536k 168 1048576 3072k 3072k 168 24 29M 5091k 538k 40 24M 14M 395k 48 13M 7448k 212k 56 5200k 1529k 81k 72 5540k 977k 75k 80 780k 254k 10k 88 6220k 4223k 85k 96 840k 822k 11k 112 4796k 3038k 65k 120 2908k 1635k 39k 152 21M 20M 301k 128 25M 21M 353k 144 10204k 5051k 139k 168 50M 46M 713k 104 10M 4284k 147k 392 9540k 9112k 130k 216 17M 15M 251k Total 285M 187M 4259k Total allocations and overheads during the compilation process Total Overhead: 15003930 Total Allocated: 922513120 Total Overhead under 32B: 312734 Total Allocated under 32B: 119067984 Total Overhead under 64B: 348896 Total Allocated under 64B: 279859536 Total Overhead under 128B: 385594 Total Allocated under 128B: 384391872 Total Overhead page size 8: 23802 Total Allocated page size 8: 230408 Total Overhead page size 16: 265842 Total Allocated page size 16: 7084400 Total Overhead page size 32: 10404 Total Allocated page size 32: 46370624 Total Overhead page size 64: 9190 Total Allocated page size 64: 32852160 Total Overhead page size 256: 484893 Total Allocated page size 256: 13829120 Total Overhead page size 512: 98395 Total Allocated page size 512: 2030080 Total Overhead page size 1024: 5311272 Total Allocated page size 1024: 22742016 Total Overhead page size 2048: 5467928 Total Allocated page size 2048: 26421248 Total Overhead page size 4096: 109992 Total Allocated page size 4096: 7344128 Total Overhead page size 8192: 104600 Total Allocated page size 8192: 79626240 Total Overhead page size 16384: 246312 Total Allocated page size 16384: 162529280 Total Overhead page size 32768: 360 Total Allocated page size 32768: 5177344 Total Overhead page size 65536: 272 Total Allocated page size 65536: 1966080 Total Overhead page size 131072: 61360 Total Allocated page size 131072: 2621440 Total Overhead page size 262144: 992 Total Allocated page size 262144: 2883584 Total Overhead page size 524288: 480 Total Allocated page size 524288: 3145728 Total Overhead page size 1048576: 32 Total Allocated page size 1048576: 4194304 Total Overhead page size 2097152: 0 Total Allocated page size 2097152: 2097152 Total Overhead page size 4194304: 8 Total Allocated page size 4194304: 4194304 Total Overhead page size 8388608: 0 Total Allocated page size 8388608: 8388608 Total Overhead page size 16777216: 8 Total Allocated page size 16777216: 16777216 Total Overhead page size 24: 12686 Total Allocated page size 24: 65382552 Total Overhead page size 40: 9277 Total Allocated page size 40: 65566840 Total Overhead page size 48: 8960 Total Allocated page size 48: 34441152 Total Overhead page size 56: 8735 Total Allocated page size 56: 27931400 Total Overhead page size 72: 8523 Total Allocated page size 72: 21867768 Total Overhead page size 80: 6265 Total Allocated page size 80: 6522720 Total Overhead page size 88: 5903 Total Allocated page size 88: 11477576 Total Overhead page size 96: 4039 Total Allocated page size 96: 1891488 Total Overhead page size 112: 3297 Total Allocated page size 112: 13666800 Total Overhead page size 120: 2553 Total Allocated page size 120: 3147840 Total Overhead page size 152: 2272 Total Allocated page size 152: 26120440 Total Overhead page size 128: 2671 Total Allocated page size 128: 31542912 Total Overhead page size 144: 644114 Total Allocated page size 144: 39179952 Total Overhead page size 168: 16277 Total Allocated page size 168: 65221296 Total Overhead page size 104: 3447 Total Allocated page size 104: 14415232 Total Overhead page size 392: 570682 Total Allocated page size 392: 11078704 Total Overhead page size 216: 1498087 Total Allocated page size 216: 30552984 String pool entries 36635 identifiers 31077 (84.83%) slots 65536 deleted 3222 bytes 2768k (17592186044413M overhead) table size 512k coll/search 0.9016 ins/search 0.0324 avg. entry 77.37 bytes (+/- 95.13) longest entry 493 Kind Nodes Bytes --------------------------------------- decls 589238 86477344 types 308244 51784992 blocks 32532 2862816 stmts 52160 1997536 refs 257027 10084536 exprs 832099 31926272 constants 15835 425902 identifiers 36635 3223880 vecs 1052922 50570064 binfos 8652 841144 ssa names 141333 10175976 constructors 25762 618288 random kinds 967059 38190752 lang_decl kinds 190903 6702564 lang_type kinds 13135 1996520 omp clauses 0 0 --------------------------------------- Total 4523536 297878586 --------------------------------------- Code Nodes ---------------------------- error_mark 1 identifier_node 36635 tree_list 628948 tree_vec 1052922 block 32532 offset_type 0 enumeral_type 2842 boolean_type 90 integer_type 4706 real_type 1055 pointer_type 27233 reference_type 38333 nullptr_type 1 fixed_point_type 36 complex_type 14 vector_type 24 array_type 599 record_type 46785 union_type 44 qual_union_type 0 void_type 16 pointer_bounds_type 1 function_type 20158 method_type 42162 lang_type 3 void_cst 1 integer_cst 13519 real_cst 584 fixed_cst 0 complex_cst 0 vector_cst 2 string_cst 1729 function_decl 70790 label_decl 30111 field_decl 10731 var_decl 92876 const_decl 6722 parm_decl 178905 type_decl 140570 result_decl 25101 debug_expr_decl 0 namespace_decl 25 imported_decl 0 namelist_decl 0 translation_unit_decl 1 component_ref 79312 bit_field_ref 0 array_ref 5414 array_range_ref 0 realpart_expr 72 imagpart_expr 72 view_convert_expr 0 indirect_ref 114564 obj_type_ref 36 constructor 25762 compound_expr 3858 modify_expr 24404 init_expr 49021 target_expr 9060 cond_expr 4920 vec_cond_expr 0 vec_perm_expr 0 bind_expr 21931 call_expr 124426 with_cleanup_expr 0 cleanup_point_expr 37168 placeholder_expr 0 plus_expr 6102 minus_expr 3149 mult_expr 6037 pointer_plus_expr 4012 mult_highpart_expr 0 trunc_div_expr 738 ceil_div_expr 0 floor_div_expr 0 round_div_expr 0 trunc_mod_expr 64 ceil_mod_expr 0 floor_mod_expr 0 round_mod_expr 0 rdiv_expr 130 exact_div_expr 297 fix_trunc_expr 4 float_expr 58 negate_expr 1446 min_expr 0 max_expr 0 abs_expr 24 lshift_expr 832 rshift_expr 62 lrotate_expr 0 rrotate_expr 0 bit_ior_expr 183 bit_xor_expr 8 bit_and_expr 435 bit_not_expr 808 truth_andif_expr 1145 truth_orif_expr 386 truth_and_expr 0 truth_or_expr 0 truth_xor_expr 0 truth_not_expr 1279 lt_expr 2356 le_expr 993 gt_expr 1804 ge_expr 441 eq_expr 2572 ne_expr 2229 unordered_expr 4 ordered_expr 3 unlt_expr 0 unle_expr 6 ungt_expr 0 unge_expr 0 uneq_expr 0 ltgt_expr 0 range_expr 0 paren_expr 0 convert_expr 85069 addr_space_convert_expr 0 fixed_convert_expr 0 nop_expr 171435 non_lvalue_expr 1882 compound_literal_expr 0 save_expr 177 addr_expr 194210 fdesc_expr 0 complex_expr 27 conj_expr 0 predecrement_expr 250 preincrement_expr 2540 postdecrement_expr 24 postincrement_expr 586 va_arg_expr 0 try_catch_expr 5756 try_finally 5280 decl_expr 9747 label_expr 3701 goto_expr 2257 return_expr 11738 exit_expr 81 loop_expr 1193 switch_expr 1 case_label_expr 47 asm_expr 0 ssa_name 141333 catch_expr 62 eh_filter_expr 168 scev_known 0 scev_not_known 0 polynomial_chrec 0 statement_list 36330 assert_expr 0 tree_binfo 8652 with_size_expr 0 realign_load 0 target_mem_ref 0 mem_ref 40467 oacc_parallel 0 oacc_kernels 0 oacc_data 0 oacc_host_data 0 omp_parallel 0 omp_task 0 omp_for 0 omp_simd 0 cilk_simd 0 cilk_for 0 omp_distribute 0 oacc_loop 0 omp_teams 0 omp_target_data 0 omp_target 0 omp_sections 0 omp_single 0 omp_section 0 omp_master 0 omp_taskgroup 0 omp_ordered 0 omp_critical 0 oacc_cache 0 oacc_declare 0 oacc_enter_data 0 oacc_exit_data 0 oacc_update 0 omp_target_update 0 omp_atomic 0 omp_atomic_read 0 omp_atomic_capture_old 0 omp_atomic_capture_new 0 omp_clause 0 transaction_expr 0 reduc_max_expr 0 reduc_min_expr 0 reduc_plus_expr 0 dot_prod_expr 0 widen_sum_expr 0 sad_expr 0 widen_mult_expr 0 widen_mult_plus_expr 0 widen_mult_minus_expr 0 widen_lshift_expr 0 fma_expr 0 widen_mult_hi_expr 0 widen_mult_lo_expr 0 widen_mult_even_expr 0 widen_mult_odd_expr 0 vec_unpack_hi_expr 0 vec_unpack_lo_expr 0 vec_unpack_float_hi_expr 0 vec_unpack_float_lo_expr 0 vec_pack_trunc_expr 0 vec_pack_sat_expr 0 vec_pack_fix_trunc_expr 0 widen_lshift_hi_expr 0 widen_lshift_lo_expr 0 predict_expr 2 optimization_node 2 target_option_node 2 annotate_expr 0 cilk_spawn_stmt 0 cilk_sync_stmt 0 @dummy 0 c_maybe_const_expr 0 excess_precision_expr 0 userdef_literal 0 sizeof_expr 228 array_notation_ref 0 unconstrained_array_type 0 unconstrained_array_ref 0 null_expr 0 plus_nomod_expr 0 minus_nomod_expr 0 attr_addr_expr 0 stmt_stmt 0 loop_stmt 0 exit_stmt 0 offset_ref 0 ptrmem_cst 0 nw_expr 219 vec_nw_expr 0 dl_expr 47 vec_dl_expr 0 scope_ref 17122 member_ref 4 type_expr 0 aggr_init_expr 5224 vec_init_expr 44 throw_expr 128 empty_class_expr 328 baselink 43301 template_decl 32744 template_parm_index 94838 template_template_parm 26 template_type_parm 118470 typename_type 5616 typeof_type 6 bound_template_template_parm 20 unbound_class_template 0 using_decl 662 using_stmt 0 default_arg 223 deferred_noexcept 0 template_id_expr 652 overload 53689 pseudo_dtor_expr 7 modop_expr 3534 cast_expr 3208 reinterpret_cast_expr 21 const_cast_expr 59 static_cast_expr 254 dynamic_cast_expr 12 implicit_conv_expr 199 dotstar_expr 11 typeid_expr 0 noexcept_expr 0 non_dependent_expr 5344 ctor_initializer 1201 try_block 167 eh_spec_block 486 handler 165 must_not_throw_expr 0 cleanup_stmt 5660 if_stmt 3538 for_stmt 1660 range_for_stmt 0 while_stmt 310 do_stmt 20 break_stmt 103 continue_stmt 9 switch_stmt 11 expr_stmt 39912 tag_defn 15 offsetof_expr 0 arrow_expr 2814 alignof_expr 0 at_encode_expr 0 stmt_expr 0 unary_plus_expr 5 static_assert 0 type_argument_pack 0 nontype_argument_pack 0 type_pack_expansion 0 expr_pack_expansion 0 argument_pack_select 0 trait_expr 26 lambda_expr 0 decltype_type 4 underlying_type 0 bases 0 template_info 109699 urshift_expr 0 compare_expr 0 compare_l_expr 0 compare_g_expr 0 class_interface_type 0 class_implementation_type 0 category_interface_type 0 category_implementation_type 0 protocol_interface_type 0 keyword_decl 0 instance_method_decl 0 class_method_decl 0 property_decl 0 message_send_expr 0 class_reference_expr 0 property_ref 0 ---------------------------- SSA_NAME nodes allocated: 141333 SSA_NAME nodes reused: 2236 PHI nodes allocated: 8688 PHI nodes reused: 123 Type hash: size 131071, 61196 elements, 0.904404 collisions DECL_DEBUG_EXPR hash: size 1021, 254 elements, 0.104783 collisions DECL_VALUE_EXPR hash: size 1021, 869 elements, 0.567277 collisions 4376489 fields searched in 559094[520465] calls to lookup_field[_1] 1545728 fnfields searched in 0 calls to lookup_fnfields 0 calls to get_base_type convert_harshness = 0 compute_conversion_costs = 0 vtables = 173; vtable searches = 0 vtable entries = 0; vtable elems = 644 decl_specializations: size 65521, 37557 elements, 1.219160 collisions type_specializations: size 32749, 14203 elements, 2.448762 collisions maximum template instantiation depth reached: 28 GIMPLE statements Kind Stmts Bytes --------------------------------------- assignments 52318 4225424 phi nodes 8688 2379168 conditionals 3651 292080 everything else 178724 13531800 --------------------------------------- Total 243381 20428472 --------------------------------------- RTX Kind Count Bytes --------------------------------------- expr_list 411087 9866088 insn_list 4515 108360 address 458 7328 insn 295259 18896576 jump_insn 30543 2199096 call_insn 37838 2724336 barrier 29343 1877952 code_label 31401 2009664 note 173656 9724736 parallel 44402 710432 unspec 24370 584880 set 327327 7855848 use 67786 1084576 clobber 43795 700720 call 37838 908112 return 1 8 simple_return 1 8 const_int 1784 28544 const_fixed 26 832 const_double 242 9680 const_vector 130 2080 const 298 4768 pc 1 8 reg 433159 10395816 scratch 19525 156200 subreg 246 5904 concat 11 264 mem 412829 9907896 label_ref 22632 362112 symbol_ref 15191 364584 cc0 1 8 if_then_else 3500 112000 compare 4066 97584 plus 337182 8092368 minus 478 11472 neg 49 784 mult 1866 44784 div 277 6648 mod 39 936 udiv 30 720 umod 4 96 and 32 768 ior 4 96 xor 123 2952 not 14 224 ashift 1137 27288 ashiftrt 191 4584 lshiftrt 70 1680 pre_dec 13428 214848 post_inc 8075 129200 pre_modify 320 7680 ne 1353 32472 eq 10895 261480 ge 598 14352 gt 2360 56640 le 405 9720 lt 223 5352 geu 90 2160 gtu 96 2304 leu 22 528 ltu 206 4944 unordered 22 528 uneq 3 72 unle 36 864 ltgt 6 144 sign_extend 829 13264 zero_extend 177 2832 truncate 22 352 float 40 640 fix 2 32 abs 16 256 clz 2 32 vec_merge 20 640 vec_concat 13 312 vec_duplicate 20 320 rtvec 68902 1044984 --------------------------------------- Total 2922938 90709352 --------------------------------------- Alloc-pool Kind Elt size Pools Allocated (elts) Peak (elts) Leak (elts) -------------------------------------------------------------------------------------------------------------- objects 96 9804 9762720( 101695) 105792( 1102) 0( 0) cost vectors 192 254904 527824( 2749) 5976( 31) 0( 0) insn regs 24 9804 13857864( 577411) 116784( 4866) 0( 0) et_occ pool 56 189003 111206088( 1985823) 58352( 1042) 0( 0) et_node pool 72 189003 84929400( 1179575) 37584( 522) 0( 0) allocnos 200 9804 20300000( 101500) 220400( 1102) 0( 0) prefs 40 9804 16480( 412) 960( 24) 0( 0) df_scan ref base 72 19608 1762675704( 24481607) 2250288( 31254) 0( 0) struct case_node pool 64 2 128( 2) 64( 1) 0( 0) df_scan ref artificial 80 19608 150922720( 1886534) 173600( 2170) 0( 0) df_scan ref regular 80 19608 242001680( 3025021) 456560( 5707) 0( 0) df_scan insn 56 19608 39579904( 706784) 170240( 3040) 0( 0) df_scan reg 24 19608 138898800( 5787450) 89496( 3729) 0( 0) df_scan mw_reg 40 19608 42200( 1055) 520( 13) 0( 0) lra copies 40 9804 8240( 206) 480( 12) 0( 0) live ranges 40 19608 6496656( 162416) 58992( 1474) 0( 0) -------------------------------------------------------------------------------------------------------------- Total 819188 2581226408 -------------------------------------------------------------------------------------------------------------- Bitmaps Leak Peak Times N searches Search iter Type -------------------------------------------------------------------------------------------------------------------------------- reload1.c:505 (init_reload) 0: 0.0% 0 0: 0.0% 0 0 heap tree-into-ssa.c:2280 (mark_def_dom_walker) 0: 0.0% 0 0: 0.0% 0 0 heap df-scan.c:4228 (df_exit_block_bitmap_verify) 0: 0.0% 0 0: 0.0% 0 0 heap lra-assigns.c:1617 (lra_assign) 0: 0.0% 0 0: 0.0% 0 0 heap regstat.c:358 (regstat_compute_ri) 0: 0.0% 0 0: 0.0% 0 0 heap lra.c:2303 (lra) 0: 0.0% 0 0: 0.0% 0 0 heap tree-outof-ssa.c:1036 (remove_ssa_form) 0: 0.0% 0 0: 0.0% 0 0 heap lra-constraints.c:6106 (lra_undo_inheritance) 0: 0.0% 0 0: 0.0% 0 0 heap lra-coalesce.c:298 (lra_coalesce) 0: 0.0% 0 0: 0.0% 0 0 heap tree-cfgcleanup.c:783 (repair_loop_structures) 0: 0.0% 0 0: 0.0% 0 0 heap lra-spills.c:497 (spill_pseudos) 0: 0.0% 0 0: 0.0% 0 0 heap lra-constraints.c:4272 (lra_constraints) 0: 0.0% 0 0: 0.0% 0 0 heap lra.c:2305 (lra) 0: 0.0% 0 0: 0.0% 0 0 heap cfgexpand.c:525 (add_scope_conflicts) 0: 0.0% 0 0: 0.0% 0 0 heap lra-eliminations.c:1171 (spill_pseudos) 0: 0.0% 0 0: 0.0% 0 0 heap tree-ssa-coalesce.c:1284 (coalesce_ssa_name) 0: 0.0% 0 0: 0.0% 0 0 heap tree-ssa-live.c:1022 (new_tree_live_info) 0: 0.0% 0 0: 0.0% 0 0 heap function.c:5972 (thread_prologue_and_epilogue_in 0: 0.0% 0 0: 0.0% 0 0 heap reload1.c:506 (init_reload) 0: 0.0% 0 0: 0.0% 0 0 heap cfgexpand.c:742 (update_alias_info_with_stack_va 0: 0.0% 0 0: 0.0% 0 0 heap reload1.c:504 (init_reload) 0: 0.0% 0 0: 0.0% 0 0 heap tree-chkp.c:920 (chkp_type_bounds_count) 0: 0.0% 0 0: 0.0% 0 0 heap lra-eliminations.c:1453 (lra_eliminate) 0: 0.0% 0 0: 0.0% 0 0 heap lra-constraints.c:6031 (undo_optional_reloads) 0: 0.0% 0 0: 0.0% 0 0 heap tree-into-ssa.c:3267 (update_ssa) 0: 0.0% 0 0: 0.0% 0 0 heap df-core.c:1683 (df_compact_blocks) 0: 0.0% 0 0: 0.0% 0 0 heap tree-into-ssa.c:906 (prune_unused_phi_nodes) 0: 0.0% 0 0: 0.0% 0 0 heap lra-constraints.c:5713 (lra_inheritance) 0: 0.0% 0 0: 0.0% 0 0 heap tree-ssa-live.c:390 (partition_view_bitmap) 0: 0.0% 0 0: 0.0% 0 0 heap tree-eh.c:4168 (cleanup_empty_eh_merge_phis) 0: 0.0% 0 0: 0.0% 0 0 heap lra-coalesce.c:375 (lra_coalesce) 0: 0.0% 0 0: 0.0% 0 0 heap lra-coalesce.c:337 (lra_coalesce) 0: 0.0% 0 0: 0.0% 0 0 heap lra-spills.c:496 (spill_pseudos) 0: 0.0% 0 0: 0.0% 0 0 heap lra-assigns.c:1335 (assign_by_spills) 0: 0.0% 0 0: 0.0% 0 0 heap lra-assigns.c:1483 (assign_by_spills) 0: 0.0% 0 0: 0.0% 0 0 heap lra-lives.c:1388 (lra_live_ranges_init) 0: 0.0% 0 0: 0.0% 0 0 heap lra-coalesce.c:299 (lra_coalesce) 0: 0.0% 0 0: 0.0% 0 0 heap regstat.c:356 (regstat_compute_ri) 0: 0.0% 0 0: 0.0% 0 0 heap regstat.c:357 (regstat_compute_ri) 0: 0.0% 0 0: 0.0% 0 0 heap lra-assigns.c:1328 (assign_by_spills) 0: 0.0% 40 24: 0.0% 0 0 heap lra-assigns.c:1327 (assign_by_spills) 0: 0.0% 40 24: 0.0% 0 0 heap lra.c:1954 (remove_scratches) 0: 0.0% 40 40: 0.0% 0 0 heap lra.c:1955 (remove_scratches) 0: 0.0% 40 40: 0.0% 0 0 heap lra-constraints.c:5712 (lra_inheritance) 0: 0.0% 40 392: 0.0% 0 0 heap df-scan.c:3827 (df_update_exit_block_uses) 0: 0.0% 40 18958: 0.3% 0 0 heap df-scan.c:4279 (df_scan_verify) 0: 0.0% 40 19608: 0.3% 0 0 heap lra-lives.c:499 (initiate_live_solver) 0: 0.0% 40 19608: 0.3% 0 0 heap df-scan.c:3656 (df_update_entry_block_defs) 0: 0.0% 40 98012: 1.3% 0 0 heap df-scan.c:4199 (df_entry_block_bitmap_verify) 0: 0.0% 40 157036: 2.1% 0 0 heap df-problems.c:3277 (df_note_compute) 0: 0.0% 40 176640: 2.4% 0 0 heap df-scan.c:321 (df_scan_alloc) 0: 0.0% 72 314: 0.0% 0 0 heap lra-assigns.c:1588 (lra_assign) 0: 0.0% 80 15: 0.0% 1 1 heap lra-assigns.c:1326 (assign_by_spills) 0: 0.0% 80 32: 0.0% 0 0 heap lra.c:2302 (lra) 0: 0.0% 80 104: 0.0% 4 2 heap lra.c:2304 (lra) 0: 0.0% 80 118: 0.0% 16 8 heap lra-constraints.c:5711 (lra_inheritance) 0: 0.0% 80 224: 0.0% 1352 457 heap df-scan.c:322 (df_scan_alloc) 0: 0.0% 80 236: 0.0% 0 0 heap lra-assigns.c:1601 (lra_assign) 0: 0.0% 80 242: 0.0% 0 0 heap lra-assigns.c:1336 (assign_by_spills) 0: 0.0% 80 268: 0.0% 23 12 heap df-scan.c:320 (df_scan_alloc) 0: 0.0% 80 392: 0.0% 0 0 heap df-scan.c:316 (df_scan_alloc) 0: 0.0% 80 26368: 0.4% 0 0 heap df-scan.c:315 (df_scan_alloc) 0: 0.0% 80 27276: 0.4% 0 0 heap bitmap.c:1893 (bitmap_ior_and_compl_into) 0: 0.0% 80 60184: 0.8% 0 0 heap lra-constraints.c:5714 (lra_inheritance) 0: 0.0% 120 18912: 0.3% 0 0 heap lra-constraints.c:5989 (undo_optional_reloads) 0: 0.0% 120 20233: 0.3% 1 0 heap tree-cfg.c:7939 (remove_edge_and_dominated_block 0: 0.0% 152 241: 0.0% 377 205 heap lra-lives.c:502 (initiate_live_solver) 0: 0.0% 160 19620: 0.3% 14 3 heap df-scan.c:317 (df_scan_alloc) 0: 0.0% 160 28604: 0.4% 0 0 heap df-problems.c:3275 (df_note_compute) 0: 0.0% 160 267972: 3.6% 70231 37419 heap tree-eh.c:2208 (execute) 0: 0.0% 192 1384290: 18.8% 57443 49550 heap df-problems.c:3276 (df_note_compute) 0: 0.0% 240 771875: 10.5% 5 0 heap ira-build.c:2681 (update_bad_spill_attribute) 0: 0.0% 720 35334: 0.5% 608 391 heap df-scan.c:4278 (df_scan_verify) 0: 0.0% 920 111469: 1.5% 782 782 heap df-scan.c:1246 (df_process_deferred_rescans) 0: 0.0% 960 42214: 0.6% 9675 14690 heap reginfo.c:399 (init_reg_sets_1) 72: 0.0% 72 2: 0.0% 0 0 heap reginfo.c:404 (init_reg_sets_1) 72: 0.0% 72 2: 0.0% 0 0 heap cfgexpand.c:719 (update_alias_info_with_stack_va 224: 0.0% 224 6: 0.0% 0 0 heap lra-assigns.c:1333 (assign_by_spills) 280: 0.0% 280 17: 0.0% 0 0 heap tree-cfgcleanup.c:689 (cleanup_tree_cfg_1) 648: 0.0% 720 4475: 0.1% 12 5 heap regstat.c:359 (regstat_compute_ri) 1632: 0.0% 1744 55676: 0.8% 7078 3535 heap df-core.c:1033 (df_worklist_dataflow_doublequeue 2368: 0.0% 2440 29584: 0.4% 75 70 heap tree-into-ssa.c:3270 (update_ssa) 2808: 0.0% 2880 15904: 0.2% 0 0 heap cfgexpand.c:377 (add_stack_var_conflict) 3544: 0.0% 3544 178: 0.0% 2 2 heap regstat.c:369 (regstat_compute_ri) 3728: 0.0% 3800 21883: 0.3% 66 40 heap tree-into-ssa.c:3054 (insert_updated_phi_nodes_f 4392: 0.0% 4464 4975: 0.1% 440 229 heap tree-into-ssa.c:816 (prune_unused_phi_nodes) 4616: 0.0% 4688 103518: 1.4% 58 27 heap df-core.c:1278 (df_analyze) 7704: 0.0% 7856 63576: 0.9% 15310 8576 heap df-core.c:1109 (df_worklist_dataflow) 8008: 0.0% 8120 71174: 1.0% 4325 2336 heap cfganal.c:1304 (compute_idf) 9176: 0.0% 9248 4053: 0.1% 9 5 heap cfgexpand.c:540 (add_scope_conflicts) 11312: 0.0% 13568 3553: 0.0% 0 0 heap tree-cfg.c:7938 (remove_edge_and_dominated_block 16880: 0.1% 16880 776: 0.0% 279 154 heap tree-ssa.c:943 (verify_ssa) 21424: 0.1% 21424 81682: 1.1% 683 346 heap tree-ssa-coalesce.c:555 (ssa_conflicts_add_one) 22656: 0.1% 22728 36684: 0.5% 9 4 heap tree-cfg.c:1219 (start_recording_case_labels) 57576: 0.2% 57648 103388: 1.4% 1153 483 heap df-problems.c:1256 (df_lr_add_problem) 70120: 0.3% 70152 104389: 1.4% 316 221 heap tree-ssa-coalesce.c:668 (new_live_track) 129688: 0.5% 129728 61264: 0.8% 161 69 heap df-scan.c:318 (df_scan_alloc) 132072: 0.5% 132072 153504: 2.1% 636 318 heap df-scan.c:319 (df_scan_alloc) 136224: 0.5% 136224 34235: 0.5% 239 132 heap tree-into-ssa.c:3355 (update_ssa) 159736: 0.6% 159736 16007: 0.2% 107 54 heap tree-into-ssa.c:308 (mark_for_renaming) 173456: 0.7% 173456 7060: 0.1% 25 10 heap tree-ssa-live.c:1013 (new_tree_live_info) 237224: 0.9% 237224 16593: 0.2% 1105 517 heap tree-ssa-live.c:1017 (new_tree_live_info) 273760: 1.0% 273760 17481: 0.2% 692 367 heap tree-into-ssa.c:2404 (execute) 340416: 1.3% 342648 45238: 0.6% 268 289 heap lra-lives.c:510 (initiate_live_solver) 368040: 1.4% 368080 202401: 2.7% 5742 3529 heap lra-lives.c:509 (initiate_live_solver) 395456: 1.5% 395456 158718: 2.2% 10257 5606 heap tree-ssa-live.c:296 (partition_view_init) 521352: 2.0% 521352 20721: 0.3% 8 3 heap tree-ssa-coalesce.c:670 (new_live_track) 531680: 2.0% 531680 81088: 1.1% 471 216 heap df-problems.c:805 (df_lr_alloc) 1022992: 3.9% 1022992 109887: 1.5% 20246 10321 heap df-problems.c:806 (df_lr_alloc) 1030376: 3.9% 1030520 137777: 1.9% 13019 7191 heap ira.c:711 (ira_allocate_bitmap) 1041336: 3.9% 1041480 133120: 1.8% 4897 3206 heap df-problems.c:808 (df_lr_alloc) 1044728: 4.0% 1045608 140130: 1.9% 3921 1934 heap df-problems.c:807 (df_lr_alloc) 1147400: 4.3% 1147472 123436: 1.7% 2635 1287 heap lra-assigns.c:442 (init_live_reload_and_inherita 1212304: 4.6% 1212656 318114: 4.3% 7977 3994 heap tree-into-ssa.c:518 (get_def_blocks_for) 2471448: 9.3% 2471448 90661: 1.2% 84 37 heap lra-assigns.c:373 (init_lives) 2547232: 9.6% 2547232 342113: 4.6% 7541 3885 heap tree-into-ssa.c:519 (get_def_blocks_for) 3490080: 13.2% 3490080 105492: 1.4% 257 143 heap lra.c:1324 (initialize_lra_reg_info_element) 3761704: 14.2% 3761776 917518: 12.5% 27442 15917 heap tree-into-ssa.c:517 (get_def_blocks_for) 4026016: 15.2% 4026016 120038: 1.6% 468 227 heap -------------------------------------------------------------------------------------------------------------------------------- Total 26443960 7365010 -------------------------------------------------------------------------------------------------------------------------------- Hash tables Leak Peak Times Type -------------------------------------------------------------------------------------------------------------------------------- except.c:2492 (convert_to_eh_region_ranges) 0: 0.0% 248 2057: 1.3% heap except.c:896 (assign_filter_values) 0: 0.0% 248 4038: 2.5% heap except.c:897 (assign_filter_values) 0: 0.0% 248 4038: 2.5% heap hash-table.h:591 (initialize_original_copy_table 0: 0.0% 312 29412: 17.9% heap tree-ssa-coalesce.c:1295 (coalesce_ssa_name) 0: 0.0% 352 9896: 6.0% heap hash-table.h:591 (update_ssa) 0: 0.0% 488 2057: 1.3% heap hash-table.h:591 (build_gimple_cfg) 0: 0.0% 1504 9876: 6.0% heap hash-table.h:591 (initiate_regno_cost_classes) 0: 0.0% 2008 9804: 6.0% heap tree-ssa-live.c:136 (var_map_base_init) 0: 0.0% 2008 9819: 6.0% heap hash-table.h:591 (create_pseudo_cfg) 0: 0.0% 3024 10522: 6.4% heap hash-table.h:591 (execute) 0: 0.0% 6080 9911: 6.0% heap cp/semantics.c:4135 (__base_ctor ) 0: 0.0% 12240 98: 0.1% heap hash-table.h:591 (init_ssa_renamer) 0: 0.0% 12240 13596: 8.3% heap hash-table.h:591 (create_coalesce_list) 0: 0.0% 32744 9804: 6.0% heap cgraph.c:755 (get_edge) 0: 0.0% 101536 72: 0.0% ggc tree-ssa.c:1078 (init_tree_ssa) 0: 0.0% 2437592 9829: 6.0% ggc function.c:5591 (record_insns) 0: 0.0% 3179112 19601: 11.9% ggc optabs.c:6237 (init_optabs) 104: 0.0% 104 1: 0.0% ggc hash-table.h:591 (simplifiable_subregs) 248: 0.0% 248 1: 0.0% heap varasm.c:6072 (init_varasm_once) 248: 0.0% 248 1: 0.0% ggc varasm.c:3699 (create_constant_pool) 248: 0.0% 1590176 9806: 6.0% ggc emit-rtl.c:5907 (init_emit_once) 488: 0.0% 488 1: 0.0% ggc emit-rtl.c:5911 (init_emit_once) 488: 0.0% 488 1: 0.0% ggc emit-rtl.c:5909 (init_emit_once) 488: 0.0% 488 1: 0.0% ggc hash-table.h:591 (fixed_type_or_null) 488: 0.0% 488 1: 0.0% heap optabs.c:6140 (init_one_libfunc) 488: 0.0% 488 1: 0.0% ggc function.c:1233 (init_temp_slots) 488: 0.0% 488 1: 0.0% ggc cp/mangle.c:3793 (mangle_conv_op_name_for_type) 488: 0.0% 736 2: 0.0% ggc tree.c:681 (init_ttree) 1016: 0.0% 1016 1: 0.0% ggc cp/tree.c:842 (build_cplus_array_type) 1016: 0.0% 1504 2: 0.0% ggc hash-table.h:591 (register_scoped_attributes) 2008: 0.1% 2008 1: 0.0% heap hash-table.h:591 (build_type_inheritance_graph) 2008: 0.1% 3024 4: 0.0% heap cp/cp-objcp-common.c:224 (init_shadowed_var_for_ 8168: 0.2% 8168 1: 0.0% ggc varasm.c:6073 (init_varasm_once) 8168: 0.2% 8168 1: 0.0% ggc tree.c:672 (init_ttree) 8168: 0.2% 8168 1: 0.0% ggc tree.c:675 (init_ttree) 8168: 0.2% 8168 1: 0.0% ggc cp/typeck2.c:299 (abstract_virtuals_error_sfinae 8168: 0.2% 12240 6: 0.0% ggc hash-table.h:591 (curr_statistics_hash) 12896: 0.4% 12896 52: 0.0% heap tree.c:677 (init_ttree) 16312: 0.5% 16312 1: 0.0% ggc emit-rtl.c:5904 (init_emit_once) 16312: 0.5% 24480 6: 0.0% ggc cp/decl.c:3398 (build_typename_type) 65528: 1.8% 98272 8: 0.0% ggc varasm.c:6071 (init_varasm_once) 131048: 3.7% 196576 10: 0.0% ggc symtab.c:1337 (set_section_for_node) 131048: 3.7% 196576 11: 0.0% ggc cp/pt.c:22450 (init_template_processing) 261992: 7.3% 393040 10: 0.0% ggc symtab.c:266 (symtab_initialize_asm_name_hash) 261992: 7.3% 393040 12: 0.0% ggc cp/tree.c:3895 (init_tree) 524168: 14.7% 786160 11: 0.0% ggc emit-rtl.c:5913 (init_emit_once) 524168: 14.7% 786160 11: 0.0% ggc cp/pt.c:22449 (init_template_processing) 524168: 14.7% 786160 11: 0.0% ggc tree.c:669 (init_ttree) 1048568: 29.4% 1572736 8: 0.0% ggc -------------------------------------------------------------------------------------------------------------------------------- Total 3569352 164416 -------------------------------------------------------------------------------------------------------------------------------- Hash maps Leak Peak Times Type -------------------------------------------------------------------------------------------------------------------------------- hash-map.h:116 (lower_try_finally_switch) 0: 0.0% 208 1: 0.0% heap tree-eh.c:3371 (execute) 0: 0.0% 208 9804: 5.4% heap hash-map.h:116 (init_vars_expansion) 0: 0.0% 208 9804: 5.4% heap hash-map.h:116 (start_recording_case_labels) 0: 0.0% 208 24581: 13.5% heap cp/constexpr.c:3531 (cxx_eval_outermost_constant 0: 0.0% 208 90304: 49.6% heap hash-map.h:116 (update_alias_info_with_stack_var 0: 0.0% 416 2: 0.0% heap hash-map.h:116 (copy_gimple_seq_and_replace_loca 0: 0.0% 704 7266: 4.0% heap cfgexpand.c:1763 (expand_used_vars) 0: 0.0% 704 9940: 5.5% heap hash-map.h:116 (instantiate_decl) 0: 0.0% 1472 9392: 5.2% heap hash-map.h:116 (execute) 0: 0.0% 1472 9831: 5.4% heap hash-map.h:116 (redirect_edge_var_map_add) 0: 0.0% 6048 453: 0.2% heap hash-map.h:116 (maybe_clone_body) 0: 0.0% 24480 7279: 4.0% heap symbol-summary.h:40 (__base_ctor ) 0: 0.0% 393152 11: 0.0% ggc symtab.c:1119 (verify_symtab_nodes) 0: 0.0% 393152 56: 0.0% heap tree-eh.c:113 (add_stmt_to_eh_lp_fn) 0: 0.0% 1619936 3180: 1.7% ggc except.c:270 (init_eh) 496: 5.7% 496 1: 0.0% ggc hash-map.h:116 (register_pass_name) 8144: 94.3% 8144 1: 0.0% heap -------------------------------------------------------------------------------------------------------------------------------- Total 8640 181906 -------------------------------------------------------------------------------------------------------------------------------- Hash sets Leak Peak Times Type -------------------------------------------------------------------------------------------------------------------------------- cfgexpand.c:741 (update_alias_info_with_stack_va 0: 0.0% 104 1: 0.0% heap stmt.c:1197 (expand_case) 0: 0.0% 104 2: 0.0% heap cgraphunit.c:938 (analyze_functions) 0: 0.0% 104 2: 0.0% heap ipa.c:332 (remove_unreachable_nodes) 0: 0.0% 104 5: 0.0% heap ipa.c:331 (remove_unreachable_nodes) 0: 0.0% 104 5: 0.0% heap hash-set.h:183 (walk_ssa_copies) 0: 0.0% 104 20: 0.0% heap tree-eh.c:3612 (lower_eh_dispatch) 0: 0.0% 104 56: 0.0% heap hash-set.h:183 (uses_parameter_packs) 0: 0.0% 104 3295: 0.2% heap tree-inline.c:5219 (copy_gimple_seq_and_replace_ 0: 0.0% 104 7263: 0.4% heap value-prof.c:594 (verify_histograms) 0: 0.0% 104 263455: 14.3% heap cgraphbuild.c:427 (record_references_in_initiali 0: 0.0% 352 322: 0.0% heap hash-set.h:183 (for_each_template_parm) 0: 0.0% 352 3022: 0.2% heap tree-cfg.c:4979 (verify_gimple_in_cfg) 0: 0.0% 352 263623: 14.3% heap hash-set.h:183 (init_varasm_once) 0: 0.0% 1504 4: 0.0% heap tree.c:11480 (walk_tree_without_duplicates_1) 0: 0.0% 1504 283315: 15.4% heap hash-set.h:183 (lookup_arg_dependent_1) 0: 0.0% 3024 7616: 0.4% heap tree-cfg.c:4975 (verify_gimple_in_cfg) 0: 0.0% 6080 338822: 18.4% heap hash-set.h:183 (check_for_bare_parameter_packs) 0: 0.0% 12240 103612: 5.6% heap cgraph.c:3053 (verify_node) 0: 0.0% 24480 145108: 7.9% heap tree-cfg.c:4976 (verify_gimple_in_cfg) 0: 0.0% 24480 390870: 21.3% heap hash-set.h:183 (cp_genericize_tree) 0: 0.0% 49056 28904: 1.6% heap ipa.c:330 (remove_unreachable_nodes) 0: 0.0% 393040 60: 0.0% heap -------------------------------------------------------------------------------------------------------------------------------- Total 0 1839382 -------------------------------------------------------------------------------------------------------------------------------- Heap vectors Leak Peak Times Leak items Peak items -------------------------------------------------------------------------------------------------------------------------------- tree-cfg.c:8002 (remove_edge_and_dominated_block 0: 0.0% 4 18: 0.0% 0 0 tree-into-ssa.c:310 (mark_for_renaming) 0: 0.0% 4 1919: 0.3% 0 0 cp/parser.c:629 (cp_lexer_alloc) 0: 0.0% 5 1: 0.0% 0 0 gimplify.c:1529 (gimplify_switch_expr) 0: 0.0% 8 1: 0.0% 0 0 function.c:2380 (assign_parms_augmented_arg_list 0: 0.0% 8 23: 0.0% 92 92 cfgloop.c:257 (flow_loop_nodes_find) 0: 0.0% 8 4112: 0.7% 8 8 gimple-low.c:125 (lower_function_body) 0: 0.0% 8 9798: 1.6% 0 0 tree-ssa-operands.c:214 (init_ssa_operands) 0: 0.0% 10 2: 0.0% 0 0 tree-outof-ssa.c:440 (new_elim_graph) 0: 0.0% 10 9717: 1.6% 0 0 tree-outof-ssa.c:438 (new_elim_graph) 0: 0.0% 10 9750: 1.6% 0 0 tree-into-ssa.c:3269 (update_ssa) 0: 0.0% 12 2: 0.0% 0 0 tree-ssa-operands.c:486 (append_use) 0: 0.0% 20 1: 0.0% 10 10 cp/parser.c:694 (cp_lexer_new_from_tokens) 0: 0.0% 20 6577: 1.1% 665 665 tree-outof-ssa.c:437 (new_elim_graph) 0: 0.0% 20 9427: 1.6% 0 0 tree-outof-ssa.c:436 (new_elim_graph) 0: 0.0% 20 9477: 1.6% 0 0 tree-outof-ssa.c:439 (new_elim_graph) 0: 0.0% 20 9609: 1.6% 0 0 cfgloop.h:578 (__base_ctor ) 0: 0.0% 23 147689:24.4% 0 0 tree-into-ssa.c:953 (prune_unused_phi_nodes) 0: 0.0% 24 80: 0.0% 495 495 cfgloop.c:488 (flow_loops_find) 0: 0.0% 28 103: 0.0% 278 278 cp/class.c:2510 (find_final_overrider) 0: 0.0% 30 732: 0.1% 0 0 tree-eh.c:669 (record_in_goto_queue_label) 0: 0.0% 30 1162: 0.2% 0 0 tree-outof-ssa.c:435 (new_elim_graph) 0: 0.0% 30 9525: 1.6% 0 0 tree-outof-ssa.c:441 (new_elim_graph) 0: 0.0% 30 9562: 1.6% 0 0 dwarf2cfi.c:1047 (queue_reg_save) 0: 0.0% 30 9707: 1.6% 32 32 cfgloop.c:276 (flow_loop_nodes_find) 0: 0.0% 36 102: 0.0% 582 582 tree-ssa.c:91 (redirect_edge_var_map_add) 0: 0.0% 48 1222: 0.2% 0 0 cp/parser.c:1147 (cp_lexer_save_tokens) 0: 0.0% 50 1422: 0.2% 8355 8355 ira-emit.c:142 (ira_initiate_emit_data) 0: 0.0% 50 9773: 1.6% 0 0 dominance.c:831 (get_dominated_to_depth) 0: 0.0% 54 65: 0.0% 676 676 attribs.c:153 (register_scoped_attributes) 0: 0.0% 64 1: 0.0% 0 0 lra.c:1357 (init_reg_info) 0: 0.0% 100 9787: 1.6% 0 0 input.c:517 (get_next_line) 0: 0.0% 135 10: 0.0% 183 183 tree-ssa-coalesce.c:512 (ssa_conflicts_new) 0: 0.0% 170 9315: 1.5% 0 0 dwarf2cfi.c:2848 (create_pseudo_cfg) 0: 0.0% 202 96: 0.0% 2875 2875 tree-into-ssa.c:1178 (register_new_def) 0: 0.0% 225 2670: 0.4% 52323 52323 dwarf2cfi.c:2813 (create_pseudo_cfg) 0: 0.0% 271 9877: 1.6% 1678 1678 tree-into-ssa.c:2240 (rewrite_blocks) 0: 0.0% 488 15684: 2.6% 18915 18915 ira-build.c:1742 (ira_loop_tree_body_rev_postord 0: 0.0% 490 9682: 1.6% 0 0 ira-build.c:1743 (ira_loop_tree_body_rev_postord 0: 0.0% 490 9690: 1.6% 0 0 df-core.c:1041 (df_worklist_dataflow_doublequeue 0: 0.0% 492 19147: 3.2% 0 0 tree-into-ssa.c:1467 (before_dom_children) 0: 0.0% 505 743: 0.1% 14768 14768 dwarf2cfi.c:2307 (maybe_record_trace_start) 0: 0.0% 552 9422: 1.6% 2066 2066 ira-build.c:1834 (ira_traverse_loop_tree) 0: 0.0% 609 41151: 6.8% 86764 86764 tree-into-ssa.c:909 (prune_unused_phi_nodes) 0: 0.0% 691 56: 0.0% 833 833 vec.h:1277 (__base_ctor ) 0: 0.0% 753 13032: 2.2% 750 750 tree-into-ssa.c:2134 (before_dom_children) 0: 0.0% 757 1080: 0.2% 17985 17985 tree-into-ssa.c:999 (mark_phi_for_rewrite) 0: 0.0% 760 3971: 0.7% 0 0 vec.h:1277 (__base_ctor ) 0: 0.0% 976 60042: 9.9% 204 204 tree-into-ssa.c:1170 (register_new_def) 0: 0.0% 1135 1597: 0.3% 39176 39176 tree-into-ssa.c:1770 (register_new_update_single 0: 0.0% 1145 3468: 0.6% 68536 68536 ira-build.c:456 (initiate_allocnos) 0: 0.0% 2474 9797: 1.6% 0 0 ira-build.c:452 (initiate_allocnos) 0: 0.0% 2474 9801: 1.6% 0 0 ira-build.c:1202 (initiate_prefs) 0: 0.0% 3642 9784: 1.6% 0 0 ira-build.c:1391 (initiate_copies) 0: 0.0% 3642 9786: 1.6% 0 0 lra.c:2294 (lra) 0: 0.0% 3643 9757: 1.6% 0 0 lra.c:1953 (remove_scratches) 0: 0.0% 3643 9767: 1.6% 0 0 final.c:1037 (shorten_branches) 0: 0.0% 4610 9748: 1.6% 0 0 lra-lives.c:1276 (lra_create_live_ranges_1) 0: 0.0% 7316 9629: 1.6% 0 0 ipa-inline-analysis.c:1046 (inline_summary_alloc 0: 0.0% 35910 1: 0.0% 0 0 passes.c:2342 (execute_one_pass) 0: 0.0% 39204 9801: 1.6% 0 0 tree-eh.c:1439 (lower_try_finally_switch) 2: 0.0% 2 1: 0.0% 0 0 attribs.c:154 (register_scoped_attributes) 4: 0.0% 4 1: 0.0% 0 0 cp/pt.c:500 (maybe_begin_member_template_process 4: 0.0% 4 1: 0.0% 0 0 function.c:4714 (push_cfun) 4: 0.0% 4 1: 0.0% 0 0 c-family/c-pragma.c:645 (push_visibility) 4: 0.0% 4 1: 0.0% 0 0 dominance.c:820 (get_dominated_to_depth) 8: 0.0% 12 106: 0.0% 48 48 gimplify.c:302 (gimple_push_bind_expr) 8: 0.0% 3103 4946: 0.8% 3033 3033 function.c:185 (push_function_context) 16: 0.0% 20 4: 0.0% 12 12 c-family/c-pragma.c:1311 (c_register_pragma_1) 24: 0.0% 24 4: 0.0% 28 28 cp/name-lookup.c:6080 (store_bindings) 54: 0.1% 54 6: 0.0% 88 88 cp/cp-gimplify.c:1108 (cp_genericize_r) 96: 0.2% 108 4875: 0.8% 952 952 cp/name-lookup.c:6110 (store_class_bindings) 121: 0.2% 121 7: 0.0% 207 207 attribs.c:161 (register_scoped_attributes) 144: 0.3% 144 2: 0.0% 160 160 function.c:2359 (assign_parms_augmented_arg_list 160: 0.3% 190 20329: 3.4% 3087 3087 ipa-devirt.c:2057 (get_odr_type) 265: 0.5% 265 51: 0.0% 166 166 tree-into-ssa.c:996 (mark_phi_for_rewrite) 444: 0.8% 474 15: 0.0% 778 778 ipa-devirt.c:2058 (get_odr_type) 556: 1.0% 556 139: 0.0% 0 0 input.c:527 (get_next_line) 1896: 3.3% 1896 123: 0.0% 3325 3325 symtab.c:527 (create_reference) 7985:13.9% 7985 809: 0.1% 10556 10556 symtab.c:519 (create_reference) 10524:18.3% 12144 3036: 0.5% 0 0 ggc-page.c:1416 (ggc_internal_alloc) 35065:61.1% 35065 27: 0.0% 68069 68069 -------------------------------------------------------------------------------------------------------------------------------- Total 57384 604454 408758 -------------------------------------------------------------------------------------------------------------------------------- GGC memory Garbage Freed Leak Overhead Times -------------------------------------------------------------------------------------------------------------------------------- cp/name-lookup.c:4633 (qualified_lookup_using_na 0: 0.0% 231000: 0.1% 0: 0.0% 0: 0.0% 5775 cp/class.c:9022 (build_vtbl_initializer) 0: 0.0% 14936: 0.0% 0: 0.0% 336: 0.0% 239 expmed.c:266 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 expmed.c:273 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 symtab.c:266 (symtab_initialize_asm_name_hash) 0: 0.0% 104: 0.0% 0: 0.0% 0: 0.0% 1 expmed.c:277 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 cp/name-lookup.c:4622 (qualified_lookup_using_na 0: 0.0% 231000: 0.1% 0: 0.0% 0: 0.0% 5775 expmed.c:263 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 tree.c:669 (init_ttree) 0: 0.0% 8216: 0.0% 0: 0.0% 24: 0.0% 1 cp/name-lookup.c:335 (new_class_binding) 0: 0.0% 3133464: 1.1% 0: 0.0% 39984: 0.3% 20831 expmed.c:269 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 expmed.c:275 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 gimplify.c:3656 (gimplify_init_ctor_eval) 0: 0.0% 600: 0.0% 0: 0.0% 0: 0.0% 15 ipa-inline-analysis.c:752 (account_size_time) 0: 0.0% 4875184: 1.6% 0: 0.0% 629056: 4.2% 19658 expmed.c:265 (init_expmed) 0: 0.0% 16: 0.0% 0: 0.0% 0: 0.0% 1 cp/pt.c:16133 (fn_type_unification) 0: 0.0% 5204760: 1.8% 0: 0.0% 0: 0.0% 130119 passes.c:1689 (do_per_function_toporder) 0: 0.0% 323152: 0.1% 0: 0.0% 61008: 0.4% 2 cp/name-lookup.c:4614 (qualified_lookup_using_na 0: 0.0% 231000: 0.1% 0: 0.0% 0: 0.0% 5775 expmed.c:279 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 expmed.c:271 (init_expmed) 0: 0.0% 16: 0.0% 0: 0.0% 0: 0.0% 1 expmed.c:270 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 expmed.c:267 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 cp/name-lookup.c:4650 (qualified_lookup_using_na 0: 0.0% 6880: 0.0% 0: 0.0% 0: 0.0% 172 expmed.c:264 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 symtab.c:1337 (set_section_for_node) 0: 0.0% 104: 0.0% 0: 0.0% 0: 0.0% 1 reload1.c:691 (grow_reg_equivs) 0: 0.0% 246514776: 83.2% 0: 0.0% 312408: 2.1% 19608 cp/pt.c:22450 (init_template_processing) 0: 0.0% 536: 0.0% 0: 0.0% 24: 0.0% 1 stor-layout.c:1190 (place_field) 0: 0.0% 11816: 0.0% 0: 0.0% 0: 0.0% 123 cgraph.c:755 (get_edge) 0: 0.0% 27864: 0.0% 0: 0.0% 216: 0.0% 27 gimplify.c:1429 (gimplify_decl_expr) 0: 0.0% 41760: 0.0% 0: 0.0% 0: 0.0% 1044 expmed.c:272 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 expmed.c:278 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 symbol-summary.h:40 (__base_ctor ) 0: 0.0% 224: 0.0% 0: 0.0% 8: 0.0% 1 expmed.c:280 (init_expmed) 0: 0.0% 16: 0.0% 0: 0.0% 0: 0.0% 1 cp/name-lookup.c:4623 (qualified_lookup_using_na 0: 0.0% 231000: 0.1% 0: 0.0% 0: 0.0% 5775 cp/typeck2.c:299 (abstract_virtuals_error_sfinae 0: 0.0% 264: 0.0% 0: 0.0% 8: 0.0% 1 expmed.c:276 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 symbol-summary.h:111 (allocate_new) 0: 0.0% 943584: 0.3% 0: 0.0% 0: 0.0% 9829 gimplify.c:9416 (gimplify_assign) 0: 0.0% 2640: 0.0% 0: 0.0% 0: 0.0% 66 expmed.c:268 (init_expmed) 0: 0.0% 24: 0.0% 0: 0.0% 0: 0.0% 1 alias.c:2847 (init_alias_analysis) 0: 0.0% 1822424: 0.6% 0: 0.0% 95744: 0.6% 9804 cp/parser.c:23715 (cp_parser_template_declaratio 0: 0.0% 216: 0.0% 0: 0.0% 0: 0.0% 1 expmed.c:274 (init_expmed) 0: 0.0% 16: 0.0% 0: 0.0% 0: 0.0% 1 gimplify.c:5471 (gimplify_target_expr) 0: 0.0% 90080: 0.0% 0: 0.0% 0: 0.0% 2252 gimplify.c:559 (internal_get_tmp_var) 0: 0.0% 1195000: 0.4% 0: 0.0% 0: 0.0% 29875 cp/parser.c:632 (cp_lexer_alloc) 0: 0.0% 262152: 0.1% 0: 0.0% 8: 0.0% 1 emit-rtl.c:6137 (init_emit_once) 0: 0.0% 0: 0.0% 8: 0.0% 0: 0.0% 1 emit-rtl.c:6136 (init_emit_once) 0: 0.0% 0: 0.0% 8: 0.0% 0: 0.0% 1 emit-rtl.c:6139 (init_emit_once) 0: 0.0% 0: 0.0% 8: 0.0% 0: 0.0% 1 emit-rtl.c:6138 (init_emit_once) 0: 0.0% 0: 0.0% 8: 0.0% 0: 0.0% 1 lower-subreg.c:308 (init_lower_subreg) 16: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 alias.c:2748 (init_alias_target) 0: 0.0% 0: 0.0% 16: 0.0% 0: 0.0% 1 tree.c:9902 (build_common_tree_nodes) 0: 0.0% 0: 0.0% 16: 0.0% 0: 0.0% 1 c-family/c-common.c:5930 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 24: 0.0% 0: 0.0% 1 config/i386/i386.c:8754 (setup_incoming_varargs_ 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 tree.c:679 (init_ttree) 0: 0.0% 0: 0.0% 24: 0.0% 0: 0.0% 1 lower-subreg.c:307 (init_lower_subreg) 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 tree.c:9763 (build_common_tree_nodes) 0: 0.0% 0: 0.0% 24: 0.0% 0: 0.0% 1 expr.c:261 (init_expr_target) 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 simplify-rtx.c:445 (simplify_gen_relational) 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 expr.c:213 (init_expr_target) 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 lower-subreg.c:309 (init_lower_subreg) 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 ira.c:1772 (setup_prohibited_mode_move_regs) 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 reload1.c:476 (init_reload) 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 reload1.c:465 (init_reload) 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 reload1.c:485 (init_reload) 24: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 fold-const.c:4945 (fold_cond_expr_with_compariso 0: 0.0% 0: 0.0% 32: 0.0% 0: 0.0% 1 generic-match.c:2191 (generic_simplify) 32: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 fold-const.c:3516 (fold_truth_not_expr) 32: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:118 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 dwarf2cfi.c:451 (new_cfi_row) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:141 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 dwarf2cfi.c:498 (add_cfi) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:73 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:201 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:182 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:74 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:152 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:53 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:133 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:195 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:120 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:188 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:154 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:78 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:112 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:173 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:167 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 fold-const.c:7014 (fold_widened_comparison) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:213 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 fold-const.c:12447 (fold_binary_loc) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:258 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:81 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:204 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 config/i386/i386.c:9063 (ix86_va_start) 40: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:76 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:262 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:143 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 fold-const.c:683 (fold_negate_expr) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:116 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 cp/decl.c:3881 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:77 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 cp/call.c:6762 (push_defarg_context) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 cp/decl.c:3978 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:129 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:192 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:164 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 fold-const.c:7969 (fold_unary_loc) 40: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:127 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 cp/pt.c:3658 (canonical_type_parameter) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:55 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 cp/init.c:4319 (build_vec_delete) 40: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:75 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:149 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 tree.c:4684 (build_translation_unit_decl) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:179 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:57 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 cp/decl.c:3882 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:185 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 config/i386/i386.c:35662 (ix86_init_builtins_va_ 40: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:176 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:270 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 config/i386/i386.c:9027 (ix86_va_start) 40: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:147 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 config/i386/i386.c:9046 (ix86_va_start) 40: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:264 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:207 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:256 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:123 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:158 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:260 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:170 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 config/i386/i386.c:35663 (ix86_init_builtins_va_ 40: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:125 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:285 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:284 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:82 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:273 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 config/i386/i386.c:9018 (ix86_va_start) 40: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:139 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 cp/decl.c:14098 (record_key_method_defined) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:210 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 cp/decl.c:14726 (build_void_list_node) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 convert.c:436 (convert_to_integer) 40: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 builtin-attrs.def:276 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:161 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:52 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:137 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:131 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 cp/decl.c:3883 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:145 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:135 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:58 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:114 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 attribs.c:605 (decl_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:54 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:56 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:278 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:266 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:198 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:79 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:80 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:66 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 builtin-attrs.def:156 (c_init_attributes) 0: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1 config/i386/i386.c:9003 (ix86_va_start) 48: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 hash-map.h:123 (create_ggc) 0: 0.0% 0: 0.0% 48: 0.0% 0: 0.0% 1 config/i386/i386.c:9007 (ix86_va_start) 48: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 cp/parser.c:624 (cp_lexer_alloc) 0: 0.0% 0: 0.0% 48: 0.0% 0: 0.0% 1 hash-table.h:599 (create_ggc) 0: 0.0% 0: 0.0% 48: 0.0% 0: 0.0% 1 config/i386/i386.md:7318 (gen_split_5252) 48: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 tree-ssanames.c:445 (get_ptr_info) 48: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 hash-table.h:599 (create_ggc) 0: 0.0% 0: 0.0% 48: 0.0% 0: 0.0% 1 cp/cp-gimplify.c:346 (genericize_switch_stmt) 0: 0.0% 0: 0.0% 48: 0.0% 0: 0.0% 1 hash-table.h:599 (create_ggc) 0: 0.0% 0: 0.0% 48: 0.0% 0: 0.0% 1 cp/cvt.c:998 (convert_to_void) 48: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 emit-rtl.c:6217 (gen_hard_reg_clobber) 32: 0.0% 0: 0.0% 16: 0.0% 0: 0.0% 3 config/i386/i386.c:9001 (ix86_va_start) 48: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 config/i386/i386.c:9005 (ix86_va_start) 48: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 config/i386/i386.c:21182 (ix86_expand_int_movcc) 56: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 cp/rtti.c:1143 (get_pseudo_ti_init) 56: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 varasm.c:1675 (notice_global_symbol) 0: 0.0% 0: 0.0% 59: 0.0% 11: 0.0% 2 tree.c:1692 (build_vector_stat) 64: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 cp/error.c:2761 (pp_ggc_formatted_text) 64: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 8 cp/cp-gimplify.c:359 (genericize_continue_stmt) 0: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 2 bitmap.c:306 (bitmap_gc_alloc_stat) 64: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 c-family/c-common.c:4745 (c_common_truthvalue_co 0: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 2 generic-match.c:7393 (generic_simplify) 0: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 2 config/i386/i386.md:12543 (gen_clzdi2) 64: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3 builtins.c:9158 (fold_builtin_abs) 0: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 2 builtins.c:9559 (fold_builtin_interclass_mathfn) 0: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 2 expr.c:212 (init_expr_target) 64: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 generic-match.c:5045 (generic_simplify) 64: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 emit-rtl.c:471 (gen_rtx_INSN) 64: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 predict.c:3007 (build_predict_expr) 64: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 convert.c:910 (convert_to_integer) 0: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 2 cp/parser.c:8950 (start_lambda_scope) 0: 0.0% 0: 0.0% 72: 0.0% 0: 0.0% 1 cp/class.c:7133 (init_class_processing) 0: 0.0% 0: 0.0% 72: 0.0% 0: 0.0% 1 cp/decl.c:5359 (reshape_init_array_1) 0: 0.0% 0: 0.0% 72: 0.0% 0: 0.0% 1 builtin-attrs.def:247 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 builtin-attrs.def:241 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 builtin-attrs.def:243 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 builtin-attrs.def:239 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 fold-const.c:664 (fold_negate_expr) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 fold-const.c:10058 (fold_binary_loc) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 builtin-attrs.def:248 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 cp/call.c:7469 (build_over_call) 80: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 fold-const.c:12421 (fold_binary_loc) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 cp/pt.c:22007 (build_non_dependent_expr) 80: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 fold-const.c:12419 (fold_binary_loc) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 builtin-attrs.def:233 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 fold-const.c:10543 (fold_binary_loc) 40: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 2 builtin-attrs.def:244 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 gimple-fold.c:889 (gimple_fold_builtin_memory_op 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 cp/name-lookup.c:3683 (handle_namespace_attrs) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 builtins.c:9701 (fold_builtin_classify) 80: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 config/i386/i386.md:12536 (gen_clzdi2) 80: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4 insn-emit.c:296 (gen_fix_truncdfsi_sse) 80: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4 tree-eh.c:1451 (lower_try_finally_switch) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 1 builtin-attrs.def:240 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 fold-const.c:12424 (fold_binary_loc) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 builtin-attrs.def:242 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 gimple-fold.c:862 (gimple_fold_builtin_memory_op 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 builtin-attrs.def:234 (c_init_attributes) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 c-family/c-common.c:4098 (c_register_builtin_typ 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 fold-const.c:645 (fold_negate_expr) 80: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 fold-const.c:7113 (fold_sign_changed_comparison) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 cp/call.c:7819 (build_special_member_call) 80: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 cp/decl.c:3981 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 2 fold-const.c:10709 (fold_binary_loc) 80: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 cp/rtti.c:528 (ifnonnull) 0: 0.0% 0: 0.0% 88: 0.0% 0: 0.0% 2 optabs.c:5563 (gen_libfunc) 90: 0.0% 0: 0.0% 0: 0.0% 26: 0.0% 4 lra.c:333 (emit_add3_insn) 96: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4 expmed.c:3711 (expand_smod_pow2) 96: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4 hash-table.h:599 (create_ggc) 0: 0.0% 0: 0.0% 96: 0.0% 0: 0.0% 2 emit-rtl.c:6004 (init_emit_once) 0: 0.0% 0: 0.0% 96: 0.0% 0: 0.0% 4 hash-table.h:599 (create_ggc) 0: 0.0% 0: 0.0% 96: 0.0% 0: 0.0% 2 builtins.c:9253 (fold_builtin_carg) 0: 0.0% 0: 0.0% 96: 0.0% 0: 0.0% 3 fold-const.c:8099 (fold_unary_loc) 0: 0.0% 0: 0.0% 96: 0.0% 0: 0.0% 3 builtins.c:9254 (fold_builtin_carg) 0: 0.0% 0: 0.0% 96: 0.0% 0: 0.0% 3 ipa-inline.h:179 (create_ggc) 104: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1 optabs.c:6237 (init_optabs) 0: 0.0% 0: 0.0% 104: 0.0% 0: 0.0% 1 tree-ssanames.c:371 (release_ssa_name_fn) 0: 0.0% 179760: 0.1% 112: 0.0% 0: 0.0% 3582 cp/parser.c:20074 (cp_parser_class_specifier_1) 0: 0.0% 0: 0.0% 112: 0.0% 0: 0.0% 2 fold-const.c:12006 (fold_binary_loc) 80: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 3 cp/init.c:4174 (push_base_cleanups) 120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3 toplev.c:1237 (general_init) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 1 builtin-attrs.def:238 (c_init_attributes) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 3 tree.c:4682 (build_translation_unit_decl) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 1 builtin-attrs.def:236 (c_init_attributes) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 3 config/i386/i386.md:8897 (gen_split_5332) 120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 5 convert.c:949 (convert_to_complex) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 3 cp/typeck2.c:2062 (add_exception_specifier) 40: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 3 builtin-attrs.def:235 (c_init_attributes) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 3 cp/init.c:2721 (build_new_1) 120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3 builtin-attrs.def:246 (c_init_attributes) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 3 cp/friend.c:170 (add_friend) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 3 cp/name-lookup.c:1385 (push_local_binding) 120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3 builtin-attrs.def:237 (c_init_attributes) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 3 builtin-attrs.def:245 (c_init_attributes) 0: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 3 cp/init.c:2957 (build_new_1) 120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3 cp/init.c:885 (sort_mem_initializers) 120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3 generic-match.c:5029 (generic_simplify) 64: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 4 cp/parser.c:3498 (cp_parser_new) 0: 0.0% 0: 0.0% 128: 0.0% 0: 0.0% 1 varasm.c:296 (get_noswitch_section) 0: 0.0% 0: 0.0% 128: 0.0% 0: 0.0% 4 varasm.c:279 (get_unnamed_section) 0: 0.0% 0: 0.0% 128: 0.0% 0: 0.0% 4 cp/init.c:1274 (expand_cleanup_for_base) 144: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3 dwarf2cfi.c:534 (update_row_reg_save) 0: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 1 gimple.c:774 (gimple_build_switch_nlabels) 0: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 2 config/i386/i386.md:4937 (gen_split_5130) 144: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 9 emit-rtl.c:2506 (get_spill_slot_decl) 0: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 1 cp/init.c:4193 (push_base_cleanups) 144: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3 config/i386/i386.md:4938 (gen_split_5130) 144: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 9 cp/parser.c:19383 (cp_parser_braced_list) 120: 0.0% 0: 0.0% 24: 0.0% 0: 0.0% 6 hash-table.h:599 (create_ggc) 0: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 3 cp/decl.c:6801 (declare_global_var) 0: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 1 hash-table.h:599 (create_ggc) 0: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 3 builtins.c:9826 (fold_builtin_unordered_cmp) 144: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4 convert.c:886 (convert_to_integer) 0: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 3 cp/rtti.c:1420 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5568 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5559 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5707 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/rtti.c:1464 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 config/i386/i386.c:8623 (ix86_build_builtin_va_l 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5699 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5580 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 config/i386/i386.c:8619 (ix86_build_builtin_va_l 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5695 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5595 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5703 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5895 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/rtti.c:1462 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/rtti.c:1433 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/rtti.c:1429 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5562 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/rtti.c:1466 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 config/i386/i386.c:8629 (ix86_build_builtin_va_l 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5609 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 tree.c:8497 (build_complex_type) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/rtti.c:1451 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/parser.c:1914 (push_unparsed_function_queues) 0: 0.0% 0: 0.0% 152: 0.0% 8: 0.0% 1 config/i386/i386.c:8632 (ix86_build_builtin_va_l 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5603 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/decl.c:14499 (maybe_register_incomplete_var) 0: 0.0% 72: 0.0% 152: 0.0% 8: 0.0% 2 c-family/c-common.c:5576 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/rtti.c:1393 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 config/i386/i386.c:8626 (ix86_build_builtin_va_l 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5565 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5589 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5586 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/rtti.c:1389 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 c-family/c-common.c:5583 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 cp/rtti.c:1453 (create_tinfo_types) 0: 0.0% 0: 0.0% 152: 0.0% 0: 0.0% 1 gimple-fold.c:890 (gimple_fold_builtin_memory_op 0: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 2 gimple-fold.c:875 (gimple_fold_builtin_memory_op 0: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 2 function.c:3751 (assign_parms) 160: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 5 cp/class.c:1593 (check_abi_tags) 0: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 4 cp/tree.c:1380 (strip_typedefs) 0: 0.0% 224: 0.0% 160: 0.0% 0: 0.0% 12 bitmap.c:162 (bitmap_element_allocate) 160: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4 fold-const.c:2352 (fold_convert_loc) 0: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 5 cp/init.c:845 (build_field_list) 160: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4 c-family/c-common.c:4723 (c_common_truthvalue_co 0: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 4 tree-eh.c:1538 (lower_try_finally_switch) 160: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2 cp/parser.c:16247 (cp_parser_namespace_definitio 0: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 4 tree.c:9953 (build_common_tree_nodes) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 cp/decl.c:3912 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 emit-rtl.c:5996 (init_emit_once) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 7 tree.c:9915 (build_common_tree_nodes) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 targhooks.c:1884 (default_chkp_bound_type) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 config/i386/i386.c:35716 (ix86_init_builtin_type 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 stor-layout.c:2629 (initialize_sizetypes) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 cp/decl.c:3918 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 cp/decl.c:3901 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 tree.c:9919 (build_common_tree_nodes) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 tree.c:9947 (build_common_tree_nodes) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 cp/decl.c:4009 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 tree.c:9941 (build_common_tree_nodes) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 tree.c:9892 (build_common_tree_nodes) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 toplev.c:1256 (general_init) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 stor-layout.c:2633 (initialize_sizetypes) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 tree.c:9926 (build_common_tree_nodes) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 cp/decl.c:3940 (cxx_init_decl_processing) 0: 0.0% 0: 0.0% 168: 0.0% 0: 0.0% 1 config/i386/i386.md:4938 (gen_split_5129) 176: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 11 config/i386/i386.md:4937 (gen_split_5129) 176: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 11 config/i386/i386.md:7181 (gen_split_5241) 192: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 9 config/i386/i386.md:8895 (gen_split_5332) 192: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 8 expr.c:1622 (gen_group_rtx) 192: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 12 optabs.c:6193 (set_optab_libfunc) 0: 0.0% 0: 0.0% 192: 0.0% 0: 0.0% 8 cp/init.c:3760 (build_vec_init) 192: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 6 fold-const.c:2266 (fold_convert_loc) 0: 0.0% 0: 0.0% 192: 0.0% 0: 0.0% 6 cp/parser.c:687 (cp_lexer_new_from_tokens) 0: 0.0% 309552: 0.1% 192: 0.0% 0: 0.0% 6453 cp/call.c:4142 (build_operator_new_call) 192: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4 fold-const.c:4534 (build_range_check) 200: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 5 cp/name-lookup.c:3978 (add_using_namespace_1) 0: 0.0% 0: 0.0% 200: 0.0% 0: 0.0% 5 cp/name-lookup.c:3984 (add_using_namespace_1) 0: 0.0% 0: 0.0% 200: 0.0% 0: 0.0% 5 cp/init.c:2580 (build_new_1) 200: 0.0% 40: 0.0% 0: 0.0% 0: 0.0% 6 emit-rtl.c:5803 (gen_rtx_CONST_VECTOR) 176: 0.0% 0: 0.0% 32: 0.0% 0: 0.0% 13 config/i386/i386.c:19577 (ix86_expand_fp_absneg_ 208: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 13 config/i386/i386.c:19569 (ix86_expand_fp_absneg_ 208: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 13 config/i386/i386.c:19585 (ix86_expand_fp_absneg_ 208: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 13 config/i386/i386.c:19582 (ix86_expand_fp_absneg_ 208: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 13 config/i386/i386.md:4940 (gen_split_5130) 216: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 9 cp/rtti.c:1175 (get_pseudo_ti_init) 216: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3 expr.c:11426 (build_personality_function) 0: 0.0% 0: 0.0% 216: 0.0% 0: 0.0% 1 cp/pt.c:3661 (canonical_type_parameter) 0: 0.0% 0: 0.0% 216: 0.0% 0: 0.0% 2 emit-rtl.c:5378 (start_sequence) 216: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 9 cp/semantics.c:2421 (finish_call_expr) 0: 0.0% 0: 0.0% 224: 0.0% 0: 0.0% 7 config/i386/i386.md:7297 (gen_udivmoddi4) 224: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 10 tree.c:11765 (build_target_option_node) 0: 0.0% 0: 0.0% 232: 0.0% 16: 0.0% 1 tree.c:684 (init_ttree) 0: 0.0% 0: 0.0% 232: 0.0% 16: 0.0% 1 c-family/c-cppbuiltin.c:1460 (builtin_define_wit 234: 0.0% 0: 0.0% 0: 0.0% 42: 0.0% 12 cp/call.c:7468 (build_over_call) 0: 0.0% 0: 0.0% 240: 0.0% 0: 0.0% 6 insn-emit.c:136 (gen_zero_extendqidi2) 240: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 12 fold-const.c:6389 (fold_binary_op_with_condition 240: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 6 fold-const.c:943 (associate_trees) 80: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 6 generic-match.c:3684 (generic_simplify) 80: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 6 cp/typeck.c:4879 (cp_build_binary_op) 0: 0.0% 0: 0.0% 240: 0.0% 0: 0.0% 6 fold-const.c:6381 (fold_binary_op_with_condition 240: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 6 config/i386/i386.md:7331 (gen_split_5252) 256: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 12 varasm.c:6072 (init_varasm_once) 0: 0.0% 0: 0.0% 264: 0.0% 8: 0.0% 1 varasm.c:6071 (init_varasm_once) 0: 0.0% 0: 0.0% 264: 0.0% 8: 0.0% 1 cp/rtti.c:1379 (create_tinfo_types) 0: 0.0% 0: 0.0% 264: 0.0% 8: 0.0% 1 cp/mangle.c:3793 (mangle_conv_op_name_for_type) 0: 0.0% 0: 0.0% 264: 0.0% 8: 0.0% 1 config/i386/i386.md:4940 (gen_split_5129) 264: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 11 fold-const.c:200 (protected_set_expr_location_un 240: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 7 fold-const.c:6131 (extract_muldiv_1) 280: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 7 expmed.c:4388 (expand_divmod) 288: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 12 fold-const.c:6398 (fold_binary_op_with_condition 288: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 6 cp/pt.c:14928 (tsubst_copy_and_build) 288: 0.0% 72: 0.0% 0: 0.0% 0: 0.0% 5 cp/tree.c:1498 (strip_typedefs_expr) 0: 0.0% 0: 0.0% 288: 0.0% 0: 0.0% 6 config/i386/i386.md:4939 (gen_split_5130) 288: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 9 cp/parser.c:20899 (cp_parser_member_declaration) 0: 0.0% 0: 0.0% 304: 0.0% 0: 0.0% 2 c-family/c-common.c:5907 (c_common_nodes_and_bui 0: 0.0% 0: 0.0% 304: 0.0% 0: 0.0% 2 optabs.c:284 (add_equal_note) 304: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 19 c-family/c-common.c:4092 (c_register_builtin_typ 0: 0.0% 0: 0.0% 304: 0.0% 0: 0.0% 2 config/i386/i386.md:8909 (gen_split_5332) 312: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 13 config/i386/i386.c:19570 (ix86_expand_fp_absneg_ 312: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 13 cp/parser.c:13677 (cp_parser_type_parameter) 320: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 8 expr.c:1853 (emit_group_load_into_temps) 320: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 20 cp/decl.c:3739 (record_builtin_java_type) 0: 0.0% 0: 0.0% 336: 0.0% 0: 0.0% 2 function.c:699 (insert_temp_slot_address) 336: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 14 cp/semantics.c:2562 (finish_pseudo_destructor_ex 336: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 7 config/i386/i386.md:7138 (gen_divmoddi4) 336: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 15 cp/cp-objcp-common.c:214 (decl_shadowed_for_var_ 0: 0.0% 0: 0.0% 336: 0.0% 0: 0.0% 21 config/i386/i386.md:4939 (gen_split_5129) 352: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 11 builtins.c:9144 (fold_builtin_fabs) 0: 0.0% 0: 0.0% 352: 0.0% 0: 0.0% 11 fold-const.c:7897 (fold_unary_loc) 0: 0.0% 0: 0.0% 360: 0.0% 0: 0.0% 9 generic-match.c:4769 (generic_simplify) 160: 0.0% 0: 0.0% 200: 0.0% 0: 0.0% 9 config/i386/i386.md:4853 (gen_floatdidf2) 360: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 18 config/i386/i386.md:3462 (gen_zero_extendsidi2) 360: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 18 cp/init.c:1689 (expand_default_init) 360: 0.0% 144: 0.0% 0: 0.0% 0: 0.0% 7 cp/class.c:6860 (finish_struct) 0: 0.0% 152: 0.0% 376: 0.0% 0: 0.0% 9 config/i386/i386.md:7194 (gen_split_5241) 384: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 18 cp/pt.c:22001 (build_non_dependent_expr) 384: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 8 cp/tree.c:2168 (bind_template_template_parm) 144: 0.0% 0: 0.0% 240: 0.0% 0: 0.0% 8 cp/decl2.c:3473 (start_static_storage_duration_f 0: 0.0% 0: 0.0% 392: 0.0% 0: 0.0% 1 cp/semantics.c:170 (push_deferring_access_checks 0: 0.0% 224: 0.0% 392: 0.0% 8: 0.0% 3 cp/rtti.c:1335 (get_pseudo_ti_index) 0: 0.0% 0: 0.0% 392: 0.0% 0: 0.0% 1 tree-outof-ssa.c:1188 (insert_backedge_copies) 400: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 5 cp/init.c:3465 (build_vec_init) 160: 0.0% 0: 0.0% 240: 0.0% 0: 0.0% 10 convert.c:596 (convert_to_integer) 40: 0.0% 0: 0.0% 360: 0.0% 0: 0.0% 10 c-family/c-cppbuiltin.c:1432 (lazy_hex_fp_value) 0: 0.0% 0: 0.0% 424: 0.0% 40: 0.0% 12 cp/init.c:440 (build_value_init_noctor) 432: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 6 cp/parser.c:19584 (cp_parser_initializer_list) 360: 0.0% 0: 0.0% 72: 0.0% 0: 0.0% 6 tree-inline.c:5030 (copy_tree_r) 0: 0.0% 0: 0.0% 432: 0.0% 0: 0.0% 6 cp/typeck.c:5957 (unary_complex_lvalue) 360: 0.0% 0: 0.0% 80: 0.0% 0: 0.0% 11 cp/typeck.c:5978 (unary_complex_lvalue) 440: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 11 config/i386/i386.md:4853 (gen_floatsidf2) 440: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 22 cp/rtti.c:1352 (get_pseudo_ti_index) 0: 0.0% 0: 0.0% 456: 0.0% 0: 0.0% 3 cp/decl.c:3761 (record_unknown_type) 0: 0.0% 0: 0.0% 456: 0.0% 0: 0.0% 3 cp/rtti.c:1356 (get_pseudo_ti_index) 0: 0.0% 0: 0.0% 456: 0.0% 0: 0.0% 3 cp/rtti.c:1354 (get_pseudo_ti_index) 0: 0.0% 0: 0.0% 456: 0.0% 0: 0.0% 3 cp/decl.c:7297 (expand_static_init) 0: 0.0% 0: 0.0% 480: 0.0% 0: 0.0% 12 cp/class.c:7660 (resolve_address_of_overloaded_f 480: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 12 cp/class.c:7671 (resolve_address_of_overloaded_f 480: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 12 cp/typeck.c:4883 (cp_build_binary_op) 0: 0.0% 0: 0.0% 480: 0.0% 0: 0.0% 12 cp/typeck.c:4913 (cp_build_binary_op) 0: 0.0% 0: 0.0% 480: 0.0% 0: 0.0% 12 tree.c:683 (init_ttree) 0: 0.0% 0: 0.0% 488: 0.0% 96: 0.0% 1 tree.c:11738 (build_optimization_node) 0: 0.0% 0: 0.0% 488: 0.0% 96: 0.0% 1 cp/pt.c:2148 (determine_specialization) 496: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 14 calls.c:3362 (expand_call) 504: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 21 cp/typeck2.c:1999 (build_functional_cast) 504: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 7 expmed.c:3021 (expand_mult_const) 504: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 21 convert.c:379 (convert_to_real) 512: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 16 cp/pt.c:1509 (register_specialization) 0: 0.0% 0: 0.0% 520: 0.0% 0: 0.0% 13 cp/call.c:7807 (build_special_member_call) 528: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 12 cp/search.c:2108 (dfs_get_pure_virtuals) 0: 0.0% 192: 0.0% 528: 0.0% 0: 0.0% 13 except.c:270 (init_eh) 0: 0.0% 0: 0.0% 528: 0.0% 16: 0.0% 1 emit-rtl.c:5904 (init_emit_once) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 hash-table.h:914 (expand) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 emit-rtl.c:5913 (init_emit_once) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 function.c:1233 (init_temp_slots) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 emit-rtl.c:5911 (init_emit_once) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 emit-rtl.c:5907 (init_emit_once) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 emit-rtl.c:5909 (init_emit_once) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 cp/tree.c:842 (build_cplus_array_type) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 cp/tree.c:3895 (init_tree) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 cp/decl.c:3398 (build_typename_type) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 cp/pt.c:22449 (init_template_processing) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 optabs.c:6140 (init_one_libfunc) 0: 0.0% 0: 0.0% 536: 0.0% 24: 0.0% 1 expr.c:1892 (emit_group_move_into_temps) 544: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 34 cp/decl.c:974 (push_local_name) 560: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 14 cp/class.c:1644 (inherit_targ_abi_tags) 0: 0.0% 0: 0.0% 560: 0.0% 0: 0.0% 14 cp/pt.c:2078 (determine_specialization) 560: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 14 cp/decl.c:7291 (expand_static_init) 0: 0.0% 0: 0.0% 576: 0.0% 0: 0.0% 12 varasm.c:3808 (force_const_mem) 0: 0.0% 0: 0.0% 583: 0.0% 7: 0.0% 36 expmed.c:4212 (expand_divmod) 600: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 25 fold-const.c:4530 (build_range_check) 600: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 15 config/i386/i386.c:18170 (ix86_expand_unary_oper 608: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 38 stor-layout.c:1846 (start_bitfield_representativ 0: 0.0% 0: 0.0% 608: 0.0% 0: 0.0% 4 config/i386/i386.c:18169 (ix86_expand_unary_oper 608: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 38 convert.c:981 (convert_to_complex) 624: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 18 config/i386/sse.md:1129 (gen_split_5983) 624: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 26 generic-match.c:4147 (generic_simplify) 0: 0.0% 0: 0.0% 640: 0.0% 0: 0.0% 16 cp/decl.c:8271 (build_ptrmemfunc_type) 0: 0.0% 0: 0.0% 656: 0.0% 0: 0.0% 41 gimplify.c:2709 (shortcut_cond_expr) 672: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 14 cp/cp-gimplify.c:372 (genericize_break_stmt) 64: 0.0% 0: 0.0% 608: 0.0% 0: 0.0% 21 cp/decl2.c:3050 (get_guard_bits) 0: 0.0% 0: 0.0% 704: 0.0% 0: 0.0% 22 cp/decl2.c:3047 (get_guard_bits) 0: 0.0% 0: 0.0% 704: 0.0% 0: 0.0% 22 cp/decl2.c:3051 (get_guard_bits) 0: 0.0% 0: 0.0% 704: 0.0% 0: 0.0% 22 cp/class.c:1393 (check_tag) 0: 0.0% 0: 0.0% 720: 0.0% 0: 0.0% 18 fold-const.c:6237 (extract_muldiv_1) 720: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 18 cp/pt.c:7449 (lookup_template_function) 720: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 18 cp/class.c:4554 (check_methods) 368: 0.0% 192: 0.0% 360: 0.0% 0: 0.0% 18 gimplify.c:4300 (gimplify_modify_expr_rhs) 760: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 19 cp/decl.c:3695 (record_builtin_type) 0: 0.0% 0: 0.0% 760: 0.0% 0: 0.0% 5 gimplify.c:4296 (gimplify_modify_expr_rhs) 760: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 19 cp/class.c:490 (build_base_path) 792: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 18 cp/decl.c:12555 (xref_basetypes) 0: 0.0% 0: 0.0% 800: 0.0% 0: 0.0% 20 generic-match.c:1432 (generic_simplify) 0: 0.0% 0: 0.0% 800: 0.0% 0: 0.0% 25 builtins.c:7326 (fold_builtin_expect) 0: 0.0% 0: 0.0% 800: 0.0% 0: 0.0% 20 gimplify.c:3647 (gimplify_init_ctor_eval) 96: 0.0% 0: 0.0% 720: 0.0% 0: 0.0% 17 emit-rtl.c:550 (const_fixed_from_fixed_value) 0: 0.0% 0: 0.0% 832: 0.0% 0: 0.0% 26 cp/class.c:470 (build_base_path) 288: 0.0% 0: 0.0% 544: 0.0% 0: 0.0% 26 tree.c:8446 (build_complex_type) 0: 0.0% 0: 0.0% 840: 0.0% 0: 0.0% 5 tree.c:10057 (set_call_expr_flags) 0: 0.0% 0: 0.0% 840: 0.0% 0: 0.0% 21 cp/class.c:8574 (build_vtt_inits) 0: 0.0% 1040: 0.0% 864: 0.0% 32: 0.0% 22 cp/tree.c:599 (build_vec_init_expr) 880: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 22 cp/friend.c:189 (add_friend) 0: 0.0% 0: 0.0% 880: 0.0% 0: 0.0% 22 cp/init.c:728 (perform_member_init) 880: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 22 c-family/c-common.c:4632 (pointer_int_sum) 0: 0.0% 0: 0.0% 896: 0.0% 0: 0.0% 28 cp/pt.c:10582 (tsubst_decl) 0: 0.0% 0: 0.0% 912: 0.0% 0: 0.0% 6 function.c:866 (assign_stack_temp_for_type) 936: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 13 cp/pt.c:10923 (tsubst_decl) 0: 0.0% 0: 0.0% 960: 0.0% 0: 0.0% 24 cp/semantics.c:7576 (finish_trait_expr) 288: 0.0% 0: 0.0% 672: 0.0% 0: 0.0% 20 cp/init.c:2851 (build_new_1) 160: 0.0% 0: 0.0% 800: 0.0% 0: 0.0% 24 config/i386/i386.c:17489 (ix86_expand_vector_mov 984: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 41 cp/call.c:7450 (build_over_call) 40: 0.0% 0: 0.0% 960: 0.0% 0: 0.0% 25 config/i386/i386.md:7181 (gen_split_5240) 1024: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 48 cp/rtti.c:171 (init_rtti_processing) 0: 0.0% 0: 0.0% 1024: 0.0% 0: 0.0% 1 fold-const.c:7905 (fold_unary_loc) 288: 0.0% 0: 0.0% 736: 0.0% 0: 0.0% 32 varasm.c:5799 (assemble_alias) 0: 0.0% 616: 0.0% 1032: 0.0% 16: 0.0% 4 tree.c:681 (init_ttree) 0: 0.0% 0: 0.0% 1032: 0.0% 8: 0.0% 1 cp/parser.c:24226 (cp_parser_save_default_args) 0: 0.0% 616: 0.0% 1032: 0.0% 16: 0.0% 4 cp/tree.c:1631 (strip_typedefs_expr) 800: 0.0% 0: 0.0% 240: 0.0% 0: 0.0% 26 cp/init.c:3890 (build_vec_init) 992: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 33 cp/init.c:1230 (expand_virtual_init) 1056: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 24 tree.c:4555 (build_simple_mem_ref_loc) 1080: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 27 config/i386/i386.c:20351 (ix86_expand_fp_compare 1104: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 46 config/i386/i386.c:20205 (ix86_expand_fp_compare 1104: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 46 config/i386/i386.c:20206 (ix86_expand_fp_compare 1104: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 46 c-family/c-common.c:8108 (handle_weakref_attribu 1120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 28 c-family/c-common.c:8109 (handle_weakref_attribu 1120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 28 convert.c:384 (convert_to_real) 576: 0.0% 0: 0.0% 544: 0.0% 0: 0.0% 35 function.c:2678 (assign_parm_find_stack_rtl) 1128: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 47 cp/init.c:3714 (build_vec_init) 1152: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 36 varasm.c:3763 (force_const_mem) 0: 0.0% 0: 0.0% 1152: 0.0% 0: 0.0% 18 cp/pt.c:3673 (canonical_type_parameter) 0: 0.0% 0: 0.0% 1200: 0.0% 0: 0.0% 30 cp/search.c:1115 (lookup_field_r) 1200: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 30 cp/tree.c:2164 (bind_template_template_parm) 456: 0.0% 0: 0.0% 760: 0.0% 0: 0.0% 8 cp/semantics.c:2731 (finish_template_template_pa 0: 0.0% 0: 0.0% 1216: 0.0% 0: 0.0% 8 c-family/c-common.c:12043 (release_tree_vector) 1232: 0.0% 840: 0.0% 0: 0.0% 0: 0.0% 30 cp/search.c:1120 (lookup_field_r) 1240: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 31 cp/call.c:9785 (extend_ref_init_temps_1) 0: 0.0% 0: 0.0% 1280: 0.0% 0: 0.0% 32 fold-const.c:13055 (fold_binary_loc) 280: 0.0% 0: 0.0% 1000: 0.0% 0: 0.0% 32 cp/pt.c:2742 (check_explicit_specialization) 1280: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 40 tree.c:6141 (merge_attributes) 280: 0.0% 0: 0.0% 1000: 0.0% 0: 0.0% 32 cp/typeck.c:7520 (cp_build_modify_expr) 120: 0.0% 0: 0.0% 1200: 0.0% 0: 0.0% 33 cp/parser.c:7198 (cp_parser_unary_expression) 1344: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 42 cp/class.c:7639 (resolve_address_of_overloaded_f 1400: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 35 convert.c:834 (convert_to_integer) 600: 0.0% 0: 0.0% 840: 0.0% 0: 0.0% 36 cp/init.c:3706 (build_vec_init) 1400: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 36 cp/init.c:3260 (build_vec_delete_1) 1376: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 45 tree.c:10721 (build_call_expr_loc_array) 64: 0.0% 0: 0.0% 1376: 0.0% 0: 0.0% 45 cp/init.c:2493 (build_new_1) 1320: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 37 cp/class.c:755 (build_vfn_ref) 144: 0.0% 0: 0.0% 1392: 0.0% 0: 0.0% 32 cfgloop.c:477 (flow_loops_find) 0: 0.0% 864: 0.0% 1584: 0.0% 0: 0.0% 22 fold-const.c:8122 (fold_unary_loc) 560: 0.0% 0: 0.0% 1040: 0.0% 0: 0.0% 40 builtins.c:7282 (build_builtin_expect_predicate) 0: 0.0% 0: 0.0% 1600: 0.0% 0: 0.0% 40 cp/mangle.c:426 (add_substitution) 0: 0.0% 256: 0.0% 1632: 0.0% 0: 0.0% 6 cp/pt.c:13137 (tsubst_copy) 1632: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 51 cp/pt.c:2162 (determine_specialization) 1640: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 41 expr.c:1157 (emit_block_move_hints) 1656: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 69 expr.c:1158 (emit_block_move_hints) 1656: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 69 cp/rtti.c:1232 (create_pseudo_type_info) 0: 0.0% 0: 0.0% 1672: 0.0% 0: 0.0% 11 reload.c:5410 (form_sum) 1680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 70 stor-layout.c:2525 (make_unsigned_type) 0: 0.0% 0: 0.0% 1680: 0.0% 0: 0.0% 10 fold-const.c:3481 (fold_truth_not_expr) 1560: 0.0% 0: 0.0% 160: 0.0% 0: 0.0% 43 config/i386/i386.md:5519 (gen_split_5164) 1728: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 72 config/i386/i386.md:5521 (gen_split_5164) 1728: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 72 jump.c:1683 (invert_exp_1) 1752: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 73 expr.c:4032 (emit_single_push_insn_1) 1760: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 110 gimplify.c:7955 (gimplify_expr) 1792: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 56 config/i386/i386.md:7118 (gen_divmodsi4) 1792: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 80 cp/semantics.c:2224 (perform_koenig_lookup) 240: 0.0% 0: 0.0% 1560: 0.0% 0: 0.0% 45 cp/lex.c:656 (copy_lang_type) 912: 0.0% 0: 0.0% 912: 0.0% 0: 0.0% 12 fold-const.c:7911 (fold_unary_loc) 432: 0.0% 0: 0.0% 1392: 0.0% 0: 0.0% 38 cp/call.c:8223 (build_new_method_call_1) 0: 0.0% 0: 0.0% 1840: 0.0% 0: 0.0% 46 stor-layout.c:2512 (make_signed_type) 0: 0.0% 0: 0.0% 1848: 0.0% 0: 0.0% 11 builtins.c:10580 (fold_builtin_n) 1728: 0.0% 0: 0.0% 128: 0.0% 0: 0.0% 58 cp/class.c:8663 (dfs_build_secondary_vptr_vtt_in 0: 0.0% 0: 0.0% 1872: 0.0% 16: 0.0% 6 emit-rtl.c:5771 (gen_const_vector) 0: 0.0% 0: 0.0% 1872: 0.0% 0: 0.0% 117 cp/typeck.c:7189 (cp_build_c_cast) 80: 0.0% 0: 0.0% 1800: 0.0% 0: 0.0% 47 cp/decl.c:7327 (expand_static_init) 0: 0.0% 0: 0.0% 1880: 0.0% 0: 0.0% 47 config/i386/i386.c:18163 (ix86_expand_unary_oper 1880: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 94 config/i386/i386.c:17424 (ix86_expand_move) 1944: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 81 fold-const.c:3474 (fold_truth_not_expr) 1640: 0.0% 0: 0.0% 400: 0.0% 0: 0.0% 51 cp/parser.c:24006 (cp_parser_save_member_functio 0: 0.0% 1632: 0.0% 2048: 0.0% 0: 0.0% 5 cp/rtti.c:457 (get_tinfo_decl) 0: 0.0% 0: 0.0% 2048: 0.0% 0: 0.0% 1 config/i386/i386.md:7194 (gen_split_5240) 2048: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 96 ipa-devirt.c:2068 (get_odr_type) 0: 0.0% 1888: 0.0% 2048: 0.0% 0: 0.0% 7 emit-rtl.c:5929 (init_emit_once) 0: 0.0% 0: 0.0% 2064: 0.0% 0: 0.0% 129 cp/except.c:931 (build_throw) 0: 0.0% 0: 0.0% 2080: 0.0% 0: 0.0% 65 cp/class.c:8909 (dfs_accumulate_vtbl_inits) 2080: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 52 gimplify.c:1614 (gimplify_exit_expr) 2112: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 44 cp/init.c:3241 (build_vec_delete_1) 2064: 0.0% 0: 0.0% 96: 0.0% 0: 0.0% 45 tree.c:7874 (build_nonstandard_integer_type) 0: 0.0% 0: 0.0% 2184: 0.0% 0: 0.0% 13 config/i386/i386.md:3407 (gen_split_5041) 2304: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 96 except.c:937 (assign_filter_values) 2320: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 58 except.c:453 (gen_eh_region_catch) 80: 0.0% 0: 0.0% 2320: 0.0% 0: 0.0% 60 cp/decl2.c:3012 (get_guard) 0: 0.0% 0: 0.0% 2448: 0.0% 0: 0.0% 17 cp/cp-gimplify.c:144 (genericize_catch_block) 2480: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 62 c-family/c-semantics.c:156 (build_real_imag_expr 1152: 0.0% 0: 0.0% 1344: 0.0% 0: 0.0% 78 tree.c:8227 (build_function_type_list_1) 1080: 0.0% 0: 0.0% 1440: 0.0% 0: 0.0% 63 cp/lex.c:194 (init_reswords) 0: 0.0% 0: 0.0% 2552: 0.0% 504: 0.0% 1 tree.c:2129 (build_case_label) 0: 0.0% 0: 0.0% 2632: 0.0% 0: 0.0% 47 cp/init.c:3320 (build_vec_delete_1) 1696: 0.0% 0: 0.0% 960: 0.0% 0: 0.0% 83 cp/decl.c:6142 (wrap_cleanups_r) 320: 0.0% 0: 0.0% 2360: 0.0% 0: 0.0% 67 fold-const.c:15843 (fold_indirect_ref_1) 2688: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 48 stor-layout.c:2565 (make_accum_type) 0: 0.0% 0: 0.0% 2688: 0.0% 0: 0.0% 16 cgraph.c:932 (cgraph_allocate_init_indirect_info 0: 0.0% 4048: 0.0% 2816: 0.0% 0: 0.0% 78 tree-iterator.c:65 (free_stmt_list) 2864: 0.0% 2424: 0.0% 0: 0.0% 0: 0.0% 44 gimple.c:807 (gimple_build_eh_dispatch) 96: 0.0% 0: 0.0% 2784: 0.0% 0: 0.0% 60 cp/friend.c:185 (add_friend) 0: 0.0% 0: 0.0% 2960: 0.0% 0: 0.0% 74 cp/class.c:5894 (create_vtable_ptr) 0: 0.0% 0: 0.0% 3040: 0.0% 0: 0.0% 20 varasm.c:2504 (assemble_external) 480: 0.0% 0: 0.0% 2600: 0.0% 0: 0.0% 77 cp/call.c:6878 (convert_for_arg_passing) 224: 0.0% 0: 0.0% 2880: 0.0% 0: 0.0% 97 cp/call.c:5848 (build_op_delete_call) 3120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 78 cp/init.c:2686 (build_new_1) 0: 0.0% 0: 0.0% 3120: 0.0% 0: 0.0% 78 config/i386/i386.md:6965 (gen_umuldi3_highpart) 3200: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 180 cp/init.c:3246 (build_vec_delete_1) 3096: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 90 gimplify.c:5418 (gimple_push_cleanup) 3264: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 68 cp/cvt.c:1015 (convert_to_void) 1880: 0.0% 0: 0.0% 1400: 0.0% 0: 0.0% 82 cp/init.c:2981 (build_new_1) 640: 0.0% 0: 0.0% 2640: 0.0% 0: 0.0% 82 cp/parser.c:1881 (cp_parser_context_new) 3216: 0.0% 0: 0.0% 72: 0.0% 0: 0.0% 137 fold-const.c:2424 (non_lvalue_loc) 1728: 0.0% 0: 0.0% 1632: 0.0% 0: 0.0% 105 cp/init.c:4128 (build_delete) 280: 0.0% 0: 0.0% 3080: 0.0% 0: 0.0% 84 stor-layout.c:2539 (make_fract_type) 0: 0.0% 0: 0.0% 3360: 0.0% 0: 0.0% 20 lra-eliminations.c:271 (form_sum) 3360: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 140 cp/cp-gimplify.c:132 (genericize_try_block) 3400: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 85 config/i386/i386.md:7028 (gen_divdf3) 3408: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 142 gimple.c:662 (gimple_build_catch) 3472: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 62 cp/tree.c:4089 (add_stmt_to_compound) 120: 0.0% 0: 0.0% 3360: 0.0% 0: 0.0% 87 config/i386/i386.md:9675 (gen_split_5370) 3552: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 148 config/i386/i386.md:9673 (gen_split_5370) 3552: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 148 config/i386/i386.md:17241 (gen_split_5744) 3520: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 168 config/i386/i386.md:6567 (gen_muldi3) 3584: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 168 expmed.c:4811 (expand_divmod) 3696: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 154 config/i386/i386.c:7440 (construct_container) 3904: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 244 cp/class.c:7588 (resolve_address_of_overloaded_f 3920: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 98 cp/pt.c:14827 (tsubst_copy_and_build) 3904: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 124 varasm.c:3287 (build_constant_desc) 0: 0.0% 0: 0.0% 3984: 0.0% 0: 0.0% 166 cp/decl.c:13990 (finish_destructor_body) 4000: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 100 tree.c:6778 (decl_debug_expr_insert) 32: 0.0% 0: 0.0% 4032: 0.0% 0: 0.0% 254 cp/method.c:737 (do_build_copy_assign) 48: 0.0% 0: 0.0% 4032: 0.0% 0: 0.0% 85 cp/method.c:745 (do_build_copy_assign) 0: 0.0% 0: 0.0% 4080: 0.0% 0: 0.0% 85 expr.c:8732 (expand_expr_real_2) 4080: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 170 cp/parser.c:6956 (cp_parser_parenthesized_expres 3960: 0.0% 720: 0.0% 144: 0.0% 0: 0.0% 56 emit-rtl.c:5855 (init_emit_regs) 0: 0.0% 0: 0.0% 4120: 0.0% 0: 0.0% 103 generic-match.c:1393 (generic_simplify) 1504: 0.0% 0: 0.0% 2720: 0.0% 0: 0.0% 132 cp/decl.c:3687 (record_builtin_type) 0: 0.0% 0: 0.0% 4256: 0.0% 0: 0.0% 28 gimplify.c:2667 (shortcut_cond_r) 4288: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 134 cp/init.c:4148 (build_delete) 480: 0.0% 0: 0.0% 3888: 0.0% 0: 0.0% 91 cp/name-lookup.c:649 (add_decl_to_level) 0: 0.0% 168: 0.0% 4520: 0.0% 0: 0.0% 4 optabs.c:6118 (build_libfunc_function) 0: 0.0% 0: 0.0% 4536: 0.0% 0: 0.0% 21 fold-const.c:15947 (build_fold_indirect_ref_loc) 4544: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 142 cp/typeck.c:8738 (check_return_expr) 0: 0.0% 0: 0.0% 4600: 0.0% 0: 0.0% 115 simplify-rtx.c:221 (simplify_gen_binary) 4608: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 192 explow.c:198 (plus_constant) 4768: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 298 config/i386/i386.md:3621 (gen_zero_extendqisi2) 4800: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 240 tree.c:3293 (save_expr) 640: 0.0% 0: 0.0% 4384: 0.0% 0: 0.0% 157 tree.c:9593 (make_vector_type) 1344: 0.0% 0: 0.0% 3696: 0.0% 0: 0.0% 30 fold-const.c:15908 (fold_indirect_ref_1) 5376: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 96 varasm.c:3331 (build_constant_desc) 0: 0.0% 0: 0.0% 5415: 0.0% 103: 0.0% 332 gimplify.c:5415 (gimple_push_cleanup) 0: 0.0% 0: 0.0% 5440: 0.0% 0: 0.0% 68 gimplify.c:5416 (gimple_push_cleanup) 0: 0.0% 0: 0.0% 5440: 0.0% 0: 0.0% 68 cp/friend.c:417 (make_friend_class) 0: 0.0% 0: 0.0% 5480: 0.0% 0: 0.0% 137 cp/decl.c:3312 (finish_case_label) 0: 0.0% 0: 0.0% 5504: 0.0% 0: 0.0% 43 convert.c:896 (convert_to_integer) 2400: 0.0% 0: 0.0% 3232: 0.0% 0: 0.0% 176 emit-rtl.c:910 (gen_rtx_SUBREG) 5904: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 246 cp/name-lookup.c:1606 (begin_scope) 0: 0.0% 176: 0.0% 5944: 0.0% 0: 0.0% 25 cp/init.c:652 (perform_member_init) 6000: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 150 cp/class.c:6603 (finish_struct_1) 80: 0.0% 0: 0.0% 5920: 0.0% 0: 0.0% 150 cp/decl.c:8259 (build_ptrmemfunc_type) 0: 0.0% 0: 0.0% 6232: 0.0% 0: 0.0% 41 cp/decl.c:8255 (build_ptrmemfunc_type) 0: 0.0% 0: 0.0% 6232: 0.0% 0: 0.0% 41 cp/call.c:9427 (perform_implicit_conversion_flag 6368: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 199 cp/pt.c:2027 (determine_specialization) 6400: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 160 config/i386/i386.md:6510 (gen_adddf3) 6432: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 268 cp/init.c:3319 (build_vec_delete_1) 4136: 0.0% 0: 0.0% 2552: 0.0% 0: 0.0% 152 cp/pt.c:17282 (try_one_overload) 6712: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 181 fold-const.c:4538 (build_range_check) 6720: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 168 cp/cp-gimplify.c:156 (build_gimple_eh_filter_tre 6720: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 168 cp/cp-gimplify.c:159 (build_gimple_eh_filter_tre 6720: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 168 cp/call.c:4144 (build_operator_new_call) 6720: 0.0% 1760: 0.0% 40: 0.0% 0: 0.0% 213 cp/rtti.c:951 (tinfo_base_init) 6840: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 95 cp/rtti.c:1048 (class_initializer) 6840: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 95 cp/pt.c:16367 (fn_type_unification) 6880: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 172 cp/decl.c:8250 (build_ptrmemfunc_type) 0: 0.0% 0: 0.0% 6888: 0.0% 0: 0.0% 41 cp/typeck.c:6313 (cp_build_compound_expr) 6800: 0.0% 0: 0.0% 120: 0.0% 0: 0.0% 173 simplify-rtx.c:4372 (simplify_plus_minus) 6960: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 290 cp/friend.c:411 (make_friend_class) 0: 0.0% 0: 0.0% 7040: 0.0% 0: 0.0% 176 cp/pt.c:15036 (tsubst_copy_and_build) 7128: 0.0% 720: 0.0% 0: 0.0% 0: 0.0% 102 cp/typeck.c:5168 (pointer_diff) 1560: 0.0% 0: 0.0% 5600: 0.0% 0: 0.0% 179 alias.c:1079 (unique_base_value) 7248: 0.0% 0: 0.0% 64: 0.0% 0: 0.0% 457 config/i386/i386.md:6522 (gen_subdf3) 7440: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 310 ipa-devirt.c:2023 (get_odr_type) 0: 0.0% 0: 0.0% 7584: 0.0% 0: 0.0% 158 cp/call.c:413 (build_call_a) 1008: 0.0% 0: 0.0% 6576: 0.0% 0: 0.0% 316 cp/typeck.c:7690 (build_x_modify_expr) 7640: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 191 expr.c:4080 (emit_single_push_insn_1) 7680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 320 expr.c:4074 (emit_single_push_insn_1) 7680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 320 convert.c:584 (convert_to_integer) 1952: 0.0% 0: 0.0% 5728: 0.0% 0: 0.0% 240 config/i386/i386.c:27797 (ix86_get_builtin_func_ 560: 0.0% 0: 0.0% 7200: 0.0% 0: 0.0% 194 cp/pt.c:17014 (resolve_overloaded_unification) 7888: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 212 cp/class.c:8898 (dfs_accumulate_vtbl_inits) 0: 0.0% 0: 0.0% 7968: 0.0% 0: 0.0% 249 config/i386/i386.md:6552 (gen_mulsi3) 8000: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 375 stor-layout.c:2132 (finish_builtin_struct) 0: 0.0% 0: 0.0% 8208: 0.0% 0: 0.0% 54 tree.c:675 (init_ttree) 0: 0.0% 0: 0.0% 8216: 0.0% 24: 0.0% 1 tree.c:672 (init_ttree) 0: 0.0% 0: 0.0% 8216: 0.0% 24: 0.0% 1 varasm.c:6073 (init_varasm_once) 0: 0.0% 0: 0.0% 8216: 0.0% 24: 0.0% 1 cp/cp-objcp-common.c:224 (init_shadowed_var_for_ 0: 0.0% 0: 0.0% 8216: 0.0% 24: 0.0% 1 expmed.c:3029 (expand_mult_const) 8232: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 343 fold-const.c:3572 (invert_truthvalue_loc) 6368: 0.0% 0: 0.0% 2016: 0.0% 0: 0.0% 262 cp/typeck2.c:1714 (build_x_arrow) 8400: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 210 fold-const.c:10652 (fold_binary_loc) 6160: 0.0% 0: 0.0% 2360: 0.0% 0: 0.0% 213 fold-const.c:8639 (maybe_canonicalize_comparison 7760: 0.0% 0: 0.0% 840: 0.0% 0: 0.0% 215 cp/parser.c:25495 (cp_parser_cache_defarg) 8920: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 223 expmed.c:3246 (expand_mult) 8928: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 372 cp/init.c:3097 (build_new) 5280: 0.0% 0: 0.0% 3776: 0.0% 0: 0.0% 283 gimplify.c:2837 (shortcut_cond_expr) 9376: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 293 gimple.c:678 (gimple_build_eh_filter) 9408: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 168 cp/decl2.c:834 (finish_static_data_member_decl) 0: 0.0% 6616: 0.0% 9608: 0.0% 0: 0.0% 9 emit-rtl.c:522 (const_double_from_real_value) 8240: 0.0% 0: 0.0% 1440: 0.0% 0: 0.0% 242 gimplify.c:2844 (shortcut_cond_expr) 9920: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 310 cp/init.c:703 (perform_member_init) 9960: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 249 cp/cvt.c:243 (cp_convert_to_pointer) 10016: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 313 cp/init.c:2905 (build_new_1) 2120: 0.0% 0: 0.0% 7920: 0.0% 0: 0.0% 251 cp/init.c:2977 (build_new_1) 2120: 0.0% 0: 0.0% 7920: 0.0% 0: 0.0% 251 cp/init.c:2955 (build_new_1) 2120: 0.0% 0: 0.0% 7920: 0.0% 0: 0.0% 251 cp/class.c:3648 (check_field_decls) 10080: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 252 cp/method.c:141 (make_thunk) 0: 0.0% 0: 0.0% 10368: 0.0% 0: 0.0% 48 cp/method.c:636 (do_build_copy_constructor) 10600: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 265 cp/method.c:634 (do_build_copy_constructor) 10600: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 265 explow.c:171 (plus_constant) 10608: 0.0% 0: 0.0% 48: 0.0% 0: 0.0% 444 cp/class.c:1298 (alter_access) 0: 0.0% 0: 0.0% 11000: 0.0% 0: 0.0% 275 cp/class.c:1244 (add_method) 0: 0.0% 568: 0.0% 11528: 0.0% 0: 0.0% 99 gimplify.c:2177 (gimplify_self_mod_expr) 12240: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 306 gimplify.c:7939 (gimplify_expr) 12336: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 257 cp/init.c:2138 (build_raw_new_expr) 0: 0.0% 0: 0.0% 12584: 0.0% 0: 0.0% 227 cp/call.c:414 (build_call_a) 1680: 0.0% 0: 0.0% 10960: 0.0% 0: 0.0% 316 cp/method.c:629 (do_build_copy_constructor) 12720: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 265 config/i386/i386.md:7004 (gen_muldf3) 12960: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 540 cp/typeck.c:5898 (cp_build_unary_op) 8640: 0.0% 0: 0.0% 4720: 0.0% 0: 0.0% 334 cp/class.c:689 (build_vfield_ref) 10992: 0.0% 0: 0.0% 2400: 0.0% 0: 0.0% 279 cp/typeck.c:5919 (cp_build_unary_op) 12768: 0.0% 0: 0.0% 736: 0.0% 0: 0.0% 422 config/i386/i386.c:20555 (ix86_expand_setcc) 13536: 0.0% 0: 0.0% 48: 0.0% 0: 0.0% 566 expmed.c:5172 (emit_cstore) 13632: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 568 tree.c:1881 (build_real) 5880: 0.0% 0: 0.0% 8136: 0.0% 0: 0.0% 584 cp/typeck2.c:1460 (process_init_constructor_reco 0: 0.0% 0: 0.0% 14256: 0.0% 0: 0.0% 198 tree.c:6805 (decl_value_expr_insert) 13872: 0.0% 0: 0.0% 704: 0.0% 0: 0.0% 911 cp/decl.c:5503 (reshape_init_class) 14616: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 203 cp/call.c:5100 (build_conditional_expr_1) 7008: 0.0% 0: 0.0% 7824: 0.0% 0: 0.0% 309 hash-table.h:914 (expand) 0: 0.0% 536: 0.0% 15456: 0.0% 120: 0.0% 5 cp/init.c:1677 (expand_default_init) 15680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 392 cp/call.c:7425 (build_over_call) 15960: 0.0% 0: 0.0% 200: 0.0% 0: 0.0% 404 fold-const.c:12306 (fold_binary_loc) 16160: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 505 alias.c:2858 (init_alias_analysis) 0: 0.0% 15360: 0.0% 16384: 0.0% 0: 0.0% 5 tree.c:677 (init_ttree) 0: 0.0% 0: 0.0% 16456: 0.0% 72: 0.0% 1 gimplify.c:3070 (gimplify_cond_expr) 16680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 417 gimplify.c:3066 (gimplify_cond_expr) 16680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 417 expmed.c:3078 (expand_mult_const) 16848: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 702 cp/name-lookup.c:3844 (push_decl_namespace) 17040: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 427 cp/init.c:2134 (build_raw_new_expr) 0: 0.0% 0: 0.0% 17320: 0.0% 0: 0.0% 433 cp/class.c:9465 (build_rtti_vtbl_entries) 17928: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 249 tree.c:1882 (build_real) 7840: 0.0% 0: 0.0% 10848: 0.0% 0: 0.0% 584 cp/pt.c:9242 (instantiate_class_template_1) 18760: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 469 cp/cp-gimplify.c:244 (genericize_cp_loop) 3648: 0.0% 0: 0.0% 15168: 0.0% 0: 0.0% 392 cp/class.c:9385 (add_vcall_offset) 0: 0.0% 4872: 0.0% 18936: 0.0% 288: 0.0% 224 cp/init.c:891 (sort_mem_initializers) 19120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 478 cp/class.c:498 (build_base_path) 4128: 0.0% 0: 0.0% 16384: 0.0% 0: 0.0% 641 cp/parser.c:22316 (cp_parser_gnu_attribute_list) 9800: 0.0% 0: 0.0% 11680: 0.0% 0: 0.0% 537 cp/pt.c:7457 (lookup_template_function) 18120: 0.0% 0: 0.0% 4480: 0.0% 0: 0.0% 565 tree.c:1510 (wide_int_to_tree) 10056: 0.0% 0: 0.0% 13008: 0.0% 0: 0.0% 961 attribs.c:627 (decl_attributes) 12880: 0.0% 0: 0.0% 10200: 0.0% 0: 0.0% 577 cp/typeck.c:7477 (cp_build_modify_expr) 23584: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 737 varasm.c:3296 (build_constant_desc) 0: 0.0% 0: 0.0% 23904: 0.0% 0: 0.0% 166 fold-const.c:9934 (fold_binary_loc) 15680: 0.0% 0: 0.0% 8560: 0.0% 0: 0.0% 606 cp/class.c:3949 (record_subobject_offset) 24680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 617 cp/semantics.c:3050 (finish_base_specifier) 24760: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 619 tree-inline.c:1212 (copy_tree_body_r) 32: 0.0% 0: 0.0% 24800: 0.0% 0: 0.0% 776 cp/class.c:5856 (create_vtable_ptr) 18400: 0.0% 0: 0.0% 6760: 0.0% 0: 0.0% 629 cp/pt.c:448 (push_inline_template_parms_recursiv 19600: 0.0% 0: 0.0% 5600: 0.0% 0: 0.0% 225 fold-const.c:792 (negate_expr) 25600: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 800 cp/parser.c:22292 (cp_parser_gnu_attribute_list) 25920: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 648 tree.c:8297 (build_function_type_array_1) 4080: 0.0% 0: 0.0% 21880: 0.0% 0: 0.0% 649 fold-const.c:13465 (fold_ternary_loc) 5952: 0.0% 0: 0.0% 20352: 0.0% 0: 0.0% 548 cp/method.c:1798 (implicitly_declare_fn) 40: 0.0% 0: 0.0% 26360: 0.0% 0: 0.0% 660 emit-rtl.c:489 (gen_rtx_CONST_INT) 24736: 0.0% 0: 0.0% 1744: 0.0% 0: 0.0% 1655 cp/init.c:3343 (create_temporary_var) 0: 0.0% 0: 0.0% 26640: 0.0% 0: 0.0% 185 gimplify.c:2183 (gimplify_self_mod_expr) 26640: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 666 fold-const.c:9940 (fold_binary_loc) 16440: 0.0% 0: 0.0% 10600: 0.0% 0: 0.0% 676 cp/pt.c:7225 (coerce_innermost_template_parms) 21320: 0.0% 0: 0.0% 6920: 0.0% 0: 0.0% 706 fold-const.c:6203 (extract_muldiv_1) 29120: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 728 cp/class.c:2445 (dfs_find_final_overrider_1) 29360: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 734 cp/semantics.c:524 (begin_maybe_infinite_loop) 0: 0.0% 480: 0.0% 29704: 0.0% 0: 0.0% 745 cp/pt.c:19033 (get_bindings) 29824: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 794 cp/cp-gimplify.c:242 (genericize_cp_loop) 6400: 0.0% 0: 0.0% 23616: 0.0% 0: 0.0% 938 cp/pt.c:18707 (more_specialized_fn) 30176: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 698 jump.c:1486 (redirect_target) 30144: 0.0% 0: 0.0% 32: 0.0% 0: 0.0% 1886 cp/cp-gimplify.c:269 (genericize_cp_loop) 6400: 0.0% 0: 0.0% 23776: 0.0% 0: 0.0% 943 cp/typeck.c:214 (commonparms) 29760: 0.0% 0: 0.0% 440: 0.0% 0: 0.0% 755 cp/cp-gimplify.c:104 (finish_bc_block) 6400: 0.0% 0: 0.0% 23808: 0.0% 0: 0.0% 944 cp/parser.c:19306 (cp_parser_initializer) 3360: 0.0% 0: 0.0% 27960: 0.0% 0: 0.0% 783 gimplify.c:2661 (shortcut_cond_r) 31392: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 654 config/i386/i386.md:12028 (gen_memory_blockage) 31536: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3942 cp/pt.c:18708 (more_specialized_fn) 32264: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 698 cp/pt.c:16252 (fn_type_unification) 33160: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 829 config/i386/i386.md:3717 (gen_extendsidi2) 33160: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1658 cp/decl.c:13946 (begin_destructor_body) 32560: 0.0% 0: 0.0% 2400: 0.0% 0: 0.0% 874 generic-match.c:1471 (generic_simplify) 11136: 0.0% 0: 0.0% 24032: 0.0% 0: 0.0% 1099 cp/name-lookup.c:192 (binding_table_new) 0: 0.0% 0: 0.0% 35856: 0.0% 0: 0.0% 1494 gimplify.c:1600 (build_and_jump) 36000: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1125 fold-const.c:1791 (size_binop_loc) 37280: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 932 cp/typeck.c:3161 (cp_build_array_ref) 18480: 0.0% 0: 0.0% 19376: 0.0% 0: 0.0% 676 gimplify.c:2194 (gimplify_self_mod_expr) 39560: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 989 gimple.c:1566 (gimple_set_bb) 0: 0.0% 22808: 0.0% 40200: 0.0% 0: 0.0% 135 emit-rtl.c:2987 (copy_rtx_if_shared_1) 40656: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1694 cp/decl.c:12533 (xref_basetypes) 0: 0.0% 0: 0.0% 42040: 0.0% 0: 0.0% 1051 cfgrtl.c:394 (rtl_create_basic_block) 42392: 0.0% 432: 0.0% 0: 0.0% 1536: 0.0% 122 cp/name-lookup.c:5300 (arg_assoc_namespace) 43200: 0.0% 10800: 0.0% 0: 0.0% 0: 0.0% 750 fold-const.c:7287 (fold_plusminus_mult_expr) 42400: 0.0% 0: 0.0% 1280: 0.0% 0: 0.0% 1092 cp/pt.c:4375 (process_partial_specialization) 0: 0.0% 0: 0.0% 47320: 0.0% 0: 0.0% 1183 cp/class.c:9145 (build_vtbl_initializer) 0: 0.0% 19920: 0.0% 47464: 0.0% 1120: 0.0% 415 cp/class.c:4418 (build_base_field) 0: 0.0% 0: 0.0% 47576: 0.0% 0: 0.0% 313 cp/tree.c:735 (rvalue) 27968: 0.0% 0: 0.0% 20832: 0.0% 0: 0.0% 1525 cp/decl.c:733 (poplevel) 49240: 0.0% 0: 0.0% 40: 0.0% 0: 0.0% 1232 dwarf2out.c:1006 (dwarf2out_do_cfi_startproc) 49368: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2057 fold-const.c:3433 (fold_truth_not_expr) 32080: 0.0% 0: 0.0% 18400: 0.0% 0: 0.0% 1262 tree.c:4599 (build_nt) 43008: 0.0% 0: 0.0% 9600: 0.0% 0: 0.0% 1431 expr.c:4991 (expand_assignment) 52776: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2199 gimplify.c:1045 (voidify_wrapper_expr) 54680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1367 convert.c:625 (convert_to_integer) 17696: 0.0% 0: 0.0% 38112: 0.0% 0: 0.0% 1744 cp/semantics.c:3974 (simplify_aggr_init_expr) 13920: 0.0% 0: 0.0% 44704: 0.0% 0: 0.0% 1832 cp/decl.c:13026 (finish_enum_value_list) 0: 0.0% 0: 0.0% 59592: 0.0% 0: 0.0% 2483 cp/typeck.c:5900 (cp_build_unary_op) 32640: 0.0% 0: 0.0% 28800: 0.0% 0: 0.0% 1536 fold-const.c:16283 (fold_build_pointer_plus_loc) 29240: 0.0% 0: 0.0% 33880: 0.0% 0: 0.0% 1578 tree-phinodes.c:249 (release_phi_node) 71680: 0.0% 70720: 0.0% 0: 0.0% 0: 0.0% 51 cp/name-lookup.c:116 (binding_entry_make) 0: 0.0% 0: 0.0% 73368: 0.0% 0: 0.0% 3057 gimplify.c:5508 (gimplify_target_expr) 75280: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 1882 tree.c:10574 (build_empty_stmt) 17408: 0.0% 0: 0.0% 59712: 0.0% 0: 0.0% 2410 tree-inline.c:5063 (remap_save_expr) 336: 0.0% 0: 0.0% 77360: 0.0% 0: 0.0% 1396 except.c:494 (gen_eh_landing_pad) 2032: 0.0% 28768: 0.0% 76248: 0.0% 0: 0.0% 1012 cp/cp-gimplify.c:203 (genericize_if_stmt) 12000: 0.0% 0: 0.0% 67392: 0.0% 0: 0.0% 1654 cp/typeck2.c:763 (split_nonconstant_init) 20400: 0.0% 0: 0.0% 61120: 0.0% 0: 0.0% 2038 emit-rtl.c:5169 (emit_use) 82160: 0.0% 0: 0.0% 16: 0.0% 0: 0.0% 5136 optabs.c:4193 (prepare_cmp_insn) 83976: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3499 config/i386/i386.c:20392 (ix86_expand_branch) 83880: 0.0% 0: 0.0% 96: 0.0% 0: 0.0% 3499 cp/parser.c:12799 (cp_parser_mem_initializer) 10480: 0.0% 0: 0.0% 77720: 0.0% 0: 0.0% 2205 cp/pt.c:419 (push_inline_template_parms_recursiv 93960: 0.0% 0: 0.0% 360: 0.0% 0: 0.0% 2358 cp/decl.c:4174 (cxx_builtin_function) 0: 0.0% 0: 0.0% 94608: 0.0% 0: 0.0% 438 config/i386/i386.c:19831 (ix86_expand_int_compar 96336: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 4020 config/i386/i386.c:19836 (ix86_expand_int_compar 96336: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 4020 config/i386/i386.c:19832 (ix86_expand_int_compar 96336: 0.0% 0: 0.0% 144: 0.0% 0: 0.0% 4020 tree.c:1939 (build_string) 6459: 0.0% 0: 0.0% 90863: 0.0% 8178: 0.1% 1729 cp/class.c:8975 (build_vtbl_initializer) 97608: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 249 cp/semantics.c:3982 (simplify_aggr_init_expr) 97800: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2445 fold-const.c:2229 (fold_convert_loc) 52096: 0.0% 0: 0.0% 48832: 0.0% 0: 0.0% 3154 cp/parser.c:12788 (cp_parser_mem_initializer) 10720: 0.0% 0: 0.0% 91280: 0.0% 0: 0.0% 2550 cp/method.c:859 (build_stub_object) 102464: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3202 cp/search.c:2460 (lookup_conversions_r) 102680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2567 cp/mangle.c:1164 (write_template_prefix) 103160: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2579 cp/parser.c:1299 (cp_token_cache_new) 102960: 0.0% 0: 0.0% 288: 0.0% 0: 0.0% 6453 cp/search.c:2445 (lookup_conversions_r) 103520: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2588 tree-ssanames.c:168 (make_ssa_name_fn) 0: 0.0% 155648: 0.1% 104448: 0.0% 0: 0.0% 86 cp/typeck.c:4827 (cp_build_binary_op) 105520: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2638 cp/call.c:5252 (add_candidates) 106360: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 2659 emit-rtl.c:460 (gen_rtx_INSN_LIST) 108360: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4515 config/i386/i386.c:11903 (ix86_emit_restore_reg_ 112320: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 4680 cp/pt.c:3963 (template_parms_to_args) 74600: 0.0% 0: 0.0% 41000: 0.0% 0: 0.0% 2890 cp/typeck.c:7669 (cp_build_modify_expr) 58240: 0.0% 0: 0.0% 58040: 0.0% 0: 0.0% 2907 cp/name-lookup.c:5483 (arg_assoc_class) 119288: 0.0% 53784: 0.0% 0: 0.0% 0: 0.0% 1482 cp/semantics.c:269 (pop_to_parent_deferring_acce 105336: 0.0% 0: 0.0% 14440: 0.0% 6304: 0.0% 788 cp/name-lookup.c:158 (binding_table_construct) 13184: 0.0% 0: 0.0% 108800: 0.0% 0: 0.0% 1698 except.c:2463 (add_call_site) 122568: 0.0% 45480: 0.0% 0: 0.0% 0: 0.0% 2902 cp/init.c:131 (initialize_vtbl_ptrs) 122680: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3067 cp/decl.c:13246 (build_enumerator) 0: 0.0% 0: 0.0% 124120: 0.0% 0: 0.0% 3103 function.c:350 (add_frame_space) 124872: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 5203 hash-table.h:914 (expand) 0: 0.0% 5152: 0.0% 125096: 0.0% 200: 0.0% 7 gimplify.c:1181 (gimplify_bind_expr) 5760: 0.0% 0: 0.0% 119920: 0.0% 0: 0.0% 1571 cp/tree.c:1669 (copy_binfo) 0: 0.0% 0: 0.0% 127896: 0.0% 0: 0.0% 1313 varpool.c:159 (create_empty) 0: 0.0% 0: 0.0% 129920: 0.0% 0: 0.0% 1015 cfgloop.c:297 (establish_preds) 91120: 0.0% 38520: 0.0% 39440: 0.0% 0: 0.0% 4227 cp/parser.c:13472 (cp_parser_template_parameter) 131800: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3295 cp/pt.c:20654 (tsubst_initializer_list) 133960: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3349 attribs.c:602 (decl_attributes) 2960: 0.0% 0: 0.0% 132600: 0.0% 0: 0.0% 3389 cp/pt.c:19362 (most_specialized_partial_spec) 141360: 0.0% 0: 0.0% 0: 0.0% 0: 0.0% 3534 hash-map.h:123 (create_ggc) 4320: 0.0% 0: 0.0% 139632: 0.0% 0: 0.0% 2999 optabs.c:288 (add_equal_note) 144840: 0.0% 0: 0.0% 192: 0.0% 0: 0.0% 6043 hash-table.h:914 (expand) 0: 0.0% 114328: 0.0% 147552: 0.0% 248: 0.0% 9 except.c:2504 (convert_to_eh_region_ranges) 148104: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 2057 cp/parser.c:23919 (cp_parser_functional_cast) 3840: 0.0% 0: 0.0% 144480: 0.0% 0: 0.0% 3708 cp/pt.c:7407 (add_pending_template) 116224: 0.0% 0: 0.0% 32288: 0.0% 0: 0.0% 9282 cp/class.c:4589 (build_clone) 0: 0.0% 0: 0.0% 153792: 0.0% 0: 0.0% 4806 cp/class.c:6543 (sorted_fields_type_new) 0: 0.0% 0: 0.0% 155592: 0.0% 9672: 0.1% 1064 except.c:2459 (add_call_site) 157168: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 9823 symtab.c:1346 (set_section_for_node) 0: 0.0% 0: 0.0% 159120: 0.0% 0: 0.0% 9945 cp/init.c:851 (build_field_list) 161480: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 4037 config/i386/i386.c:20391 (ix86_expand_branch) 167776: 0.1% 0: 0.0% 176: 0.0% 0: 0.0% 6998 cp/pt.c:22013 (build_non_dependent_expr) 171008: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 5344 cp/typeck2.c:305 (abstract_virtuals_error_sfinae 76192: 0.0% 0: 0.0% 98240: 0.0% 0: 0.0% 5451 gimplify.c:5505 (gimplify_target_expr) 176360: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 4409 cp/decl.c:10888 (grokdeclarator) 0: 0.0% 0: 0.0% 178296: 0.1% 0: 0.0% 1173 config/i386/i386.md:12038 (gen_memory_blockage) 189216: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 7884 optabs.c:4024 (can_compare_p) 194568: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 8107 except.c:411 (gen_eh_region) 5360: 0.0% 89480: 0.0% 190384: 0.1% 0: 0.0% 2488 cp/tree.c:2696 (build_min_non_dep) 47312: 0.0% 0: 0.0% 148824: 0.0% 0: 0.0% 4758 cfgexpand.c:3295 (expand_gimple_stmt_1) 204760: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 5119 cp/call.c:5388 (build_new_op_1) 206200: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 5155 function.c:2372 (assign_parms_augmented_arg_list 211200: 0.1% 0: 0.0% 512: 0.0% 0: 0.0% 1654 gimple.c:742 (gimple_build_wce) 212208: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 4421 dwarf2out.c:1038 (dwarf2out_alloc_current_fde) 0: 0.0% 48992: 0.0% 212992: 0.1% 0: 0.0% 13 hash-table.h:914 (expand) 49968: 0.0% 95600: 0.0% 165680: 0.0% 6608: 0.0% 181 tree-cfg.c:622 (create_bb) 2264: 0.0% 103864: 0.0% 213552: 0.1% 36352: 0.2% 670 cp/cp-gimplify.c:1046 (cp_genericize_r) 184280: 0.1% 0: 0.0% 42120: 0.0% 0: 0.0% 5660 cp/class.c:1246 (add_method) 0: 0.0% 128400: 0.0% 239760: 0.1% 0: 0.0% 1495 tree.c:7898 (build_range_type_1) 208656: 0.1% 0: 0.0% 32424: 0.0% 0: 0.0% 1435 cp/typeck.c:8746 (check_return_expr) 8320: 0.0% 0: 0.0% 233080: 0.1% 0: 0.0% 6035 tree-inline.c:5029 (copy_tree_r) 13920: 0.0% 0: 0.0% 228288: 0.1% 0: 0.0% 10092 cp/pt.c:3851 (end_template_parm_list) 39800: 0.0% 0: 0.0% 203280: 0.1% 0: 0.0% 6077 cp/pt.c:538 (add_to_template_args) 244096: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 6100 tree.c:1242 (build_new_int_cst) 19008: 0.0% 0: 0.0% 229128: 0.1% 0: 0.0% 10073 cp/decl2.c:807 (note_vague_linkage_fn) 0: 0.0% 2912: 0.0% 259072: 0.1% 0: 0.0% 13 tree.c:8021 (build_array_type_1) 227640: 0.1% 0: 0.0% 33936: 0.0% 0: 0.0% 1557 cp/decl.c:13725 (start_preparsed_function) 84960: 0.0% 0: 0.0% 178200: 0.1% 0: 0.0% 6579 cp/name-lookup.c:310 (cxx_binding_make) 41480: 0.0% 0: 0.0% 226120: 0.1% 0: 0.0% 6690 c-family/c-common.c:12030 (make_tree_vector) 267920: 0.1% 64520: 0.0% 80: 0.0% 0: 0.0% 8313 cp/pt.c:3847 (end_template_parm_list) 39792: 0.0% 0: 0.0% 231640: 0.1% 16: 0.0% 6077 cp/pt.c:15315 (tsubst_copy_and_build) 273680: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 6842 function.c:632 (temp_slots_at_level) 273776: 0.1% 79240: 0.0% 64: 0.0% 0: 0.0% 13767 cp/class.c:578 (build_simple_base_path) 97728: 0.0% 0: 0.0% 176592: 0.1% 0: 0.0% 5715 cp/typeck.c:5030 (cp_build_binary_op) 158800: 0.1% 0: 0.0% 120560: 0.0% 0: 0.0% 6984 gimple.c:497 (gimple_build_cond) 13360: 0.0% 0: 0.0% 272240: 0.1% 0: 0.0% 3570 cp/tree.c:416 (build_aggr_init_array) 59512: 0.0% 0: 0.0% 226648: 0.1% 0: 0.0% 4423 cp/pt.c:10318 (tsubst_template_parms) 2320: 0.0% 0: 0.0% 284800: 0.1% 0: 0.0% 7178 except.c:894 (assign_filter_values) 290592: 0.1% 0: 0.0% 144: 0.0% 0: 0.0% 4038 cp/pt.c:10296 (tsubst_template_parms) 2712: 0.0% 0: 0.0% 295312: 0.1% 0: 0.0% 7178 cp/decl.c:10351 (grokdeclarator) 0: 0.0% 0: 0.0% 301264: 0.1% 0: 0.0% 1982 cfgloop.c:430 (flow_loops_find) 0: 0.0% 4928: 0.0% 309600: 0.1% 0: 0.0% 9829 tree-inline.c:712 (remap_block) 0: 0.0% 0: 0.0% 310024: 0.1% 0: 0.0% 3523 varasm.c:1499 (make_decl_rtl) 0: 0.0% 0: 0.0% 310776: 0.1% 0: 0.0% 12949 varasm.c:3698 (create_constant_pool) 313696: 0.1% 0: 0.0% 96: 0.0% 0: 0.0% 9806 c-family/c-gimplify.c:232 (c_build_bind_expr) 163008: 0.1% 0: 0.0% 152784: 0.0% 0: 0.0% 6579 varasm.c:316 (get_section) 0: 0.0% 0: 0.0% 318752: 0.1% 0: 0.0% 9961 config/i386/i386.c:9934 (gen_pop) 323000: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 16150 cp/class.c:1033 (add_method) 0: 0.0% 66168: 0.0% 334152: 0.1% 0: 0.0% 5560 cp/parser.c:5608 (cp_parser_nested_name_specifie 164280: 0.1% 0: 0.0% 173736: 0.1% 0: 0.0% 14084 cfgloop.c:348 (alloc_loop) 0: 0.0% 5088: 0.0% 340288: 0.1% 0: 0.0% 10793 cp/pt.c:7998 (lookup_template_class_1) 0: 0.0% 0: 0.0% 340872: 0.1% 0: 0.0% 14203 expmed.c:5108 (make_tree) 347184: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 2411 cp/decl.c:13230 (build_enumerator) 0: 0.0% 0: 0.0% 347536: 0.1% 0: 0.0% 3103 config/i386/i386.c:25565 (ix86_expand_call) 349008: 0.1% 0: 0.0% 432: 0.0% 0: 0.0% 14560 tree-eh.c:2077 (lower_eh_constructs_2) 5280: 0.0% 0: 0.0% 345840: 0.1% 0: 0.0% 4389 except.c:487 (gen_eh_landing_pad) 10120: 0.0% 0: 0.0% 342120: 0.1% 0: 0.0% 8806 cp/pt.c:3787 (process_template_parm) 9184: 0.0% 0: 0.0% 359856: 0.1% 0: 0.0% 3295 tree.c:1771 (build_constructor) 108912: 0.0% 0: 0.0% 267024: 0.1% 0: 0.0% 15664 langhooks.c:578 (add_builtin_function_common) 0: 0.0% 0: 0.0% 381240: 0.1% 0: 0.0% 1765 cfgloop.c:366 (init_loops_structure) 0: 0.0% 6680: 0.0% 386480: 0.1% 0: 0.0% 9829 cp/tree.c:2661 (build_min) 8224: 0.0% 0: 0.0% 393448: 0.1% 0: 0.0% 10031 gimple.c:691 (gimple_build_eh_must_not_throw) 419808: 0.1% 0: 0.0% 0: 0.0% 0: 0.0% 8746 gimple.c:756 (gimple_build_resx) 18480: 0.0% 0: 0.0% 404208: 0.1% 0: 0.0% 8806 cp/class.c:6429 (layout_class_type) 0: 0.0% 0: 0.0% 424384: 0.1% 0: 0.0% 2792 cp/tree.c:355 (build_target_expr) 119000: 0.0% 0: 0.0% 311304: 0.1% 0: 0.0% 7684 config/i386/i386.c:18008 (ix86_expand_binary_ope 450240: 0.2% 0: 0.0% 288: 0.0% 0: 0.0% 28158 config/i386/i386.c:18007 (ix86_expand_binary_ope 450240: 0.2% 0: 0.0% 288: 0.0% 0: 0.0% 28158 hash-table.h:599 (create_ggc) 470544: 0.2% 0: 0.0% 288: 0.0% 0: 0.0% 9809 hash-table.h:599 (create_ggc) 68496: 0.0% 0: 0.0% 403296: 0.1% 0: 0.0% 9829 config/i386/i386.md:5519 (gen_split_5165) 479784: 0.2% 0: 0.0% 24: 0.0% 0: 0.0% 19992 config/i386/i386.md:5521 (gen_split_5165) 479784: 0.2% 0: 0.0% 24: 0.0% 0: 0.0% 19992 dwarf2cfi.c:2266 (add_cfis_to_fde) 0: 0.0% 112168: 0.0% 482096: 0.1% 0: 0.0% 12597 cp/pt.c:22340 (append_type_to_template_for_acces 0: 0.0% 63640: 0.0% 485904: 0.1% 6448: 0.0% 4525 tree-inline.c:5382 (copy_decl_no_change) 23440: 0.0% 0: 0.0% 464848: 0.1% 0: 0.0% 3517 config/i386/i386.c:15382 (ix86_print_operand) 490272: 0.2% 0: 0.0% 0: 0.0% 0: 0.0% 20428 cp/parser.c:13570 (cp_parser_type_parameter) 495640: 0.2% 0: 0.0% 0: 0.0% 0: 0.0% 12391 cp/semantics.c:2721 (finish_template_type_parm) 495960: 0.2% 0: 0.0% 0: 0.0% 0: 0.0% 12399 symtab.c:511 (create_reference) 0: 0.0% 577472: 0.2% 498360: 0.1% 7912: 0.1% 15231 cp/cvt.c:1433 (convert_to_void) 202336: 0.1% 0: 0.0% 304256: 0.1% 0: 0.0% 15831 cp/typeck.c:2459 (build_class_member_access_expr 508896: 0.2% 0: 0.0% 0: 0.0% 0: 0.0% 10602 config/i386/i386.c:9920 (gen_push) 532680: 0.2% 0: 0.0% 40: 0.0% 0: 0.0% 26636 cp/decl.c:3424 (build_typename_type) 0: 0.0% 0: 0.0% 544768: 0.2% 0: 0.0% 3584 cp/decl.c:8150 (grokvardecl) 0: 0.0% 1728: 0.0% 544896: 0.2% 0: 0.0% 3796 cp/semantics.c:1387 (begin_compound_stmt) 44496: 0.0% 0: 0.0% 519408: 0.2% 0: 0.0% 11748 emit-rtl.c:5101 (emit_barrier) 564096: 0.2% 0: 0.0% 128: 0.0% 0: 0.0% 8816 cp/pt.c:8006 (lookup_template_class_1) 0: 0.0% 0: 0.0% 568120: 0.2% 0: 0.0% 14203 emit-rtl.c:1074 (gen_reg_rtx) 572000: 0.2% 78000: 0.0% 0: 0.0% 138000: 0.9% 108 insn-emit.c:1642 (gen_leave_rex64) 572992: 0.2% 0: 0.0% 112: 0.0% 0: 0.0% 30702 except.c:890 (assign_filter_values) 581184: 0.2% 0: 0.0% 288: 0.0% 0: 0.0% 4038 gimple.c:548 (gimple_build_goto) 598192: 0.2% 0: 0.0% 112: 0.0% 0: 0.0% 10684 cp/tree.c:3166 (build_dummy_object) 556512: 0.2% 0: 0.0% 43616: 0.0% 0: 0.0% 18754 cp/class.c:6469 (layout_class_type) 615296: 0.2% 0: 0.0% 0: 0.0% 0: 0.0% 4048 cp/pt.c:17362 (try_class_unification) 618920: 0.2% 0: 0.0% 0: 0.0% 0: 0.0% 15405 cp/pt.c:3833 (process_template_parm) 79560: 0.0% 0: 0.0% 548200: 0.2% 0: 0.0% 15694 cp/pt.c:10353 (tsubst_template_parm) 6600: 0.0% 0: 0.0% 622160: 0.2% 0: 0.0% 15719 cp/parser.c:13886 (cp_parser_template_id) 321408: 0.1% 0: 0.0% 322176: 0.1% 0: 0.0% 26816 function.c:6707 (add_local_decl) 528: 0.0% 806560: 0.3% 670576: 0.2% 0: 0.0% 16715 cp/tree.c:1868 (build_qualified_name) 516200: 0.2% 0: 0.0% 167960: 0.0% 0: 0.0% 17104 insn-emit.c:1442 (gen_jump) 689616: 0.2% 0: 0.0% 264: 0.0% 0: 0.0% 34494 cfg.c:93 (init_flow) 11088: 0.0% 0: 0.0% 696600: 0.2% 0: 0.0% 9829 cp/decl.c:12522 (xref_basetypes) 0: 0.0% 0: 0.0% 713248: 0.2% 0: 0.0% 7339 gimplify.c:4586 (gimplify_modify_expr) 27040: 0.0% 0: 0.0% 686880: 0.2% 0: 0.0% 8924 emit-rtl.c:411 (get_reg_attrs) 761680: 0.3% 0: 0.0% 672: 0.0% 0: 0.0% 47647 cp/typeck.c:2431 (build_class_member_access_expr 438480: 0.1% 0: 0.0% 338256: 0.1% 0: 0.0% 16182 cp/parser.c:18861 (cp_parser_parameter_declarati 785480: 0.3% 0: 0.0% 0: 0.0% 0: 0.0% 19637 cp/decl.c:11403 (grokparms) 227760: 0.1% 0: 0.0% 557720: 0.2% 0: 0.0% 19637 gimple.c:206 (gimple_build_return) 22720: 0.0% 0: 0.0% 773440: 0.2% 0: 0.0% 9952 lra-eliminations.c:417 (lra_eliminate_regs_1) 860472: 0.3% 0: 0.0% 0: 0.0% 0: 0.0% 35853 fold-const.c:15795 (fold_build_cleanup_point_exp 293216: 0.1% 0: 0.0% 605888: 0.2% 0: 0.0% 28097 cp/pt.c:1493 (register_specialization) 0: 0.0% 0: 0.0% 901368: 0.3% 0: 0.0% 37557 config/i386/i386.c:25540 (ix86_expand_call) 907272: 0.3% 0: 0.0% 840: 0.0% 0: 0.0% 37838 cp/pt.c:242 (push_access_scope) 917360: 0.3% 0: 0.0% 0: 0.0% 0: 0.0% 22934 insn-emit.c:3001 (gen_pro_epilogue_adjust_stack_ 919160: 0.3% 0: 0.0% 88: 0.0% 0: 0.0% 52230 cp/class.c:6392 (layout_class_type) 0: 0.0% 0: 0.0% 921816: 0.3% 0: 0.0% 5487 gimple.c:570 (gimple_build_bind) 924928: 0.3% 0: 0.0% 64: 0.0% 0: 0.0% 14453 cp/semantics.c:366 (perform_or_defer_access_chec 929480: 0.3% 0: 0.0% 912: 0.0% 48968: 0.3% 6121 hash-table.h:599 (create_ggc) 941568: 0.3% 0: 0.0% 1056: 0.0% 0: 0.0% 19638 gimplify.c:8050 (gimplify_expr) 614560: 0.2% 0: 0.0% 341240: 0.1% 0: 0.0% 23895 tree.c:7024 (type_hash_canon) 93216: 0.0% 0: 0.0% 885920: 0.3% 0: 0.0% 61196 tree.c:4618 (build_nt_call_vec) 2064: 0.0% 0: 0.0% 990984: 0.3% 0: 0.0% 17718 expr.c:2366 (use_reg_mode) 1001024: 0.3% 0: 0.0% 832: 0.0% 0: 0.0% 62616 except.c:382 (init_eh_for_function) 40: 0.0% 1240: 0.0% 1002800: 0.3% 0: 0.0% 25102 except.c:383 (init_eh_for_function) 40: 0.0% 280: 0.0% 1003760: 0.3% 0: 0.0% 25102 cfg.c:99 (init_flow) 16016: 0.0% 0: 0.0% 1006200: 0.3% 0: 0.0% 9829 cfg.c:96 (init_flow) 16016: 0.0% 0: 0.0% 1006200: 0.3% 0: 0.0% 9829 dwarf2cfi.c:438 (new_cfi) 0: 0.0% 0: 0.0% 1026648: 0.3% 0: 0.0% 42777 hash-table.h:914 (expand) 0: 0.0% 7240: 0.0% 1041840: 0.3% 504: 0.0% 11 cp/parser.c:14182 (cp_parser_template_argument_l 1064744: 0.4% 0: 0.0% 4208: 0.0% 0: 0.0% 26815 dwarf2out.c:1026 (dwarf2out_alloc_current_fde) 0: 0.0% 0: 0.0% 1098048: 0.3% 0: 0.0% 9804 tree-ssa.c:1077 (init_tree_ssa) 159824: 0.1% 0: 0.0% 941024: 0.3% 0: 0.0% 9829 gimplify.c:2559 (gimplify_call_expr) 1102624: 0.4% 0: 0.0% 0: 0.0% 0: 0.0% 34457 gimple.c:725 (gimple_build_try) 1117480: 0.4% 0: 0.0% 784: 0.0% 0: 0.0% 19969 cp/tree.c:372 (build_local_temp) 39456: 0.0% 0: 0.0% 1082016: 0.3% 0: 0.0% 7788 cp/name-lookup.c:6114 (store_class_bindings) 1124712: 0.4% 167928: 0.1% 0: 0.0% 27976: 0.2% 5438 gimple.c:559 (gimple_build_nop) 150520: 0.1% 0: 0.0% 1011000: 0.3% 0: 0.0% 29038 c-family/c-semantics.c:50 (push_stmt_list) 200: 0.0% 186096: 0.1% 1161896: 0.3% 0: 0.0% 29239 tree-iterator.c:55 (alloc_stmt_list) 443008: 0.1% 0: 0.0% 719552: 0.2% 0: 0.0% 36330 cp/typeck.c:5478 (cp_build_addr_expr_1) 650656: 0.2% 0: 0.0% 513376: 0.1% 0: 0.0% 36376 gimple.c:1687 (gimple_copy) 143544: 0.0% 0: 0.0% 1037720: 0.3% 27584: 0.2% 12059 except.c:379 (init_eh_for_function) 48: 0.0% 0: 0.0% 1204848: 0.3% 0: 0.0% 25102 cp/pt.c:3967 (template_parms_to_args) 581896: 0.2% 0: 0.0% 667248: 0.2% 56: 0.0% 28602 emit-rtl.c:4580 (emit_barrier_after) 1313280: 0.4% 0: 0.0% 448: 0.0% 0: 0.0% 20527 config/i386/i386.c:17996 (ix86_expand_binary_ope 1350720: 0.5% 0: 0.0% 864: 0.0% 0: 0.0% 56316 hash-table.h:914 (expand) 326200: 0.1% 1156064: 0.4% 1051392: 0.3% 3352: 0.0% 91 cp/typeck.c:2970 (cp_build_indirect_ref) 734528: 0.2% 0: 0.0% 647424: 0.2% 0: 0.0% 43186 tree-ssa-operands.c:180 (create_vop_var) 205488: 0.1% 0: 0.0% 1209888: 0.4% 0: 0.0% 9829 gimple.c:537 (gimple_build_label) 682080: 0.2% 0: 0.0% 767368: 0.2% 0: 0.0% 25883 cp/tree.c:2632 (build_min_nt_loc) 6520: 0.0% 0: 0.0% 1488048: 0.4% 0: 0.0% 34510 tree-eh.c:113 (add_stmt_to_eh_lp_fn) 46992: 0.0% 40128: 0.0% 1496352: 0.4% 47984: 0.3% 2999 hash-table.h:914 (expand) 0: 0.0% 23696: 0.0% 1547992: 0.4% 872: 0.0% 19 tree-cfg.c:217 (init_empty_tree_cfg_for_function 25200: 0.0% 60816: 0.0% 1565256: 0.5% 0: 0.0% 9829 rtl.c:151 (rtvec_alloc) 1580496: 0.5% 0: 0.0% 30920: 0.0% 7608: 0.1% 68902 tree-cfg.c:222 (init_empty_tree_cfg_for_function 0: 0.0% 38304: 0.0% 1612968: 0.5% 0: 0.0% 9829 cp/tree.c:1809 (hash_tree_cons) 0: 0.0% 0: 0.0% 1641880: 0.5% 0: 0.0% 41047 reload1.c:2667 (eliminate_regs_1) 1659288: 0.6% 0: 0.0% 0: 0.0% 0: 0.0% 69137 cp/cvt.c:544 (convert_from_reference) 961664: 0.3% 0: 0.0% 712608: 0.2% 0: 0.0% 52321 lra-eliminations.c:403 (lra_eliminate_regs_1) 1689240: 0.6% 0: 0.0% 384: 0.0% 0: 0.0% 70401 cp/tree.c:2014 (ovl_cons) 719296: 0.2% 1408: 0.0% 997344: 0.3% 0: 0.0% 53689 tree.c:8152 (maybe_canonicalize_argtypes) 697240: 0.2% 0: 0.0% 1053840: 0.3% 0: 0.0% 43777 except.c:396 (gen_eh_region) 51480: 0.0% 0: 0.0% 1705616: 0.5% 0: 0.0% 19967 cp/pt.c:3817 (process_template_parm) 37696: 0.0% 0: 0.0% 1845736: 0.5% 0: 0.0% 12391 cfgrtl.c:5013 (init_rtl_bb_info) 1962960: 0.7% 0: 0.0% 960: 0.0% 0: 0.0% 81830 cp/lex.c:690 (cxx_make_type) 456: 0.0% 0: 0.0% 1994240: 0.6% 0: 0.0% 13123 emit-rtl.c:2561 (gen_label_rtx) 2008704: 0.7% 0: 0.0% 960: 0.0% 0: 0.0% 31401 cp/name-lookup.c:6084 (store_bindings) 2012704: 0.7% 671912: 0.2% 0: 0.0% 79608: 0.5% 17592 cp/lex.c:576 (retrofit_lang_decl) 192760: 0.1% 39640: 0.0% 1820620: 0.5% 81188: 0.5% 63842 symtab.c:1347 (set_section_for_node) 0: 0.0% 0: 0.0% 2035916: 0.6% 240108: 1.6% 9945 varasm.c:318 (get_section) 0: 0.0% 0: 0.0% 2036672: 0.6% 240160: 1.6% 9961 cp/search.c:1154 (build_baselink) 2052816: 0.7% 0: 0.0% 25632: 0.0% 0: 0.0% 43301 hash-table.h:914 (expand) 0: 0.0% 0: 0.0% 2081176: 0.6% 408: 0.0% 7 explow.c:193 (plus_constant) 2076144: 0.7% 0: 0.0% 12744: 0.0% 0: 0.0% 87037 emit-rtl.c:3898 (make_jump_insn_raw) 2198232: 0.7% 0: 0.0% 864: 0.0% 0: 0.0% 30543 cfgloop.c:346 (alloc_loop) 0: 0.0% 34344: 0.0% 2296944: 0.7% 0: 0.0% 10793 tree.c:8347 (build_method_type_directly) 682600: 0.2% 0: 0.0% 1630680: 0.5% 0: 0.0% 57832 c-family/c-semantics.c:119 (build_stmt) 806200: 0.3% 0: 0.0% 1512544: 0.4% 0: 0.0% 65092 cp/decl.c:930 (create_implicit_typedef) 0: 0.0% 0: 0.0% 2419840: 0.7% 0: 0.0% 15920 gimplify.c:4770 (gimplify_modify_expr) 146776: 0.0% 0: 0.0% 2314168: 0.7% 0: 0.0% 30264 tree-phinodes.c:140 (allocate_phi_node) 497608: 0.2% 0: 0.0% 2032792: 0.6% 75616: 0.5% 8688 cp/name-lookup.c:6186 (push_to_top_level) 2545576: 0.9% 0: 0.0% 528: 0.0% 0: 0.0% 28933 cp/decl.c:617 (poplevel) 0: 0.0% 0: 0.0% 2552792: 0.7% 0: 0.0% 29009 varasm.c:3699 (create_constant_pool) 2587992: 0.9% 0: 0.0% 792: 0.0% 78448: 0.5% 9806 tree-ssa.c:1078 (init_tree_ssa) 376728: 0.1% 0: 0.0% 2218128: 0.6% 78632: 0.5% 9829 cfgexpand.c:2331 (expand_call_stmt) 2599224: 0.9% 0: 0.0% 0: 0.0% 32: 0.0% 42777 cp/decl.c:13880 (save_function_data) 0: 0.0% 0: 0.0% 2627472: 0.8% 138288: 0.9% 17286 tree.c:10639 (build_call_1) 1363768: 0.5% 0: 0.0% 1299008: 0.4% 32: 0.0% 43341 emit-rtl.c:3918 (make_call_insn_raw) 2721816: 0.9% 0: 0.0% 2520: 0.0% 0: 0.0% 37838 cp/typeck.c:5346 (build_nop) 1122592: 0.4% 0: 0.0% 1636832: 0.5% 0: 0.0% 86232 config/i386/i386.c:25677 (ix86_init_machine_stat 112: 0.0% 0: 0.0% 2811312: 0.8% 0: 0.0% 25102 toplev.c:1036 (realloc_for_line_map) 0: 0.0% 1407064: 0.5% 2830560: 0.8% 100808: 0.7% 8132 cp/name-lookup.c:2011 (set_identifier_type_value 2830640: 1.0% 0: 0.0% 2000: 0.0% 0: 0.0% 70816 tree.c:1207 (copy_list) 0: 0.0% 0: 0.0% 2886952: 0.8% 0: 0.0% 22676 dwarf2cfi.c:463 (copy_cfi_row) 3007840: 1.0% 0: 0.0% 0: 0.0% 0: 0.0% 75196 cp/decl.c:13462 (start_preparsed_function) 0: 0.0% 0: 0.0% 3012120: 0.9% 0: 0.0% 25101 cp/class.c:3150 (maybe_add_class_template_decl_l 0: 0.0% 0: 0.0% 3035280: 0.9% 0: 0.0% 75882 tree-iterator.c:220 (tsi_link_after) 1744560: 0.6% 0: 0.0% 1300296: 0.4% 0: 0.0% 126869 cfg.c:222 (connect_src) 1216520: 0.4% 0: 0.0% 1963080: 0.6% 0: 0.0% 79490 stringpool.c:88 (alloc_node) 2376: 0.0% 0: 0.0% 3221504: 0.9% 0: 0.0% 36635 cp/pt.c:318 (build_template_info) 463200: 0.2% 0: 0.0% 2893376: 0.8% 0: 0.0% 104893 cfg.c:232 (connect_dest) 1250464: 0.4% 42664: 0.0% 2113600: 0.6% 0: 0.0% 83619 tree.c:11521 (create_artificial_label) 1442048: 0.5% 0: 0.0% 2250368: 0.7% 0: 0.0% 28847 cgraph.c:851 (create_edge) 0: 0.0% 0: 0.0% 3734536: 1.1% 0: 0.0% 35909 cp/decl.c:13563 (start_preparsed_function) 0: 0.0% 0: 0.0% 3815352: 1.1% 200808: 1.3% 25101 tree.c:7751 (build_pointer_type_for_mode) 840: 0.0% 0: 0.0% 3835440: 1.1% 0: 0.0% 22835 stringpool.c:66 (stringpool_ggc_alloc) 48305: 0.0% 0: 0.0% 4088082: 1.2% 485259: 3.2% 40141 cp/pt.c:19087 (get_partial_spec_bindings) 4147368: 1.4% 0: 0.0% 0: 0.0% 0: 0.0% 83449 cp/decl2.c:215 (cp_build_parm_decl) 412800: 0.1% 0: 0.0% 3781120: 1.1% 0: 0.0% 32765 function.c:4768 (allocate_struct_function) 168: 0.0% 0: 0.0% 4216968: 1.2% 0: 0.0% 25102 fold-const.c:7820 (build_fold_addr_expr_with_typ 2039616: 0.7% 0: 0.0% 2351104: 0.7% 0: 0.0% 137210 cfg.c:286 (unchecked_make_edge) 895832: 0.3% 1007496: 0.3% 3570896: 1.0% 0: 0.0% 97754 cp/pt.c:3636 (build_template_parm_index) 1082304: 0.4% 0: 0.0% 3469536: 1.0% 0: 0.0% 94830 config/i386/i386.c:17431 (ix86_expand_move) 4572696: 1.5% 0: 0.0% 3456: 0.0% 0: 0.0% 190673 rtl.c:317 (copy_rtx) 4680888: 1.6% 0: 0.0% 2400: 0.0% 0: 0.0% 195137 emit-rtl.c:366 (set_mem_attrs) 4682880: 1.6% 0: 0.0% 45440: 0.0% 0: 0.0% 118208 cp/lex.c:618 (cxx_dup_lang_specific_decl) 456: 0.0% 1728: 0.0% 5120712: 1.5% 155488: 1.0% 127061 function.c:5591 (record_insns) 5174136: 1.8% 0: 0.0% 528: 0.0% 156808: 1.0% 19601 tree.c:1476 (wide_int_to_tree) 0: 0.0% 0: 0.0% 5182064: 1.5% 38216: 0.3% 6332 tree.c:8190 (build_function_type) 2990400: 1.0% 0: 0.0% 2348640: 0.7% 0: 0.0% 31780 tree.c:1211 (copy_list) 350592: 0.1% 0: 0.0% 5003896: 1.4% 0: 0.0% 42186 cp/lex.c:682 (cxx_make_type) 44352: 0.0% 0: 0.0% 5370288: 1.6% 0: 0.0% 32230 cp/pt.c:8460 (push_tinst_level_loc) 5573664: 1.9% 0: 0.0% 140928: 0.0% 0: 0.0% 178581 cp/call.c:2997 (add_template_candidate_real) 6035280: 2.0% 0: 0.0% 0: 0.0% 8: 0.0% 129290 gimple.c:237 (gimple_build_call_1) 1412352: 0.5% 0: 0.0% 4815432: 1.4% 186488: 1.2% 41524 tree.c:7818 (build_reference_type_for_mode) 2352: 0.0% 0: 0.0% 6298656: 1.8% 0: 0.0% 37506 cp/lex.c:549 (build_lang_decl_loc) 766280: 0.3% 236016: 0.1% 5588968: 1.6% 0: 0.0% 41298 cgraph.h:2488 (allocate_cgraph_symbol) 0: 0.0% 0: 0.0% 6808648: 2.0% 0: 0.0% 17369 cp/name-lookup.c:6132 (push_to_top_level) 6942480: 2.3% 0: 0.0% 1440: 0.0% 694392: 4.6% 28933 cfg.c:148 (alloc_block) 3165968: 1.1% 0: 0.0% 4424680: 1.3% 0: 0.0% 72987 cp/name-lookup.c:1575 (begin_scope) 7722848: 2.6% 0: 0.0% 5712: 0.0% 0: 0.0% 69005 tree-inline.c:5007 (copy_tree_r) 1739032: 0.6% 0: 0.0% 6854296: 2.0% 0: 0.0% 225091 gimple-expr.c:486 (create_tmp_var_raw) 3137184: 1.1% 0: 0.0% 5774976: 1.7% 0: 0.0% 61890 tree.c:8339 (build_method_type_directly) 2866920: 1.0% 0: 0.0% 6848856: 2.0% 0: 0.0% 57832 emit-rtl.c:3941 (make_note_raw) 9722328: 3.3% 0: 0.0% 2408: 0.0% 0: 0.0% 173656 emit-rtl.c:453 (gen_rtx_EXPR_LIST) 9863616: 3.3% 0: 0.0% 2472: 0.0% 0: 0.0% 411087 emit-rtl.c:765 (gen_rtx_MEM) 9576072: 3.2% 0: 0.0% 331824: 0.1% 0: 0.0% 412829 tree-ssanames.c:166 (make_ssa_name_fn) 1862856: 0.6% 0: 0.0% 8313120: 2.4% 0: 0.0% 141333 cp/pt.c:11020 (tsubst_decl) 9984: 0.0% 0: 0.0% 10270464: 3.0% 0: 0.0% 80316 emit-rtl.c:440 (gen_raw_REG) 10388280: 3.5% 0: 0.0% 7488: 0.0% 0: 0.0% 433157 dwarf2cfi.c:466 (copy_cfi_row) 10828224: 3.7% 0: 0.0% 0: 0.0% 0: 0.0% 75196 tree.c:6573 (build_distinct_type_copy) 92232: 0.0% 0: 0.0% 11749248: 3.4% 0: 0.0% 70485 cp/pt.c:3696 (reduce_template_parm_level) 3376992: 1.1% 0: 0.0% 8647648: 2.5% 0: 0.0% 79136 tree-ssanames.c:102 (init_ssanames) 0: 0.0% 2262528: 0.8% 12834816: 3.7% 5032448: 33.5% 9829 cp/lex.c:674 (copy_type) 3732624: 1.3% 0: 0.0% 9547104: 2.8% 0: 0.0% 79046 tree-ssa-operands.c:293 (ssa_operand_alloc) 0: 0.0% 3709952: 1.3% 14661632: 4.2% 0: 0.0% 11545 cp/pt.c:7048 (coerce_template_parms) 14433896: 4.9% 0: 0.0% 608864: 0.2% 0: 0.0% 359052 cp/pt.c:10235 (tsubst_template_args) 13043072: 4.4% 0: 0.0% 3189640: 0.9% 0: 0.0% 378301 cp/parser.c:661 (cp_lexer_new_main) 0: 0.0% 16252944: 5.5% 16777224: 4.9% 24: 0.0% 6 cp/lex.c:636 (copy_decl) 1680: 0.0% 0: 0.0% 17675672: 5.1% 0: 0.0% 94930 emit-rtl.c:3846 (make_insn_raw) 18885184: 6.4% 0: 0.0% 11264: 0.0% 0: 0.0% 295257 emit-rtl.c:5706 (init_emit) 25240800: 8.5% 247000: 0.1% 5200: 0.0% 5412360: 36.1% 9805 -------------------------------------------------------------------------------------------------------------------------------- Total 295529288:100.0% 296440248:100.0% 345547514:100.0% 15003930:100.0% 10199015 -------------------------------------------------------------------------------------------------------------------------------- Alias oracle query stats: refs_may_alias_p: 0 disambiguations, 0 queries ref_maybe_used_by_call_p: 0 disambiguations, 0 queries call_may_clobber_ref_p: 0 disambiguations, 0 queries PTA query stats: pt_solution_includes: 0 disambiguations, 0 queries pt_solutions_intersect: 0 disambiguations, 0 queries
On 05/15/2015 08:38 AM, Martin Liška wrote: > Hello. > > Following patch attempts to rewrite memory reports for GCC's internal > allocations > so that it uses a new template type. The type shares parts which are > currently duplicated, > adds support for special 'counters' and introduces new support for > hash-{set,map,table}. > > Transformation of the current code is a bit tricky as we internally used > hash-table as main > data structure which takes care of location-related allocations. As I > want to add support even > for hash tables (and all derived types), header files inclusion and > forward declaration is utilized. > > Feel free to comment the patch, as well as missing features one may want > to track by location sensitive > memory allocation. > > Attachment contains sample output taken from tramp3d-v4.cpp. > > Thanks, > Martin > > 0001-New-memory-allocation-statistics-infrastructure.patch > > > From 7a9048ef36bddf17209acadc1dcab9fc48a7fd63 Mon Sep 17 00:00:00 2001 > From: mliska<mliska@suse.cz> > Date: Tue, 5 May 2015 11:34:16 +0200 > Subject: [PATCH] New memory allocation statistics infrastructure. > > gcc/ChangeLog: > > 2015-05-05 Martin Liska<mliska@suse.cz> > > * Makefile.in: Add additional dependencies related to memory report > enhancement. > * alloc-pool.c (allocate_pool_descriptor): Use new ctor. > * bitmap.c (struct bitmap_descriptor_d): Remove. > (struct loc): Likewise. > (struct bitmap_desc_hasher): Likewise. > (bitmap_desc_hasher::hash): Likewise. > (bitmap_desc_hasher::equal): Likewise. > (get_bitmap_descriptor): Likewise. > (bitmap_register): User new memory descriptor API. > (register_overhead): Likewise. > (bitmap_find_bit): Register nsearches and search_iter statistics. > (struct bitmap_output_info): Remove. > (print_statistics): Likewise. > (dump_bitmap_statistics): Use new memory descriptor. > * bitmap.h (struct bitmap_usage): New class. > * genmatch.c: Extend header file inclusion. > * genpreds.c: Likewise. > * ggc-common.c (struct ggc_usage): New class. > (struct ggc_loc_desc_hasher): Remove. > (ggc_loc_desc_hasher::hash): Likewise. > (ggc_loc_desc_hasher::equal): Likewise. > (struct ggc_ptr_hash_entry): Likewise. > (struct ptr_hash_hasher): Likewise. > (ptr_hash_hasher::hash): Likewise. > (ptr_hash_hasher::equal): Likewise. > (make_loc_descriptor): Likewise. > (ggc_prune_ptr): Likewise. > (dump_ggc_loc_statistics): Use new memory descriptor. > (ggc_record_overhead): Likewise. > (ggc_free_overhead): Likewise. > (final_cmp_statistic): Remove. > (cmp_statistic): Likewise. > (ggc_add_statistics): Liekwise. > (ggc_prune_overhead_list): Likewise. > * hash-map-traits.h: New file. > * hash-map.h (struct default_hashmap_traits): Move the traits to a > separate header file. > * hash-set.h: Pass memory statistics info to ctor. > * hash-table.c (void dump_hash_table_loc_statistics): New function. > * hash-table.h (hash_table::hash_table): Add new ctor arguments. > (hash_table::~hash_table): Register memory release operation. > (hash_table::alloc_entries): Handle memory allocation operation. > (hash_table::expand): Likewise. > * inchash.c (iterative_hash_hashval_t): Move implementation to header > file. > (iterative_hash_host_wide_int): Likewise. > * inchash.h (class hash): Likewise. > * mem-stats-traits.h: New file. > * mem-stats.h: New file. > (mem_location): Add new class. > (mem_usage): Likewise. > (mem_alloc_description): Likewise. > * sese.c: Add new header file inclusision. > * toplev.c (dump_memory_report): Add report for hash_table, hash_map > and hash_set. > * tree-sra.c: Add new header file inclusision. > * vec.c (struct vec_descriptor): Remove. > (hash_descriptor): Likewise. > (struct vec_usage): Likewise. > (struct ptr_hash_entry): Likewise. > (hash_ptr): Likewise. > (eq_ptr): Likewise. > (vec_prefix::register_overhead): Use new memory descriptor API. > (vec_prefix::release_overhead): Likewise. > (add_statistics): Remove. > (dump_vec_loc_statistics): Use new memory descriptor API. > * vec.h (struct vec_prefix): Likewise. > (va_heap::reserve): Likewise. > (va_heap::release): Likewise. Please check for overly-long lines. I spotted several, but didn't keep them handy as I was working through the patch. ISTM that using the script from contrib/ might help identify the overly long lines. Overall it looks good -- I like the consistency in reporting. I think if there's things missing, we ought to be able to add them incrementally. My recommendation would be to take care of the line wrapping issues, run it through the usual bootstrap and testing cycles and commit assuming nothing is amiss. jeff
Martin, The following change: @@ -2655,10 +2655,10 @@ s-iov: build/gcov-iov$(build_exeext) $(BASEVER) $(DEVPHASE) GCOV_OBJS = gcov.o gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS) - +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@ + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) build/hash-table.o ggc-none.o $(LIBS) -o $@ seem to cause canadian cross build failure for arm and aarch64 on x86_64 as build/hash-table.o and ggc-none.o are not built by the same compiler? arm-none-linux-gnueabi-g++ -no-pie -g -O2 -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing +-Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wn build/hash-table.o ggc-none.o libcommon.a ../libcpp/libcpp.a ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a .. +/libdecnumber/libdecnumber.a -o gcov build/hash-table.o: file not recognized: File format not recognized collect2: error: ld returned 1 exit status make[1]: *** [gcov] Error 1 Should it be: - +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@ + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) hash-table.o ggc-none.o $(LIBS) -o $@ instead? VP. On 15/05/15 15:38, Martin Liška wrote: > Hello. > > Following patch attempts to rewrite memory reports for GCC's internal allocations > so that it uses a new template type. The type shares parts which are currently duplicated, > adds support for special 'counters' and introduces new support for hash-{set,map,table}. > > Transformation of the current code is a bit tricky as we internally used hash-table as main > data structure which takes care of location-related allocations. As I want to add support even > for hash tables (and all derived types), header files inclusion and forward declaration is utilized. > > Feel free to comment the patch, as well as missing features one may want to track by location sensitive > memory allocation. > > Attachment contains sample output taken from tramp3d-v4.cpp. > > Thanks, > Martin >
On 05/29/2015 06:09 PM, Vidya Praveen wrote: > > Martin, > > The following change: > > @@ -2655,10 +2655,10 @@ s-iov: build/gcov-iov$(build_exeext) $(BASEVER) $(DEVPHASE) > > GCOV_OBJS = gcov.o > gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS) > - +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@ > + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) build/hash-table.o ggc-none.o $(LIBS) -o $@ > > > seem to cause canadian cross build failure for arm and aarch64 on x86_64 as > build/hash-table.o and ggc-none.o are not built by the same compiler? > > arm-none-linux-gnueabi-g++ -no-pie -g -O2 -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing > +-Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wn > build/hash-table.o ggc-none.o libcommon.a ../libcpp/libcpp.a ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a .. > +/libdecnumber/libdecnumber.a -o gcov > build/hash-table.o: file not recognized: File format not recognized > collect2: error: ld returned 1 exit status > make[1]: *** [gcov] Error 1 > > > Should it be: > > - +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@ > + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) hash-table.o ggc-none.o $(LIBS) -o $@ > > instead? Hello Vidya. Thanks for pointing out. To be honest, I'm not a build system guru and it's hard for me to verify that the change you suggest is the correct. May I please ask you for sending a patch to mailing? Thanks, Martin > > VP. > > > On 15/05/15 15:38, Martin Liška wrote: >> Hello. >> >> Following patch attempts to rewrite memory reports for GCC's internal allocations >> so that it uses a new template type. The type shares parts which are currently duplicated, >> adds support for special 'counters' and introduces new support for hash-{set,map,table}. >> >> Transformation of the current code is a bit tricky as we internally used hash-table as main >> data structure which takes care of location-related allocations. As I want to add support even >> for hash tables (and all derived types), header files inclusion and forward declaration is utilized. >> >> Feel free to comment the patch, as well as missing features one may want to track by location sensitive >> memory allocation. >> >> Attachment contains sample output taken from tramp3d-v4.cpp. >> >> Thanks, >> Martin >> >
On Mon, Jun 1, 2015 at 1:38 PM, Martin Liška <mliska@suse.cz> wrote: > On 05/29/2015 06:09 PM, Vidya Praveen wrote: >> >> Martin, >> >> The following change: >> >> @@ -2655,10 +2655,10 @@ s-iov: build/gcov-iov$(build_exeext) $(BASEVER) $(DEVPHASE) >> >> GCOV_OBJS = gcov.o >> gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS) >> - +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@ >> + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) build/hash-table.o ggc-none.o $(LIBS) -o $@ >> >> >> seem to cause canadian cross build failure for arm and aarch64 on x86_64 as >> build/hash-table.o and ggc-none.o are not built by the same compiler? >> >> arm-none-linux-gnueabi-g++ -no-pie -g -O2 -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing >> +-Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wn >> build/hash-table.o ggc-none.o libcommon.a ../libcpp/libcpp.a ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a .. >> +/libdecnumber/libdecnumber.a -o gcov >> build/hash-table.o: file not recognized: File format not recognized >> collect2: error: ld returned 1 exit status >> make[1]: *** [gcov] Error 1 >> >> >> Should it be: >> >> - +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@ >> + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) hash-table.o ggc-none.o $(LIBS) -o $@ >> >> instead? > > Hello Vidya. > > Thanks for pointing out. To be honest, I'm not a build system guru and it's hard for me to verify > that the change you suggest is the correct. > > May I please ask you for sending a patch to mailing? gcov isn't a build but a host tool so the patch looks good to me. Richard. > Thanks, > Martin > >> >> VP. >> >> >> On 15/05/15 15:38, Martin Liška wrote: >>> Hello. >>> >>> Following patch attempts to rewrite memory reports for GCC's internal allocations >>> so that it uses a new template type. The type shares parts which are currently duplicated, >>> adds support for special 'counters' and introduces new support for hash-{set,map,table}. >>> >>> Transformation of the current code is a bit tricky as we internally used hash-table as main >>> data structure which takes care of location-related allocations. As I want to add support even >>> for hash tables (and all derived types), header files inclusion and forward declaration is utilized. >>> >>> Feel free to comment the patch, as well as missing features one may want to track by location sensitive >>> memory allocation. >>> >>> Attachment contains sample output taken from tramp3d-v4.cpp. >>> >>> Thanks, >>> Martin >>> >> >
On Thu, May 28, 2015 at 1:07 PM, Jeff Law <law@redhat.com> wrote: > On 05/28/2015 06:29 AM, Martin Liška wrote: > >>> >> >> Hello. >> >> Thank you for pointing about missing copyright. >> Following patch adds that. >> >> Ready for trunk? > > Yes. > jeff > It looks like this patch was never committed. gcc/mem-stats.h and gcc/mem-stats-traits.h don't yet have copyright headers.
On 01/29/2016 05:24 PM, Patrick Palka wrote: > On Thu, May 28, 2015 at 1:07 PM, Jeff Law <law@redhat.com> wrote: >> On 05/28/2015 06:29 AM, Martin Liška wrote: >> >>>> >>> >>> Hello. >>> >>> Thank you for pointing about missing copyright. >>> Following patch adds that. >>> >>> Ready for trunk? >> >> Yes. >> jeff >> > > It looks like this patch was never committed. gcc/mem-stats.h and > gcc/mem-stats-traits.h don't yet have copyright headers. > Hi. Thanks for pointing out, I've just installed the patch (w/ adding 2016 year to copyright header). Martin
From 7a9048ef36bddf17209acadc1dcab9fc48a7fd63 Mon Sep 17 00:00:00 2001 From: mliska <mliska@suse.cz> Date: Tue, 5 May 2015 11:34:16 +0200 Subject: [PATCH] New memory allocation statistics infrastructure. gcc/ChangeLog: 2015-05-05 Martin Liska <mliska@suse.cz> * Makefile.in: Add additional dependencies related to memory report enhancement. * alloc-pool.c (allocate_pool_descriptor): Use new ctor. * bitmap.c (struct bitmap_descriptor_d): Remove. (struct loc): Likewise. (struct bitmap_desc_hasher): Likewise. (bitmap_desc_hasher::hash): Likewise. (bitmap_desc_hasher::equal): Likewise. (get_bitmap_descriptor): Likewise. (bitmap_register): User new memory descriptor API. (register_overhead): Likewise. (bitmap_find_bit): Register nsearches and search_iter statistics. (struct bitmap_output_info): Remove. (print_statistics): Likewise. (dump_bitmap_statistics): Use new memory descriptor. * bitmap.h (struct bitmap_usage): New class. * genmatch.c: Extend header file inclusion. * genpreds.c: Likewise. * ggc-common.c (struct ggc_usage): New class. (struct ggc_loc_desc_hasher): Remove. (ggc_loc_desc_hasher::hash): Likewise. (ggc_loc_desc_hasher::equal): Likewise. (struct ggc_ptr_hash_entry): Likewise. (struct ptr_hash_hasher): Likewise. (ptr_hash_hasher::hash): Likewise. (ptr_hash_hasher::equal): Likewise. (make_loc_descriptor): Likewise. (ggc_prune_ptr): Likewise. (dump_ggc_loc_statistics): Use new memory descriptor. (ggc_record_overhead): Likewise. (ggc_free_overhead): Likewise. (final_cmp_statistic): Remove. (cmp_statistic): Likewise. (ggc_add_statistics): Liekwise. (ggc_prune_overhead_list): Likewise. * hash-map-traits.h: New file. * hash-map.h (struct default_hashmap_traits): Move the traits to a separate header file. * hash-set.h: Pass memory statistics info to ctor. * hash-table.c (void dump_hash_table_loc_statistics): New function. * hash-table.h (hash_table::hash_table): Add new ctor arguments. (hash_table::~hash_table): Register memory release operation. (hash_table::alloc_entries): Handle memory allocation operation. (hash_table::expand): Likewise. * inchash.c (iterative_hash_hashval_t): Move implementation to header file. (iterative_hash_host_wide_int): Likewise. * inchash.h (class hash): Likewise. * mem-stats-traits.h: New file. * mem-stats.h: New file. (mem_location): Add new class. (mem_usage): Likewise. (mem_alloc_description): Likewise. * sese.c: Add new header file inclusision. * toplev.c (dump_memory_report): Add report for hash_table, hash_map and hash_set. * tree-sra.c: Add new header file inclusision. * vec.c (struct vec_descriptor): Remove. (hash_descriptor): Likewise. (struct vec_usage): Likewise. (struct ptr_hash_entry): Likewise. (hash_ptr): Likewise. (eq_ptr): Likewise. (vec_prefix::register_overhead): Use new memory descriptor API. (vec_prefix::release_overhead): Likewise. (add_statistics): Remove. (dump_vec_loc_statistics): Use new memory descriptor API. * vec.h (struct vec_prefix): Likewise. (va_heap::reserve): Likewise. (va_heap::release): Likewise. --- gcc/Makefile.in | 10 +- gcc/alloc-pool.c | 4 +- gcc/bitmap.c | 178 ++-------------- gcc/bitmap.h | 56 ++++++ gcc/genmatch.c | 1 + gcc/genpreds.c | 1 + gcc/ggc-common.c | 378 +++++++++++++--------------------- gcc/hash-map-traits.h | 104 ++++++++++ gcc/hash-map.h | 92 +-------- gcc/hash-set.h | 3 +- gcc/hash-table.c | 13 +- gcc/hash-table.h | 48 ++++- gcc/inchash.c | 51 ----- gcc/inchash.h | 59 +++++- gcc/mem-stats-traits.h | 20 ++ gcc/mem-stats.h | 535 +++++++++++++++++++++++++++++++++++++++++++++++++ gcc/sese.c | 1 + gcc/toplev.c | 1 + gcc/tree-sra.c | 1 + gcc/vec.c | 277 +++++++++---------------- gcc/vec.h | 14 +- 21 files changed, 1115 insertions(+), 732 deletions(-) create mode 100644 gcc/hash-map-traits.h create mode 100644 gcc/mem-stats-traits.h create mode 100644 gcc/mem-stats.h diff --git a/gcc/Makefile.in b/gcc/Makefile.in index ab9b637..aa628cb 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1032,7 +1032,7 @@ BUILD_LIBS = $(BUILD_LIBIBERTY) BUILD_RTL = build/rtl.o build/read-rtl.o build/ggc-none.o \ build/vec.o build/min-insn-modes.o build/gensupport.o \ - build/print-rtl.o + build/print-rtl.o build/hash-table.o BUILD_MD = build/read-md.o BUILD_ERRORS = build/errors.o @@ -1505,7 +1505,7 @@ OBJS = \ # Objects in libcommon.a, potentially used by all host binaries and with # no target dependencies. OBJS-libcommon = diagnostic.o diagnostic-color.o pretty-print.o intl.o \ - vec.o input.o version.o + vec.o input.o version.o hash-table.o ggc-none.o # Objects in libcommon-target.a, used by drivers and by the core # compiler and containing target-dependent code. @@ -1941,7 +1941,7 @@ gcc-nm.c: gcc-ar.c cp $^ $@ COLLECT2_OBJS = collect2.o collect2-aix.o tlink.o vec.o ggc-none.o \ - collect-utils.o file-find.o + collect-utils.o file-find.o hash-table.o COLLECT2_LIBS = @COLLECT2_LIBS@ collect2$(exeext): $(COLLECT2_OBJS) $(LIBDEPS) # Don't try modifying collect2 (aka ld) in place--it might be linking this. @@ -2655,10 +2655,10 @@ s-iov: build/gcov-iov$(build_exeext) $(BASEVER) $(DEVPHASE) GCOV_OBJS = gcov.o gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS) - +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@ + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_OBJS) build/hash-table.o ggc-none.o $(LIBS) -o $@ GCOV_DUMP_OBJS = gcov-dump.o gcov-dump$(exeext): $(GCOV_DUMP_OBJS) $(LIBDEPS) - +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_DUMP_OBJS) \ + +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) $(GCOV_DUMP_OBJS) build/hash-table.o build/ggc-none.o\ $(LIBS) -o $@ GCOV_TOOL_DEP_FILES = $(srcdir)/../libgcc/libgcov-util.c gcov-io.c $(GCOV_IO_H) \ diff --git a/gcc/alloc-pool.c b/gcc/alloc-pool.c index 81909d8..e34acdb 100644 --- a/gcc/alloc-pool.c +++ b/gcc/alloc-pool.c @@ -91,7 +91,9 @@ static struct alloc_pool_descriptor * allocate_pool_descriptor (const char *name) { if (!alloc_pool_hash) - alloc_pool_hash = new hash_map<const char *, alloc_pool_descriptor> (10); + alloc_pool_hash = new hash_map<const char *, alloc_pool_descriptor> (10, + false, + false); return &alloc_pool_hash->get_or_insert (name); } diff --git a/gcc/bitmap.c b/gcc/bitmap.c index 66066a6..2b465a9 100644 --- a/gcc/bitmap.c +++ b/gcc/bitmap.c @@ -25,112 +25,26 @@ along with GCC; see the file COPYING3. If not see #include "bitmap.h" #include "hash-table.h" #include "vec.h" +#include "inchash.h" +#include "mem-stats.h" +#include "hash-map.h" -/* Store information about each particular bitmap, per allocation site. */ -struct bitmap_descriptor_d -{ - int id; - const char *function; - const char *file; - int line; - int created; - uint64_t allocated; - uint64_t peak; - uint64_t current; - uint64_t nsearches; - uint64_t search_iter; -}; - -typedef struct bitmap_descriptor_d *bitmap_descriptor; -typedef const struct bitmap_descriptor_d *const_bitmap_descriptor; - -/* Next available unique id number for bitmap desciptors. */ -static int next_bitmap_desc_id = 0; - -/* Vector mapping descriptor ids to descriptors. */ -static vec<bitmap_descriptor> bitmap_descriptors; - -/* Hashtable helpers. */ - -struct loc -{ - const char *file; - const char *function; - int line; -}; - -struct bitmap_desc_hasher : typed_noop_remove <bitmap_descriptor_d> -{ - typedef bitmap_descriptor_d *value_type; - typedef loc *compare_type; - static inline hashval_t hash (const bitmap_descriptor_d *); - static inline bool equal (const bitmap_descriptor_d *, const loc *); -}; - -inline hashval_t -bitmap_desc_hasher::hash (const bitmap_descriptor_d *d) -{ - return htab_hash_pointer (d->file) + d->line; -} - -inline bool -bitmap_desc_hasher::equal (const bitmap_descriptor_d *d, const loc *l) -{ - return d->file == l->file && d->function == l->function && d->line == l->line; -} - -/* Hashtable mapping bitmap names to descriptors. */ -static hash_table<bitmap_desc_hasher> *bitmap_desc_hash; - -/* For given file and line, return descriptor, create new if needed. */ -static bitmap_descriptor -get_bitmap_descriptor (const char *file, int line, const char *function) -{ - bitmap_descriptor_d **slot; - struct loc loc; - - loc.file = file; - loc.function = function; - loc.line = line; - - if (!bitmap_desc_hash) - bitmap_desc_hash = new hash_table<bitmap_desc_hasher> (10); - - slot - = bitmap_desc_hash->find_slot_with_hash (&loc, - htab_hash_pointer (file) + line, - INSERT); - if (*slot) - return *slot; - - *slot = XCNEW (struct bitmap_descriptor_d); - bitmap_descriptors.safe_push (*slot); - (*slot)->id = next_bitmap_desc_id++; - (*slot)->file = file; - (*slot)->function = function; - (*slot)->line = line; - return *slot; -} +/* Memory allocation statistics purpose instance. */ +mem_alloc_description<bitmap_usage> bitmap_mem_desc; /* Register new bitmap. */ void bitmap_register (bitmap b MEM_STAT_DECL) { - bitmap_descriptor desc = get_bitmap_descriptor (ALONE_FINAL_PASS_MEM_STAT); - desc->created++; - b->descriptor_id = desc->id; + bitmap_mem_desc.register_descriptor (b, BITMAP, false FINAL_PASS_MEM_STAT); } /* Account the overhead. */ static void register_overhead (bitmap b, int amount) { - bitmap_descriptor desc = bitmap_descriptors[b->descriptor_id]; - desc->current += amount; - if (amount > 0) - desc->allocated += amount; - if (desc->peak < desc->current) - desc->peak = desc->current; + if (bitmap_mem_desc.contains_descriptor_for_instance (b)) + bitmap_mem_desc.register_instance_overhead (amount, b); } /* Global data */ @@ -579,10 +493,14 @@ bitmap_find_bit (bitmap head, unsigned int bit) && head->first->next == NULL) return NULL; + /* Usage can be NULL due to allocated bitmaps for which we do not + call initialize function. */ + bitmap_usage *usage = bitmap_mem_desc.get_descriptor_for_instance (head); + /* This bitmap has more than one element, and we're going to look through the elements list. Count that as a search. */ - if (GATHER_STATISTICS) - bitmap_descriptors[head->descriptor_id]->nsearches++; + if (GATHER_STATISTICS && usage) + usage->m_nsearches++; if (head->indx < indx) /* INDX is beyond head->indx. Search from head->current @@ -591,8 +509,8 @@ bitmap_find_bit (bitmap head, unsigned int bit) element->next != 0 && element->indx < indx; element = element->next) { - if (GATHER_STATISTICS) - bitmap_descriptors[head->descriptor_id]->search_iter++; + if (GATHER_STATISTICS && usage) + usage->m_search_iter++; } else if (head->indx / 2 < indx) @@ -602,8 +520,8 @@ bitmap_find_bit (bitmap head, unsigned int bit) element->prev != 0 && element->indx > indx; element = element->prev) { - if (GATHER_STATISTICS) - bitmap_descriptors[head->descriptor_id]->search_iter++; + if (GATHER_STATISTICS && usage) + usage->m_search_iter++; } else @@ -612,9 +530,9 @@ bitmap_find_bit (bitmap head, unsigned int bit) for (element = head->first; element->next != 0 && element->indx < indx; element = element->next) - if (GATHER_STATISTICS) + if (GATHER_STATISTICS && usage) { - bitmap_descriptors[head->descriptor_id]->search_iter++; + usage->m_search_iter++; } /* `element' is the nearest to the one we want. If it's not the one we @@ -2145,68 +2063,14 @@ bitmap_print (FILE *file, const_bitmap head, const char *prefix, fputs (suffix, file); } - -/* Used to accumulate statistics about bitmap sizes. */ -struct bitmap_output_info -{ - uint64_t size; - uint64_t count; -}; - -/* Called via hash_table::traverse. Output bitmap descriptor pointed out by - SLOT and update statistics. */ -int -print_statistics (bitmap_descriptor_d **slot, bitmap_output_info *i) -{ - bitmap_descriptor d = *slot; - char s[4096]; - - if (d->allocated) - { - const char *s1 = d->file; - const char *s2; - while ((s2 = strstr (s1, "gcc/"))) - s1 = s2 + 4; - sprintf (s, "%s:%i (%s)", s1, d->line, d->function); - s[41] = 0; - fprintf (stderr, - "%-41s %9u %15" PRId64" %15" PRId64" %15" PRId64 - " %10" PRId64" %10" PRId64"\n", - s, d->created, - d->allocated, d->peak, d->current, - d->nsearches, d->search_iter); - i->size += d->allocated; - i->count += d->created; - } - return 1; -} - /* Output per-bitmap memory usage statistics. */ void dump_bitmap_statistics (void) { - struct bitmap_output_info info; - if (! GATHER_STATISTICS) return; - if (!bitmap_desc_hash) - return; - - fprintf (stderr, - "\n%-41s %9s %15s %15s %15s %10s %10s\n", - "Bitmap", "Overall", - "Allocated", "Peak", "Leak", - "searched", "search_itr"); - fprintf (stderr, "---------------------------------------------------------------------------------\n"); - info.count = 0; - info.size = 0; - bitmap_desc_hash->traverse <bitmap_output_info *, print_statistics> (&info); - fprintf (stderr, "---------------------------------------------------------------------------------\n"); - fprintf (stderr, - "%-41s %9" PRId64" %15" PRId64"\n", - "Total", info.count, info.size); - fprintf (stderr, "---------------------------------------------------------------------------------\n"); + bitmap_mem_desc.dump (BITMAP); } DEBUG_FUNCTION void diff --git a/gcc/bitmap.h b/gcc/bitmap.h index 3f9bbf3..40562f6 100644 --- a/gcc/bitmap.h +++ b/gcc/bitmap.h @@ -130,6 +130,62 @@ along with GCC; see the file COPYING3. If not see #include "hashtab.h" #include "statistics.h" #include "obstack.h" +#include "mem-stats.h" + +/* Bitmap memory usage. */ +struct bitmap_usage: public mem_usage +{ + /* Default contructor. */ + bitmap_usage (): m_nsearches (0), m_search_iter (0) {} + /* Constructor. */ + bitmap_usage (size_t allocated, size_t times, size_t peak, + uint64_t nsearches, uint64_t search_iter) + : mem_usage (allocated, times, peak), + m_nsearches (nsearches), m_search_iter (search_iter) {} + + /* Sum the usage with SECOND usage. */ + bitmap_usage operator+ (const bitmap_usage &second) + { + return bitmap_usage (m_allocated + second.m_allocated, + m_times + second.m_times, + m_peak + second.m_peak, + m_nsearches + second.m_nsearches, + m_search_iter + second.m_search_iter); + } + + /* Dump usage coupled to LOC location, where TOTAL is sum of all rows. */ + inline void dump (mem_location *loc, mem_usage &total) const + { + char s[4096]; + sprintf (s, "%s:%i (%s)", loc->get_trimmed_filename (), + loc->m_line, loc->m_function); + + s[48] = '\0'; + + fprintf (stderr, "%-48s %10li:%5.1f%%%10li%10li:%5.1f%%%12li%12li%10s\n", s, + (long)m_allocated, get_percent (m_allocated, total.m_allocated), + (long)m_peak, (long)m_times, + get_percent (m_times, total.m_times), + (long)m_nsearches, (long)m_search_iter, + loc->m_ggc ? "ggc" : "heap"); + } + + /* Dump header with NAME. */ + static inline void dump_header (const char *name) + { + fprintf (stderr, "%-48s %11s%16s%17s%12s%12s%10s\n", name, "Leak", "Peak", + "Times", "N searches", "Search iter", "Type"); + print_dash_line (); + } + + /* Number search operations. */ + uint64_t m_nsearches; + /* Number of search iterations. */ + uint64_t m_search_iter; +}; + +/* Bitmap memory description. */ +extern mem_alloc_description<bitmap_usage> bitmap_mem_desc; /* Fundamental storage type for bitmap. */ diff --git a/gcc/genmatch.c b/gcc/genmatch.c index fbd12a5..06f7e46 100644 --- a/gcc/genmatch.c +++ b/gcc/genmatch.c @@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see #include "errors.h" #include "hashtab.h" #include "hash-table.h" +#include "inchash.h" #include "hash-map.h" #include "hash-set.h" #include "vec.h" diff --git a/gcc/genpreds.c b/gcc/genpreds.c index 1dcb769..2c6cf5b 100644 --- a/gcc/genpreds.c +++ b/gcc/genpreds.c @@ -1515,6 +1515,7 @@ write_insn_preds_c (void) #include \"rtl.h\"\n\ #include \"hash-set.h\"\n\ #include \"machmode.h\"\n\ +#include \"hash-map.h\"\n\ #include \"vec.h\"\n\ #include \"double-int.h\"\n\ #include \"input.h\"\n\ diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c index eff326a..f74fe21 100644 --- a/gcc/ggc-common.c +++ b/gcc/ggc-common.c @@ -33,6 +33,7 @@ along with GCC; see the file COPYING3. If not see #include "plugin.h" #include "vec.h" #include "timevar.h" +#include "mem-stats.h" /* When set, ggc_collect will do collection. */ bool ggc_force_collect; @@ -830,273 +831,180 @@ init_ggc_heuristics (void) #endif } -/* Datastructure used to store per-call-site statistics. */ -struct ggc_loc_descriptor +/* GGC memory usage. */ +struct ggc_usage: public mem_usage { - const char *file; - int line; - const char *function; - int times; - size_t allocated; - size_t overhead; - size_t freed; - size_t collected; -}; + /* Default constructor. */ + ggc_usage (): m_freed (0), m_collected (0), m_overhead (0) {} + /* Constructor. */ + ggc_usage (size_t allocated, size_t times, size_t peak, + size_t freed, size_t collected, size_t overhead) + : mem_usage (allocated, times, peak), + m_freed (freed), m_collected (collected), m_overhead (overhead) {} -/* Hash table helper. */ + /* Comparison operator. */ + inline bool operator< (const ggc_usage &second) const + { + return (get_balance () == second.get_balance () ? + (m_peak == second.m_peak ? m_times < second.m_times + : m_peak < second.m_peak ) : get_balance () < second.get_balance ()); + } -struct ggc_loc_desc_hasher : typed_noop_remove <ggc_loc_descriptor> -{ - typedef ggc_loc_descriptor *value_type; - typedef ggc_loc_descriptor *compare_type; - static inline hashval_t hash (const ggc_loc_descriptor *); - static inline bool equal (const ggc_loc_descriptor *, - const ggc_loc_descriptor *); -}; + /* Register overhead of ALLOCATED and OVERHEAD bytes. */ + inline void register_overhead (size_t allocated, size_t overhead) + { + m_allocated += allocated; + m_overhead += overhead; + m_times++; + } -inline hashval_t -ggc_loc_desc_hasher::hash (const ggc_loc_descriptor *d) -{ - return htab_hash_pointer (d->function) | d->line; -} + /* Release overhead of SIZE bytes. */ + inline void release_overhead (size_t size) + { + m_freed += size; + } -inline bool -ggc_loc_desc_hasher::equal (const ggc_loc_descriptor *d, - const ggc_loc_descriptor *d2) -{ - return (d->file == d2->file && d->line == d2->line - && d->function == d2->function); -} + /* Sum the usage with SECOND usage. */ + ggc_usage operator+ (const ggc_usage &second) + { + return ggc_usage (m_allocated + second.m_allocated, + m_times + second.m_times, + m_peak + second.m_peak, + m_freed + second.m_freed, + m_collected + second.m_collected, + m_overhead + second.m_overhead); + } -/* Hashtable used for statistics. */ -static hash_table<ggc_loc_desc_hasher> *loc_hash; + /* Dump usage with PREFIX, where TOTAL is sum of all rows. */ + inline void dump (const char *prefix, ggc_usage &total) const + { + long balance = get_balance (); + fprintf (stderr, + "%-48s %10li:%5.1f%%%10li:%5.1f%%" + "%10li:%5.1f%%%10li:%5.1f%%%10li\n", + prefix, (long)m_collected, + get_percent (m_collected, total.m_collected), + (long)m_freed, get_percent (m_freed, total.m_freed), + (long)balance, get_percent(balance, total.get_balance ()), + (long)m_overhead, get_percent (m_overhead, total.m_overhead), + (long)m_times); + } -struct ggc_ptr_hash_entry -{ - void *ptr; - struct ggc_loc_descriptor *loc; - size_t size; -}; + /* Dump usage coupled to LOC location, where TOTAL is sum of all rows. */ + inline void dump (mem_location *loc, ggc_usage &total) const + { + char s[4096]; + sprintf (s, "%s:%i (%s)", loc->get_trimmed_filename (), + loc->m_line, loc->m_function); + s[48] = '\0'; -/* Helper for ptr_hash table. */ + dump (s, total); + } -struct ptr_hash_hasher : typed_noop_remove <ggc_ptr_hash_entry> -{ - typedef ggc_ptr_hash_entry *value_type; - typedef void *compare_type; - static inline hashval_t hash (const ggc_ptr_hash_entry *); - static inline bool equal (const ggc_ptr_hash_entry *, const void *); -}; + /* Dump footer. */ + inline void dump_footer () + { + print_dash_line (); + dump ("Total", *this); + print_dash_line (); + } -inline hashval_t -ptr_hash_hasher::hash (const ggc_ptr_hash_entry *d) -{ - return htab_hash_pointer (d->ptr); -} + /* Get balance which is GGC allocation leak. */ + inline long get_balance () const + { + return m_allocated + m_overhead - m_collected - m_freed; + } -inline bool -ptr_hash_hasher::equal (const ggc_ptr_hash_entry *p, const void *p2) -{ - return (p->ptr == p2); -} + typedef std::pair<mem_location *, ggc_usage *> mem_pair_t; -/* Hashtable converting address of allocated field to loc descriptor. */ -static hash_table<ptr_hash_hasher> *ptr_hash; + /* Compare wrapper used by qsort method. */ + static int compare (const void *first, const void *second) + { + const mem_pair_t f = *(const mem_pair_t *)first; + const mem_pair_t s = *(const mem_pair_t *)second; -/* Return descriptor for given call site, create new one if needed. */ -static struct ggc_loc_descriptor * -make_loc_descriptor (const char *name, int line, const char *function) -{ - struct ggc_loc_descriptor loc; - struct ggc_loc_descriptor **slot; - - loc.file = name; - loc.line = line; - loc.function = function; - if (!loc_hash) - loc_hash = new hash_table<ggc_loc_desc_hasher> (10); - - slot = loc_hash->find_slot (&loc, INSERT); - if (*slot) - return *slot; - *slot = XCNEW (struct ggc_loc_descriptor); - (*slot)->file = name; - (*slot)->line = line; - (*slot)->function = function; - return *slot; -} + return (*f.second) < (*s.second); + } + + /* Compare rows in final GGC summary dump. */ + static int compare_final (const void *first, const void *second) + { typedef std::pair<mem_location *, ggc_usage *> mem_pair_t; + + const ggc_usage *f = ((const mem_pair_t *)first)->second; + const ggc_usage *s = ((const mem_pair_t *)second)->second; + + size_t a = f->m_allocated + f->m_overhead - f->m_freed; + size_t b = s->m_allocated + s->m_overhead - s->m_freed; + + return a == b ? 0 : (a < b ? 1 : -1); + } + + /* Dump header with NAME. */ + static inline void dump_header (const char *name) + { + fprintf (stderr, "%-48s %11s%17s%17s%16s%17s\n", name, "Garbage", "Freed", + "Leak", "Overhead", "Times"); + print_dash_line (); + } + + /* Freed memory in bytes. */ + size_t m_freed; + /* Collected memory in bytes. */ + size_t m_collected; + /* Overhead memory in bytes. */ + size_t m_overhead; +}; + +/* GCC memory description. */ +static mem_alloc_description<ggc_usage> ggc_mem_desc; + +/* Dump per-site memory statistics. */ -/* Record ALLOCATED and OVERHEAD bytes to descriptor NAME:LINE (FUNCTION). */ void -ggc_record_overhead (size_t allocated, size_t overhead, void *ptr, - const char *name, int line, const char *function) +dump_ggc_loc_statistics (bool final) { - struct ggc_loc_descriptor *loc = make_loc_descriptor (name, line, function); - struct ggc_ptr_hash_entry *p = XNEW (struct ggc_ptr_hash_entry); - ggc_ptr_hash_entry **slot; - - p->ptr = ptr; - p->loc = loc; - p->size = allocated + overhead; - if (!ptr_hash) - ptr_hash = new hash_table<ptr_hash_hasher> (10); - slot = ptr_hash->find_slot_with_hash (ptr, htab_hash_pointer (ptr), INSERT); - gcc_assert (!*slot); - *slot = p; - - loc->times++; - loc->allocated+=allocated; - loc->overhead+=overhead; -} + if (! GATHER_STATISTICS) + return; -/* Helper function for prune_overhead_list. See if SLOT is still marked and - remove it from hashtable if it is not. */ -int -ggc_prune_ptr (ggc_ptr_hash_entry **slot, void *b ATTRIBUTE_UNUSED) -{ - struct ggc_ptr_hash_entry *p = *slot; - if (!ggc_marked_p (p->ptr)) - { - p->loc->collected += p->size; - ptr_hash->clear_slot (slot); - free (p); - } - return 1; + ggc_force_collect = true; + ggc_collect (); + + ggc_mem_desc.dump (GGC, final ? ggc_usage::compare_final : NULL); + + ggc_force_collect = false; } -/* After live values has been marked, walk all recorded pointers and see if - they are still live. */ +/* Record ALLOCATED and OVERHEAD bytes to descriptor NAME:LINE (FUNCTION). */ void -ggc_prune_overhead_list (void) +ggc_record_overhead (size_t allocated, size_t overhead, void *ptr MEM_STAT_DECL) { - ptr_hash->traverse <void *, ggc_prune_ptr> (NULL); + ggc_usage *usage = ggc_mem_desc.register_descriptor (ptr, GGC, false + FINAL_PASS_MEM_STAT); + + ggc_mem_desc.register_object_overhead (usage, allocated + overhead, ptr); + usage->register_overhead (allocated, overhead); } /* Notice that the pointer has been freed. */ void ggc_free_overhead (void *ptr) { - ggc_ptr_hash_entry **slot - = ptr_hash->find_slot_with_hash (ptr, htab_hash_pointer (ptr), NO_INSERT); - struct ggc_ptr_hash_entry *p; - /* The pointer might be not found if a PCH read happened between allocation - and ggc_free () call. FIXME: account memory properly in the presence of - PCH. */ - if (!slot) - return; - p = (struct ggc_ptr_hash_entry *) *slot; - p->loc->freed += p->size; - ptr_hash->clear_slot (slot); - free (p); -} - -/* Helper for qsort; sort descriptors by amount of memory consumed. */ -static int -final_cmp_statistic (const void *loc1, const void *loc2) -{ - const struct ggc_loc_descriptor *const l1 = - *(const struct ggc_loc_descriptor *const *) loc1; - const struct ggc_loc_descriptor *const l2 = - *(const struct ggc_loc_descriptor *const *) loc2; - long diff; - diff = ((long)(l1->allocated + l1->overhead - l1->freed) - - (l2->allocated + l2->overhead - l2->freed)); - return diff > 0 ? 1 : diff < 0 ? -1 : 0; + ggc_mem_desc.release_object_overhead (ptr); } -/* Helper for qsort; sort descriptors by amount of memory consumed. */ -static int -cmp_statistic (const void *loc1, const void *loc2) -{ - const struct ggc_loc_descriptor *const l1 = - *(const struct ggc_loc_descriptor *const *) loc1; - const struct ggc_loc_descriptor *const l2 = - *(const struct ggc_loc_descriptor *const *) loc2; - long diff; - - diff = ((long)(l1->allocated + l1->overhead - l1->freed - l1->collected) - - (l2->allocated + l2->overhead - l2->freed - l2->collected)); - if (diff) - return diff > 0 ? 1 : diff < 0 ? -1 : 0; - diff = ((long)(l1->allocated + l1->overhead - l1->freed) - - (l2->allocated + l2->overhead - l2->freed)); - return diff > 0 ? 1 : diff < 0 ? -1 : 0; -} - -/* Collect array of the descriptors from hashtable. */ -static struct ggc_loc_descriptor **loc_array; -int -ggc_add_statistics (ggc_loc_descriptor **slot, int *n) -{ - loc_array[*n] = *slot; - (*n)++; - return 1; -} - -/* Dump per-site memory statistics. */ - +/* After live values has been marked, walk all recorded pointers and see if + they are still live. */ void -dump_ggc_loc_statistics (bool final) +ggc_prune_overhead_list (void) { - int nentries = 0; - char s[4096]; - size_t collected = 0, freed = 0, allocated = 0, overhead = 0, times = 0; - int i; + typedef hash_map<const void *, std::pair<ggc_usage *, size_t > > map_t; - if (! GATHER_STATISTICS) - return; + map_t::iterator it = ggc_mem_desc.m_reverse_object_map->begin(); - ggc_force_collect = true; - ggc_collect (); + for (; it != ggc_mem_desc.m_reverse_object_map->end (); ++it) + if (!ggc_marked_p ((*it).first)) + (*it).second.first->m_collected += (*it).second.second; - loc_array = XCNEWVEC (struct ggc_loc_descriptor *, - loc_hash->elements_with_deleted ()); - fprintf (stderr, "-------------------------------------------------------\n"); - fprintf (stderr, "\n%-48s %10s %10s %10s %10s %10s\n", - "source location", "Garbage", "Freed", "Leak", "Overhead", "Times"); - fprintf (stderr, "-------------------------------------------------------\n"); - loc_hash->traverse <int *, ggc_add_statistics> (&nentries); - qsort (loc_array, nentries, sizeof (*loc_array), - final ? final_cmp_statistic : cmp_statistic); - for (i = 0; i < nentries; i++) - { - struct ggc_loc_descriptor *d = loc_array[i]; - allocated += d->allocated; - times += d->times; - freed += d->freed; - collected += d->collected; - overhead += d->overhead; - } - for (i = 0; i < nentries; i++) - { - struct ggc_loc_descriptor *d = loc_array[i]; - if (d->allocated) - { - const char *s1 = d->file; - const char *s2; - while ((s2 = strstr (s1, "gcc/"))) - s1 = s2 + 4; - sprintf (s, "%s:%i (%s)", s1, d->line, d->function); - s[48] = 0; - fprintf (stderr, "%-48s %10li:%4.1f%% %10li:%4.1f%% %10li:%4.1f%% %10li:%4.1f%% %10li\n", s, - (long)d->collected, - (d->collected) * 100.0 / collected, - (long)d->freed, - (d->freed) * 100.0 / freed, - (long)(d->allocated + d->overhead - d->freed - d->collected), - (d->allocated + d->overhead - d->freed - d->collected) * 100.0 - / (allocated + overhead - freed - collected), - (long)d->overhead, - d->overhead * 100.0 / overhead, - (long)d->times); - } - } - fprintf (stderr, "%-48s %10ld %10ld %10ld %10ld %10ld\n", - "Total", (long)collected, (long)freed, - (long)(allocated + overhead - freed - collected), (long)overhead, - (long)times); - fprintf (stderr, "%-48s %10s %10s %10s %10s %10s\n", - "source location", "Garbage", "Freed", "Leak", "Overhead", "Times"); - fprintf (stderr, "-------------------------------------------------------\n"); - ggc_force_collect = false; + delete ggc_mem_desc.m_reverse_object_map; + ggc_mem_desc.m_reverse_object_map = new map_t (13, false, false); } diff --git a/gcc/hash-map-traits.h b/gcc/hash-map-traits.h new file mode 100644 index 0000000..2eae3b2 --- /dev/null +++ b/gcc/hash-map-traits.h @@ -0,0 +1,104 @@ +/* A hash map traits. + Copyright (C) 2015 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 3, or (at your option) any later +version. + +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#ifndef HASH_MAP_TRAITS_H +#define HASH_MAP_TRAITS_H + +/* Bacause mem-stats.h uses default hashmap traits, we have to + put the class to this separate header file. */ + +/* implement default behavior for traits when types allow it. */ + +struct default_hashmap_traits +{ + /* Hashes the passed in key. */ + + template<typename T> + static hashval_t + hash (T *p) + { + return uintptr_t(p) >> 3; + } + + /* If the value converts to hashval_t just use it. */ + + template<typename T> static hashval_t hash (T v) { return v; } + + /* Return true if the two keys passed as arguments are equal. */ + + template<typename T> + static bool + equal_keys (const T &a, const T &b) + { + return a == b; + } + + /* Called to dispose of the key and value before marking the entry as + deleted. */ + + template<typename T> static void remove (T &v) { v.~T (); } + + /* Mark the passed in entry as being deleted. */ + + template<typename T> + static void + mark_deleted (T &e) + { + mark_key_deleted (e.m_key); + } + + /* Mark the passed in entry as being empty. */ + + template<typename T> + static void + mark_empty (T &e) + { + mark_key_empty (e.m_key); + } + + /* Return true if the passed in entry is marked as deleted. */ + + template<typename T> + static bool + is_deleted (T &e) + { + return e.m_key == (void *)1; + } + + /* Return true if the passed in entry is marked as empty. */ + + template<typename T> static bool is_empty (T &e) { return e.m_key == NULL; } + +private: + template<typename T> + static void + mark_key_deleted (T *&k) + { + k = reinterpret_cast<T *> (1); + } + + template<typename T> + static void + mark_key_empty (T *&k) + { + k = static_cast<T *> (0); + } +}; + +#endif // HASH_MAP_TRAITS_H diff --git a/gcc/hash-map.h b/gcc/hash-map.h index 4cca702..fb1a522 100644 --- a/gcc/hash-map.h +++ b/gcc/hash-map.h @@ -24,87 +24,12 @@ along with GCC; see the file COPYING3. If not see #include <new> #include <utility> #include "hash-table.h" - -/* implement default behavior for traits when types allow it. */ - -struct default_hashmap_traits -{ - /* Hashes the passed in key. */ - - template<typename T> - static hashval_t - hash (T *p) - { - return uintptr_t(p) >> 3; - } - - /* If the value converts to hashval_t just use it. */ - - template<typename T> static hashval_t hash (T v) { return v; } - - /* Return true if the two keys passed as arguments are equal. */ - - template<typename T> - static bool - equal_keys (const T &a, const T &b) - { - return a == b; - } - - /* Called to dispose of the key and value before marking the entry as - deleted. */ - - template<typename T> static void remove (T &v) { v.~T (); } - - /* Mark the passed in entry as being deleted. */ - - template<typename T> - static void - mark_deleted (T &e) - { - mark_key_deleted (e.m_key); - } - - /* Mark the passed in entry as being empty. */ - - template<typename T> - static void - mark_empty (T &e) - { - mark_key_empty (e.m_key); - } - - /* Return true if the passed in entry is marked as deleted. */ - - template<typename T> - static bool - is_deleted (T &e) - { - return e.m_key == (void *)1; - } - - /* Return true if the passed in entry is marked as empty. */ - - template<typename T> static bool is_empty (T &e) { return e.m_key == NULL; } - -private: - template<typename T> - static void - mark_key_deleted (T *&k) - { - k = reinterpret_cast<T *> (1); - } - - template<typename T> - static void - mark_key_empty (T *&k) - { - k = static_cast<T *> (0); - } -}; +#include "hash-map-traits.h" +#include "mem-stats.h" +#include "vec.h" template<typename Key, typename Value, - typename Traits = default_hashmap_traits> + typename Traits> class GTY((user)) hash_map { struct hash_entry @@ -187,13 +112,16 @@ class GTY((user)) hash_map }; public: - explicit hash_map (size_t n = 13, bool ggc = false) : m_table (n, ggc) {} + explicit hash_map (size_t n = 13, bool ggc = false, + bool gather_mem_stats = true CXX_MEM_STAT_INFO) + : m_table (n, ggc, gather_mem_stats, HASH_MAP PASS_MEM_STAT) {} /* Create a hash_map in ggc memory. */ - static hash_map *create_ggc (size_t size) + static hash_map *create_ggc (size_t size, bool gather_mem_stats = true + CXX_MEM_STAT_INFO) { hash_map *map = ggc_alloc<hash_map> (); - new (map) hash_map (size, true); + new (map) hash_map (size, true, gather_mem_stats PASS_MEM_STAT); return map; } diff --git a/gcc/hash-set.h b/gcc/hash-set.h index 9065451..2384d76 100644 --- a/gcc/hash-set.h +++ b/gcc/hash-set.h @@ -180,7 +180,8 @@ class hash_set }; public: - explicit hash_set (size_t n = 13, bool ggc = false) : m_table (n, ggc) {} + explicit hash_set (size_t n = 13, bool ggc = false CXX_MEM_STAT_INFO) + : m_table (n, ggc, true, HASH_SET PASS_MEM_STAT) {} /* Create a hash_set in gc memory with space for at least n elements. */ diff --git a/gcc/hash-table.c b/gcc/hash-table.c index 3127e9c..012b241 100644 --- a/gcc/hash-table.c +++ b/gcc/hash-table.c @@ -31,7 +31,6 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "hash-table.h" - /* Table of primes and multiplicative inverses. Note that these are not minimally reduced inverses. Unlike when generating @@ -99,3 +98,15 @@ hash_table_higher_prime_index (unsigned long n) return low; } +mem_alloc_description<mem_usage> hash_table_usage; + +/* Support function for statistics. */ +void dump_hash_table_loc_statistics (void) +{ + for (unsigned i = HASH_TABLE; i <= HASH_SET; i++) + { + mem_alloc_origin origin = (mem_alloc_origin) i; + hash_table_usage.dump (origin); + } +} + diff --git a/gcc/hash-table.h b/gcc/hash-table.h index f6375d1..a0d2730 100644 --- a/gcc/hash-table.h +++ b/gcc/hash-table.h @@ -199,6 +199,7 @@ along with GCC; see the file COPYING3. If not see #include "ggc.h" #include "hashtab.h" #include <new> +#include "mem-stats-traits.h" template<typename, typename, typename> class hash_map; template<typename, typename> class hash_set; @@ -551,6 +552,8 @@ struct mark_empty_helper<Type *, Traits, false> } }; +class mem_usage; + /* User-facing hash table type. The table stores elements of type Descriptor::value_type. @@ -583,16 +586,18 @@ class hash_table typedef typename Descriptor::compare_type compare_type; public: - explicit hash_table (size_t, bool ggc = false CXX_MEM_STAT_INFO); + explicit hash_table (size_t, bool ggc = false, bool gather_mem_stats = true, + mem_alloc_origin origin = HASH_TABLE + CXX_MEM_STAT_INFO); ~hash_table (); /* Create a hash_table in gc memory. */ static hash_table * - create_ggc (size_t n) + create_ggc (size_t n CXX_MEM_STAT_INFO) { hash_table *table = ggc_alloc<hash_table> (); - new (table) hash_table (n, true); + new (table) hash_table (n, true, true, HASH_TABLE PASS_MEM_STAT); return table; } @@ -759,19 +764,39 @@ private: /* if m_entries is stored in ggc memory. */ bool m_ggc; + + /* If we should gather memory statistics for the table. */ + bool m_gather_mem_stats; }; +/* As mem-stats.h heavily utilizes hash maps (hash tables), we have to include + mem-stats.h after hash_table declaration. */ + +#include "mem-stats.h" +#include "hash-map.h" +#include "vec.h" + +extern mem_alloc_description<mem_usage> hash_table_usage; + +/* Support function for statistics. */ +extern void dump_hash_table_loc_statistics (void); + template<typename Descriptor, template<typename Type> class Allocator> -hash_table<Descriptor, Allocator>::hash_table (size_t size, bool ggc - MEM_STAT_DECL) : +hash_table<Descriptor, Allocator>::hash_table (size_t size, bool ggc, bool + gather_mem_stats, + mem_alloc_origin origin + MEM_STAT_DECL) : m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0), - m_ggc (ggc) + m_ggc (ggc), m_gather_mem_stats (gather_mem_stats) { unsigned int size_prime_index; size_prime_index = hash_table_higher_prime_index (size); size = prime_tab[size_prime_index].prime; + if (m_gather_mem_stats) + hash_table_usage.register_descriptor (this, origin, ggc FINAL_PASS_MEM_STAT); + m_entries = alloc_entries (size PASS_MEM_STAT); m_size = size; m_size_prime_index = size_prime_index; @@ -788,6 +813,9 @@ hash_table<Descriptor, Allocator>::~hash_table () Allocator <value_type> ::data_free (m_entries); else ggc_free (m_entries); + + if (m_gather_mem_stats) + hash_table_usage.release_instance_overhead (this, sizeof (value_type) * m_size, true); } /* This function returns an array of empty hash table elements. */ @@ -798,6 +826,9 @@ hash_table<Descriptor, Allocator>::alloc_entries (size_t n MEM_STAT_DECL) const { value_type *nentries; + if (m_gather_mem_stats) + hash_table_usage.register_instance_overhead (sizeof (value_type) * n, this); + if (!m_ggc) nentries = Allocator <value_type> ::data_alloc (n); else @@ -881,6 +912,11 @@ hash_table<Descriptor, Allocator>::expand () } value_type *nentries = alloc_entries (nsize); + + if (m_gather_mem_stats) + hash_table_usage.release_instance_overhead (this, sizeof (value_type) + * osize); + m_entries = nentries; m_size = nsize; m_size_prime_index = nindex; diff --git a/gcc/inchash.c b/gcc/inchash.c index c555046..90c62e8 100644 --- a/gcc/inchash.c +++ b/gcc/inchash.c @@ -26,54 +26,3 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "hashtab.h" #include "inchash.h" - -/* Borrowed from hashtab.c iterative_hash implementation. */ -#define mix(a,b,c) \ -{ \ - a -= b; a -= c; a ^= (c>>13); \ - b -= c; b -= a; b ^= (a<< 8); \ - c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \ - a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \ - b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \ - c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \ - a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \ - b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \ - c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \ -} - - -/* Produce good hash value combining VAL and VAL2. */ -hashval_t -iterative_hash_hashval_t (hashval_t val, hashval_t val2) -{ - /* the golden ratio; an arbitrary value. */ - hashval_t a = 0x9e3779b9; - - mix (a, val, val2); - return val2; -} - -/* Produce good hash value combining VAL and VAL2. */ - -hashval_t -iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2) -{ - if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t)) - return iterative_hash_hashval_t (val, val2); - else - { - hashval_t a = (hashval_t) val; - /* Avoid warnings about shifting of more than the width of the type on - hosts that won't execute this path. */ - int zero = 0; - hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero)); - mix (a, b, val2); - if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t)) - { - hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero)); - hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero)); - mix (a, b, val2); - } - return val2; - } -} diff --git a/gcc/inchash.h b/gcc/inchash.h index 54fb0d8..350222d 100644 --- a/gcc/inchash.h +++ b/gcc/inchash.h @@ -36,8 +36,8 @@ along with GCC; see the file COPYING3. If not see Currently it just implements the plain old jhash based incremental hash from gcc's tree.c. */ -extern hashval_t iterative_hash_host_wide_int (HOST_WIDE_INT, hashval_t); -extern hashval_t iterative_hash_hashval_t (hashval_t, hashval_t); +hashval_t iterative_hash_host_wide_int (HOST_WIDE_INT, hashval_t); +hashval_t iterative_hash_hashval_t (hashval_t, hashval_t); namespace inchash { @@ -72,7 +72,7 @@ class hash } /* Hash in pointer PTR. */ - void add_ptr (void *ptr) + void add_ptr (const void *ptr) { add (&ptr, sizeof (ptr)); } @@ -138,4 +138,57 @@ class hash } +/* Borrowed from hashtab.c iterative_hash implementation. */ +#define mix(a,b,c) \ +{ \ + a -= b; a -= c; a ^= (c>>13); \ + b -= c; b -= a; b ^= (a<< 8); \ + c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \ + a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \ + b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \ + c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \ + a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \ + b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \ + c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \ +} + + +/* Produce good hash value combining VAL and VAL2. */ +inline +hashval_t +iterative_hash_hashval_t (hashval_t val, hashval_t val2) +{ + /* the golden ratio; an arbitrary value. */ + hashval_t a = 0x9e3779b9; + + mix (a, val, val2); + return val2; +} + +/* Produce good hash value combining VAL and VAL2. */ + +inline +hashval_t +iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2) +{ + if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t)) + return iterative_hash_hashval_t (val, val2); + else + { + hashval_t a = (hashval_t) val; + /* Avoid warnings about shifting of more than the width of the type on + hosts that won't execute this path. */ + int zero = 0; + hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero)); + mix (a, b, val2); + if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t)) + { + hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero)); + hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero)); + mix (a, b, val2); + } + return val2; + } +} + #endif diff --git a/gcc/mem-stats-traits.h b/gcc/mem-stats-traits.h new file mode 100644 index 0000000..6c22e89 --- /dev/null +++ b/gcc/mem-stats-traits.h @@ -0,0 +1,20 @@ +#ifndef GCC_MEM_STATS_TRAITS_H +#define GCC_MEM_STATS_TRAITS_H + +/* Memory allocation origin. */ +enum mem_alloc_origin +{ + HASH_TABLE, + HASH_MAP, + HASH_SET, + VEC, + BITMAP, + GGC, + MEM_ALLOC_ORIGIN_LENGTH +}; + +/* Verbose names of the memory allocation origin. */ +static const char * mem_alloc_origin_names[] = { "Hash tables", "Hash maps", "Hash sets", + "Heap vectors", "Bitmaps", "GGC memory" }; + +#endif // GCC_MEM_STATS_TRAITS_H diff --git a/gcc/mem-stats.h b/gcc/mem-stats.h new file mode 100644 index 0000000..1b3194a --- /dev/null +++ b/gcc/mem-stats.h @@ -0,0 +1,535 @@ +#ifndef GCC_MEM_STATS_H +#define GCC_MEM_STATS_H + +#include "hash-map-traits.h" +#include "inchash.h" +#include "mem-stats-traits.h" +#include "vec.h" + +/* Forward declaration. */ +template<typename Key, typename Value, + typename Traits = default_hashmap_traits> +class hash_map; + +/* Memoty allocation location. */ +struct mem_location +{ + /* Default constructor. */ + inline mem_location () {} + + /* Constructor. */ + inline mem_location (const char *filename, const char *function, int line, + mem_alloc_origin origin, bool ggc): + m_filename (filename), m_function (function), m_line (line), m_origin + (origin), m_ggc (ggc) {} + + /* Compute hash value based on file name, function name and line in + source code. As there is just a single pointer registered for every + constant that points to e.g. the same file name, we can use hash + of the pointer. */ + hashval_t hash () + { + inchash::hash hash; + + hash.add_ptr (m_filename); + hash.add_ptr (m_function); + hash.add_int (m_line); + + return hash.end (); + } + + /* Return true if the memory location is equal to OTHER. */ + int equal (mem_location &other) + { + return m_filename == other.m_filename && m_function == other.m_function + && m_line == other.m_line; + } + + /* Return trimmed filename for the location. */ + inline const char *get_trimmed_filename () + { + const char *s1 = m_filename; + const char *s2; + + while ((s2 = strstr (s1, "gcc/"))) + s1 = s2 + 4; + + return s1; + } + + /* Return display name associated to ORIGIN type. */ + static const char *get_origin_name (mem_alloc_origin origin) + { + return mem_alloc_origin_names[(unsigned) origin]; + } + + /* File name of source code. */ + const char *m_filename; + /* Funcation name. */ + const char *m_function; + /* Line number in source code.*/ + int m_line; + /* Origin type. */ + mem_alloc_origin m_origin; + /* Flag if used by GGC allocation. */ + bool m_ggc; +}; + +/* Memory usage register to a memory location. */ +struct mem_usage +{ + /* Default constructor. */ + mem_usage (): m_allocated (0), m_times (0), m_peak (0) {} + + /* Constructor. */ + mem_usage (size_t allocated, size_t times, size_t peak): + m_allocated (allocated), m_times (times), m_peak (peak) {} + + /* Register overhead of SIZE bytes. */ + inline void register_overhead (size_t size) + { + m_allocated += size; + m_times++; + + if (m_peak < m_allocated) + m_peak = m_allocated; + } + + /* Release overhead of SIZE bytes. */ + inline void release_overhead (size_t size) + { + gcc_assert (size <= m_allocated); + + m_allocated -= size; + } + + /* Sum the usage with SECOND usage. */ + mem_usage operator+ (const mem_usage &second) + { + return mem_usage (m_allocated + second.m_allocated, + m_times + second.m_times, + m_peak + second.m_peak); + } + + /* Comparison operator. */ + inline bool operator< (const mem_usage &second) const + { + return (m_allocated == second.m_allocated ? + (m_peak == second.m_peak ? m_times < second.m_times + : m_peak < second.m_peak ) : m_allocated < second.m_allocated); + } + + /* Compare wrapper used by qsort method. */ + static int compare (const void *first, const void *second) + { + typedef std::pair<mem_location *, mem_usage *> mem_pair_t; + + const mem_pair_t f = *(const mem_pair_t *)first; + const mem_pair_t s = *(const mem_pair_t *)second; + + return (*f.second) < (*s.second); + } + + /* Dump usage coupled to LOC location, where TOTAL is sum of all rows. */ + inline void dump (mem_location *loc, mem_usage &total) const + { + char s[4096]; + sprintf (s, "%s:%i (%s)", loc->get_trimmed_filename (), + loc->m_line, loc->m_function); + + s[48] = '\0'; + + fprintf (stderr, "%-48s %10li:%5.1f%%%10li%10li:%5.1f%%%10s\n", s, + (long)m_allocated, get_percent (m_allocated, total.m_allocated), + (long)m_peak, (long)m_times, + get_percent (m_times, total.m_times), loc->m_ggc ? "ggc" : "heap"); + } + + /* Dump footer. */ + inline void dump_footer () + { + print_dash_line (); + fprintf (stderr, "%s%54li%27li\n", "Total", (long)m_allocated, + (long)m_times); + print_dash_line (); + } + + /* Return fraction of NOMINATOR and DENOMINATOR in percent. */ + static inline float get_percent (size_t nominator, size_t denominator) + { + return denominator == 0 ? 0.0f : nominator * 100.0 / denominator; + } + + /* Print line made of dashes. */ + static inline void print_dash_line () + { + fprintf (stderr, "%s\n", std::string (128, '-').c_str ()); + } + + /* Dump header with NAME. */ + static inline void dump_header (const char *name) + { + fprintf (stderr, "%-48s %11s%16s%10s%17s\n", name, "Leak", "Peak", + "Times", "Type"); + print_dash_line (); + } + + /* Current number of allocated bytes. */ + size_t m_allocated; + /* Number of allocations. */ + size_t m_times; + /* Peak allocation in bytes. */ + size_t m_peak; +}; + +/* Memory usage pair that connectes memory usage and number + of allocated bytes. */ +template <class T> +struct mem_usage_pair +{ + mem_usage_pair (T *usage_, size_t allocated_): usage (usage_), + allocated (allocated_) {} + + T *usage; + size_t allocated; +}; + +/* Memory allocation description. */ +template <class T> +class mem_alloc_description +{ +public: + struct mem_alloc_hashmap_traits: default_hashmap_traits + { + static hashval_t + hash (const mem_location *l) + { + inchash::hash hstate; + + hstate.add_ptr ((const void *)l->m_filename); + hstate.add_ptr (l->m_function); + hstate.add_int (l->m_line); + + return hstate.end (); + } + + static bool + equal_keys (const mem_location *l1, const mem_location *l2) + { + return l1->m_filename == l2->m_filename && l1->m_function == l2->m_function + && l1->m_line == l2->m_line; + } + }; + + /* Internal class type definitions. */ + typedef hash_map <mem_location *, T *, mem_alloc_hashmap_traits> mem_map_t; + typedef hash_map <const void *, mem_usage_pair<T>, default_hashmap_traits> reverse_mem_map_t; + typedef hash_map <const void *, std::pair<T *, size_t> > reverse_object_map_t; + typedef std::pair <mem_location *, T *> mem_list_t; + + /* Default contructor. */ + mem_alloc_description (); + + /* Default destructor. */ + ~mem_alloc_description (); + + /* Returns true if instance PTR is registered by the memory description. */ + bool contains_descriptor_for_instance (const void *ptr); + + /* Return descriptor for instance PTR. */ + T *get_descriptor_for_instance (const void *ptr); + + /* Register memory allocation descriptor for container PTR. ORIGIN identifies + type of container and GGC identifes if the allocation is handled in GGC + memory. Each location is identified by file NAME, LINE in source code and + FUNCTION name. */ + T *register_descriptor (const void *ptr, mem_alloc_origin origin, + bool ggc, const char *name, int line, + const char *function); + + /* Register instance overhead identified by PTR pointer. Allocation takes + SIZE bytes. */ + T *register_instance_overhead (size_t size, const void *ptr); + + /* For containers (and GGC) where we want to track every instance object, + we register allocation of SIZE bytes, identified by PTR pointer, belonging + to USAGE descriptor. */ + void register_object_overhead (T *usage, size_t size, const void *ptr); + + /* Release PTR pointer of SIZE bytes. If REMOVE_FROM_MAP is set to true, + remove the instance from reverse map. */ + void release_instance_overhead (void *ptr, size_t size, + bool remove_from_map = false); + + /* Release intance object identified by PTR pointer. */ + void release_object_overhead (void *ptr); + + /* Get sum value for ORIGIN type of allocation for the descriptor. */ + T get_sum (mem_alloc_origin origin); + + /* Get all tracked instances registered by the description. Items are filtered + by ORIGIN type, LENGTH is return value where we register the number of + elements in the list. If we want to process custom order, CMP comparator + can be provided. */ + mem_list_t *get_list (mem_alloc_origin origin, unsigned *length, + int (*cmp) (const void *first, const void *second) = NULL); + + /* Dump all tracked instances of type ORIGIN. If we want to process custom order, + CMP comparator can be provided. */ + void dump (mem_alloc_origin origin, + int (*cmp) (const void *first, const void *second) = NULL); + + /* Reverse object map used for every object allocation mapping. */ + reverse_object_map_t *m_reverse_object_map; + +private: + /* Register overhead of SIZE bytes of ORIGIN type. PTR pointer is allocated + in NAME source file, at LINE in source code, in FUNCTION. */ + T *register_overhead (size_t size, mem_alloc_origin origin, const char *name, int line, + const char *function, const void *ptr); + + /* Allocation location coupled to the description. */ + mem_location m_location; + + /* Location to usage mapping. */ + mem_map_t *m_map; + + /* Reverse pointer to usage mapping. */ + reverse_mem_map_t *m_reverse_map; +}; + +#include "hash-map.h" + +/* Returns true if instance PTR is registered by the memory description. */ + +template <class T> +inline bool +mem_alloc_description<T>::contains_descriptor_for_instance (const void *ptr) +{ + return m_reverse_map->get (ptr); +} + +/* Return descriptor for instance PTR. */ + +template <class T> +inline T* +mem_alloc_description<T>::get_descriptor_for_instance (const void *ptr) +{ + return m_reverse_map->get (ptr) ? (*m_reverse_map->get (ptr)).usage : NULL; +} + +/* Register memory allocation descriptor for container PTR. ORIGIN identifies + type of container and GGC identifes if the allocation is handled in GGC + memory. Each location is identified by file NAME, LINE in source code and + FUNCTION name. */ + +template <class T> +inline T* +mem_alloc_description<T>::register_descriptor (const void *ptr, + mem_alloc_origin origin, + bool ggc, + const char *filename, + int line, + const char *function) +{ + mem_location *l = new mem_location (filename, function, line, origin, ggc); + T *usage = NULL; + + T **slot = m_map->get (l); + if (slot) + { + delete l; + usage = *slot; + } + else + { + usage = new T (); + m_map->put (l, usage); + } + + if (!m_reverse_map->get (ptr)) + m_reverse_map->put (ptr, mem_usage_pair<T> (usage, 0)); + + return usage; +} + +/* Register instance overhead identified by PTR pointer. Allocation takes + SIZE bytes. */ + +template <class T> +inline T* +mem_alloc_description<T>::register_instance_overhead (size_t size, const void *ptr) +{ + mem_usage_pair <T> *slot = m_reverse_map->get (ptr); + if (!slot) + { + gcc_unreachable (); + return NULL; + } + + T *usage = (*slot).usage; + usage->register_overhead (size); + + return usage; +} + +/* For containers (and GGC) where we want to track every instance object, + we register allocation of SIZE bytes, identified by PTR pointer, belonging + to USAGE descriptor. */ + +template <class T> +void +mem_alloc_description<T>::register_object_overhead (T *usage, size_t size, const void *ptr) +{ + gcc_assert (m_reverse_object_map->get (ptr) == NULL); + m_reverse_object_map->put (ptr, std::pair<T *, size_t> (usage, size)); +} + +/* Register overhead of SIZE bytes of ORIGIN type. PTR pointer is allocated + in NAME source file, at LINE in source code, in FUNCTION. */ + +template <class T> +inline T* +mem_alloc_description<T>::register_overhead (size_t size, mem_alloc_origin origin, const char *filename, int line, const char *function, const void *ptr) +{ + T *usage = register_descriptor (ptr, origin, filename, line, function); + usage->register_overhead (size); + + return usage; +} + +/* Release PTR pointer of SIZE bytes. */ + +template <class T> +inline void +mem_alloc_description<T>::release_instance_overhead (void *ptr, size_t size, + bool remove_from_map) +{ + mem_usage_pair<T> *slot = m_reverse_map->get (ptr); + + if (!slot) + { + gcc_unreachable (); + return; + } + + mem_usage_pair<T> usage_pair = *slot; + usage_pair.usage->release_overhead (size); + + if (remove_from_map) + m_reverse_map->remove (ptr); +} + +/* Release intance object identified by PTR pointer. */ + +template <class T> +inline void +mem_alloc_description<T>::release_object_overhead (void *ptr) +{ + std::pair <T *, size_t> *entry = m_reverse_object_map->get (ptr); + if (entry) + { + entry->first->release_overhead (entry->second); + m_reverse_object_map->remove (ptr); + } +} + +/* Default contructor. */ + +template <class T> +inline +mem_alloc_description<T>::mem_alloc_description() +{ + m_map = new mem_map_t (13, false, false); + m_reverse_map = new reverse_mem_map_t (13, false, false); + m_reverse_object_map = new reverse_object_map_t (13, false, false); +} + +/* Default destructor. */ + +template <class T> +inline +mem_alloc_description<T>::~mem_alloc_description() +{ + for (typename mem_map_t::iterator it = m_map->begin (); it != m_map->end (); ++it) + { + delete (*it).first; + delete (*it).second; + } + + delete m_map; + delete m_reverse_map; + delete m_reverse_object_map; +} + +/* Get all tracked instances registered by the description. Items are filtered + by ORIGIN type, LENGTH is return value where we register the number of + elements in the list. If we want to process custom order, CMP comparator + can be provided. */ + +template <class T> +inline +typename mem_alloc_description<T>::mem_list_t * +mem_alloc_description<T>::get_list (mem_alloc_origin origin, unsigned *length, + int (*cmp) (const void *first, const void *second)) +{ + /* vec data structure is not used because all vectors generate memory + allocation info a it would create a cycle. */ + size_t element_size = sizeof (mem_list_t); + mem_list_t *list = XCNEWVEC (mem_list_t, m_map->elements ()); + unsigned i = 0; + + for (typename mem_map_t::iterator it = m_map->begin(); it != m_map->end (); ++it) + if ((*it).first->m_origin == origin) + list[i++] = std::pair<mem_location*, T*> (*it); + + qsort (list, i, element_size, cmp == NULL ? T::compare : cmp); + *length = i; + + return list; +} + +/* Get sum value for ORIGIN type of allocation for the descriptor. */ + +template <class T> +inline T +mem_alloc_description<T>::get_sum (mem_alloc_origin origin) +{ + unsigned length; + mem_list_t *list = get_list (origin, &length); + T sum; + + for (unsigned i = 0; i < length; i++) + sum = sum + *list[i].second; + + XDELETEVEC (list); + + return sum; +} + +/* Dump all tracked instances of type ORIGIN. If we want to process custom order, + CMP comparator can be provided. */ + +template <class T> +inline void +mem_alloc_description<T>::dump (mem_alloc_origin origin, int (*cmp) (const void *first, const void *second)) +{ + unsigned length; + + fprintf (stderr, "\n"); + + mem_list_t *list = get_list (origin, &length, cmp); + T total = get_sum (origin); + + T::dump_header (mem_location::get_origin_name (origin)); + for (int i = length - 1; i >= 0; i--) + list[i].second->dump (list[i].first, total); + + total.dump_footer (); + + XDELETEVEC (list); + + fprintf (stderr, "\n"); +} + +#endif // GCC_MEM_STATS_H diff --git a/gcc/sese.c b/gcc/sese.c index fb5b636..c274547 100644 --- a/gcc/sese.c +++ b/gcc/sese.c @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #include "system.h" #include "coretypes.h" +#include "mem-stats.h" #include "hash-map.h" #include "hash-set.h" #include "machmode.h" diff --git a/gcc/toplev.c b/gcc/toplev.c index 3c1ba38..48d0623 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1957,6 +1957,7 @@ dump_memory_report (bool final) dump_rtx_statistics (); dump_alloc_pool_statistics (); dump_bitmap_statistics (); + dump_hash_table_loc_statistics (); dump_vec_loc_statistics (); dump_ggc_loc_statistics (final); dump_alias_stats (stderr); diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 4b0d2a8..d799751 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -74,6 +74,7 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #include "system.h" #include "coretypes.h" +#include "mem-stats.h" #include "hash-map.h" #include "hash-table.h" #include "alloc-pool.h" diff --git a/gcc/vec.c b/gcc/vec.c index 06b887b..a147306 100644 --- a/gcc/vec.c +++ b/gcc/vec.c @@ -33,6 +33,9 @@ along with GCC; see the file COPYING3. If not see #include "vec.h" #include "diagnostic-core.h" #include "hashtab.h" +#include "mem-stats.h" +#include "hash-map.h" +#include "mem-stats.h" /* vNULL is an empty type with a template cast operation that returns a zero-initialized vec<T, A, L> instance. Use this when you want @@ -44,129 +47,109 @@ along with GCC; see the file COPYING3. If not see they cannot have ctors/dtors. */ vnull vNULL; - -/* Store information about each particular vector. */ -struct vec_descriptor -{ - const char *function; - const char *file; - int line; - size_t allocated; - size_t times; - size_t peak; -}; - - -/* Hashtable mapping vec addresses to descriptors. */ -static htab_t vec_desc_hash; - -/* Hashtable helpers. */ -static hashval_t -hash_descriptor (const void *p) -{ - const struct vec_descriptor *const d = - (const struct vec_descriptor *) p; - return htab_hash_pointer (d->file) + d->line; -} -static int -eq_descriptor (const void *p1, const void *p2) +/* Vector memory usage. */ +struct vec_usage: public mem_usage { - const struct vec_descriptor *const d = (const struct vec_descriptor *) p1; - const struct vec_descriptor *const l = (const struct vec_descriptor *) p2; - return d->file == l->file && d->function == l->function && d->line == l->line; -} - -/* Hashtable converting address of allocated field to loc descriptor. */ -static htab_t ptr_hash; -struct ptr_hash_entry -{ - void *ptr; - struct vec_descriptor *loc; - size_t allocated; + /* Default constructor. */ + vec_usage (): m_items (0), m_items_peak (0) {} + + /* Constructor. */ + vec_usage (size_t allocated, size_t times, size_t peak, + size_t items, size_t items_peak) + : mem_usage (allocated, times, peak), + m_items (items), m_items_peak (items_peak) {} + + /* Comparison operator. */ + inline bool operator< (const vec_usage &second) const + { + return (m_allocated == second.m_allocated ? + (m_peak == second.m_peak ? m_times < second.m_times + : m_peak < second.m_peak ) : m_allocated < second.m_allocated); + } + + /* Sum the usage with SECOND usage. */ + vec_usage operator+ (const vec_usage &second) + { + return vec_usage (m_allocated + second.m_allocated, + m_times + second.m_times, + m_peak + second.m_peak, + m_items + second.m_items, + m_items_peak + second.m_items_peak); + } + + /* Dump usage coupled to LOC location, where TOTAL is sum of all rows. */ + inline void dump (mem_location *loc, mem_usage &total) const + { + char s[4096]; + sprintf (s, "%s:%i (%s)", loc->get_trimmed_filename (), + loc->m_line, loc->m_function); + + s[48] = '\0'; + + fprintf (stderr, "%-48s %10li:%4.1f%%%10li%10li:%4.1f%%%11li%11li\n", s, + (long)m_allocated, m_allocated * 100.0 / total.m_allocated, + (long)m_peak, (long)m_times, m_times * 100.0 / total.m_times, + (long)m_items, (long)m_items_peak); + } + + /* Dump footer. */ + inline void dump_footer () + { + print_dash_line (); + fprintf (stderr, "%s%55li%25li%17li\n", "Total", (long)m_allocated, + (long)m_times, (long)m_items); + print_dash_line (); + } + + /* Dump header with NAME. */ + static inline void dump_header (const char *name) + { + fprintf (stderr, "%-48s %11s%15s%10s%17s%11s\n", name, "Leak", "Peak", + "Times", "Leak items", "Peak items"); + print_dash_line (); + } + + /* Compare wrapper used by qsort method. */ + static int compare (const void *first, const void *second) + { + typedef std::pair<mem_location *, vec_usage *> mem_pair_t; + + const mem_pair_t f = *(const mem_pair_t *)first; + const mem_pair_t s = *(const mem_pair_t *)second; + + return (*f.second) < (*s.second); + } + + /* Current number of items allocated. */ + size_t m_items; + /* Peak value of number of allocated items. */ + size_t m_items_peak; }; -/* Hash table helpers functions. */ -static hashval_t -hash_ptr (const void *p) -{ - const struct ptr_hash_entry *const d = (const struct ptr_hash_entry *) p; - - return htab_hash_pointer (d->ptr); -} - -static int -eq_ptr (const void *p1, const void *p2) -{ - const struct ptr_hash_entry *const p = (const struct ptr_hash_entry *) p1; - - return (p->ptr == p2); -} - -/* Return descriptor for given call site, create new one if needed. */ -static struct vec_descriptor * -vec_descriptor (const char *name, int line, const char *function) -{ - struct vec_descriptor loc; - struct vec_descriptor **slot; - - loc.file = name; - loc.line = line; - loc.function = function; - if (!vec_desc_hash) - vec_desc_hash = htab_create (10, hash_descriptor, eq_descriptor, NULL); - - slot = (struct vec_descriptor **) htab_find_slot (vec_desc_hash, &loc, - INSERT); - if (*slot) - return *slot; - *slot = XCNEW (struct vec_descriptor); - (*slot)->file = name; - (*slot)->line = line; - (*slot)->function = function; - (*slot)->allocated = 0; - (*slot)->peak = 0; - return *slot; -} +/* Vector memory description. */ +static mem_alloc_description <vec_usage> vec_mem_desc; /* Account the overhead. */ void -vec_prefix::register_overhead (size_t size, const char *name, int line, - const char *function) +vec_prefix::register_overhead (void *ptr, size_t size, size_t elements + MEM_STAT_DECL) { - struct vec_descriptor *loc = vec_descriptor (name, line, function); - struct ptr_hash_entry *p = XNEW (struct ptr_hash_entry); - PTR *slot; - - p->ptr = this; - p->loc = loc; - p->allocated = size; - if (!ptr_hash) - ptr_hash = htab_create (10, hash_ptr, eq_ptr, NULL); - slot = htab_find_slot_with_hash (ptr_hash, this, htab_hash_pointer (this), - INSERT); - gcc_assert (!*slot); - *slot = p; - - loc->allocated += size; - if (loc->peak < loc->allocated) - loc->peak += loc->allocated; - loc->times++; + vec_mem_desc.register_descriptor (ptr, VEC, false FINAL_PASS_MEM_STAT); + vec_usage *usage = vec_mem_desc.register_instance_overhead (size, ptr); + usage->m_items += elements; + if (usage->m_items_peak < usage->m_items) + usage->m_items_peak = usage->m_items; } - /* Notice that the memory allocated for the vector has been freed. */ void -vec_prefix::release_overhead (void) +vec_prefix::release_overhead (void *ptr, size_t size, bool in_dtor MEM_STAT_DECL) { - PTR *slot = htab_find_slot_with_hash (ptr_hash, this, - htab_hash_pointer (this), - NO_INSERT); - struct ptr_hash_entry *p = (struct ptr_hash_entry *) *slot; - p->loc->allocated -= p->allocated; - htab_clear_slot (ptr_hash, slot); - ::free (p); + if (!vec_mem_desc.contains_descriptor_for_instance (ptr)) + vec_mem_desc.register_descriptor (ptr, VEC, false FINAL_PASS_MEM_STAT); + vec_mem_desc.release_instance_overhead (ptr, size, in_dtor); } @@ -195,84 +178,10 @@ vec_prefix::calculate_allocation_1 (unsigned alloc, unsigned desired) return alloc; } - -/* Helper for qsort; sort descriptors by amount of memory consumed. */ - -static int -cmp_statistic (const void *loc1, const void *loc2) -{ - const struct vec_descriptor *const l1 = - *(const struct vec_descriptor *const *) loc1; - const struct vec_descriptor *const l2 = - *(const struct vec_descriptor *const *) loc2; - long diff; - diff = l1->allocated - l2->allocated; - if (!diff) - diff = l1->peak - l2->peak; - if (!diff) - diff = l1->times - l2->times; - return diff > 0 ? 1 : diff < 0 ? -1 : 0; -} - - -/* Collect array of the descriptors from hashtable. */ - -static struct vec_descriptor **loc_array; -static int -add_statistics (void **slot, void *b) -{ - int *n = (int *)b; - loc_array[*n] = (struct vec_descriptor *) *slot; - (*n)++; - return 1; -} - /* Dump per-site memory statistics. */ void dump_vec_loc_statistics (void) { - int nentries = 0; - char s[4096]; - size_t allocated = 0; - size_t times = 0; - int i; - - if (! GATHER_STATISTICS) - return; - - loc_array = XCNEWVEC (struct vec_descriptor *, vec_desc_hash->n_elements); - fprintf (stderr, "Heap vectors:\n"); - fprintf (stderr, "\n%-48s %10s %10s %10s\n", - "source location", "Leak", "Peak", "Times"); - fprintf (stderr, "-------------------------------------------------------\n"); - htab_traverse (vec_desc_hash, add_statistics, &nentries); - qsort (loc_array, nentries, sizeof (*loc_array), cmp_statistic); - for (i = 0; i < nentries; i++) - { - struct vec_descriptor *d = loc_array[i]; - allocated += d->allocated; - times += d->times; - } - for (i = 0; i < nentries; i++) - { - struct vec_descriptor *d = loc_array[i]; - const char *s1 = d->file; - const char *s2; - while ((s2 = strstr (s1, "gcc/"))) - s1 = s2 + 4; - sprintf (s, "%s:%i (%s)", s1, d->line, d->function); - s[48] = 0; - fprintf (stderr, "%-48s %10li:%4.1f%% %10li %10li:%4.1f%% \n", s, - (long)d->allocated, - (d->allocated) * 100.0 / allocated, - (long)d->peak, - (long)d->times, - (d->times) * 100.0 / times); - } - fprintf (stderr, "%-48s %10ld %10ld\n", - "Total", (long)allocated, (long)times); - fprintf (stderr, "\n%-48s %10s %10s %10s\n", - "source location", "Leak", "Peak", "Times"); - fprintf (stderr, "-------------------------------------------------------\n"); + vec_mem_desc.dump (VEC); } diff --git a/gcc/vec.h b/gcc/vec.h index aa9a255..7b96979 100644 --- a/gcc/vec.h +++ b/gcc/vec.h @@ -51,7 +51,7 @@ along with GCC; see the file COPYING3. If not see extern void ggc_free (void *); extern size_t ggc_round_alloc_size (size_t requested_size); - extern void *ggc_realloc (void *, size_t CXX_MEM_STAT_INFO); + extern void *ggc_realloc (void *, size_t MEM_STAT_DECL); # endif // GCC_GGC_H #endif // VEC_GC_ENABLED @@ -206,6 +206,8 @@ along with GCC; see the file COPYING3. If not see /* Support function for statistics. */ extern void dump_vec_loc_statistics (void); +/* Hashtable mapping vec addresses to descriptors. */ +extern htab_t vec_mem_usage_hash; /* Control data for vectors. This contains the number of allocated and used slots inside a vector. */ @@ -216,8 +218,8 @@ struct vec_prefix compilers that have stricter notions of PODness for types. */ /* Memory allocation support routines in vec.c. */ - void register_overhead (size_t, const char *, int, const char *); - void release_overhead (void); + void register_overhead (void *, size_t, size_t CXX_MEM_STAT_INFO); + void release_overhead (void *, size_t, bool CXX_MEM_STAT_INFO); static unsigned calculate_allocation (vec_prefix *, unsigned, bool); static unsigned calculate_allocation_1 (unsigned, unsigned); @@ -303,7 +305,7 @@ va_heap::reserve (vec<T, va_heap, vl_embed> *&v, unsigned reserve, bool exact gcc_checking_assert (alloc); if (GATHER_STATISTICS && v) - v->m_vecpfx.release_overhead (); + v->m_vecpfx.release_overhead (v, v->allocated (), false); size_t size = vec<T, va_heap, vl_embed>::embedded_size (alloc); unsigned nelem = v ? v->length () : 0; @@ -311,7 +313,7 @@ va_heap::reserve (vec<T, va_heap, vl_embed> *&v, unsigned reserve, bool exact v->embedded_init (alloc, nelem); if (GATHER_STATISTICS) - v->m_vecpfx.register_overhead (size FINAL_PASS_MEM_STAT); + v->m_vecpfx.register_overhead (v, alloc, nelem PASS_MEM_STAT); } @@ -325,7 +327,7 @@ va_heap::release (vec<T, va_heap, vl_embed> *&v) return; if (GATHER_STATISTICS) - v->m_vecpfx.release_overhead (); + v->m_vecpfx.release_overhead (v, v->allocated (), true); ::free (v); v = NULL; } -- 2.1.4