https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78494
Bug ID: 78494 Summary: Issues pointed out by valgrind --tool=exp-dhat Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ipa Assignee: unassigned at gcc dot gnu.org Reporter: trippels at gcc dot gnu.org Target Milestone: --- Running, e.g.: % valgrind --tool=exp-dhat /var/tmp/gcc_test/usr/local/bin/../libexec/gcc/x86_64-pc-linux-gnu/7.0.0/cc1plus -quiet -v -iprefix /var/tmp/gcc_test/usr/local/bin/../lib/gcc/x86_64-pc-linux-gnu/7.0.0/ -D_GNU_SOURCE tramp3d-v4.cpp -quiet -dumpbase tramp3d-v4.cpp -mtune=generic -march=x86-64 -auxbase tramp3d-v4 -Ofast -w -version /tmp/ccrdBsk6.s Shows: ==27457== ======== SUMMARY STATISTICS ======== ==27457== ==27457== guest_insns: 196,805,402,120 ==27457== ==27457== max_live: 27,271,475 in 125,424 blocks ==27457== ==27457== tot_alloc: 6,718,942,575 in 38,913,111 blocks ==27457== ==27457== insns per allocated byte: 29 ==27457== ==27457== ==27457== ======== ORDERED BY decreasing "max-bytes-live": top 10 allocators ======== ==27457== ==27457== -------------------- 1 of 10 -------------------- ==27457== max-live: 4,194,296 in 1 blocks ==27457== tot-alloc: 4,194,296 in 1 blocks (avg size 4194296.00) ==27457== deaths: none (none of these blocks were freed) ==27457== acc-ratios: 3.62 rd, 1.17 wr (15,192,712 b-read, 4,935,920 b-written) ==27457== at 0x402F015: calloc (vg_replace_malloc.c:711) ==27457== by 0x15F4D90: xcalloc (xmalloc.c:163) ==27457== by 0x15F1EFC: htab_expand (hashtab.c:550) ==27457== by 0x15F25E9: htab_find_slot_with_hash (hashtab.c:645) ==27457== by 0x15BDFAC: get_combined_adhoc_loc(line_maps*, unsigned int, source_range, void*) (line-map.c:216) ==27457== by 0x102D6B5: set_block(unsigned int, tree_node*) (line-map.h:1020) ==27457== by 0x102D6F5: tree_set_block(tree_node*, tree_node*) (tree.c:12089) ==27457== by 0xDF53EA: remap_gimple_op_r(tree_node**, int*, void*) (tree-inline.c:1031) ==27457== by 0x1040BF2: walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_n ode**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*)) (tree.c:11723) ==27457== by 0xAE63ED: walk_gimple_op(gimple*, tree_node* (*)(tree_node**, int*, void*), walk_stmt_info*) (gimple-walk.c:244) ==27457== by 0xDEFB90: remap_gimple_stmt(gimple*, copy_body_data*) (tree-inline.c:1770) ==27457== by 0xDF0B06: copy_bb(copy_body_data*, basic_block_def*, int, long) (tree-inline.c:1828) ==27457== ==27457== - richi pointed out on IRC that replacing TREE_SET_BLOCK (*tp, new_block) with TREE_SET_BLOCK (*tp, NULL) in remap_gimple_op_r (gcc/tree-inline.c:1031) might help: ==4991== ======== ORDERED BY decreasing "max-bytes-live": top 10 allocators ======== ==4991== ==4991== -------------------- 1 of 10 -------------------- ==4991== max-live: 4,194,296 in 1 blocks ==4991== tot-alloc: 4,194,296 in 1 blocks (avg size 4194296.00) ==4991== deaths: none (none of these blocks were freed) ==4991== acc-ratios: 1.06 rd, 0.48 wr (4,454,960 b-read, 2,037,936 b-written) ==4991== at 0x402F015: calloc (vg_replace_malloc.c:711) ==4991== by 0x15F4D10: xcalloc (xmalloc.c:163) ==4991== by 0x15F1E7C: htab_expand (hashtab.c:550) ==4991== by 0x15F2569: htab_find_slot_with_hash (hashtab.c:645) ==4991== by 0x15BDF2C: get_combined_adhoc_loc(line_maps*, unsigned int, source_range, void*) (line-map.c:216) ==4991== by 0x102D635: set_block(unsigned int, tree_node*) (line-map.h:1020) ==4991== by 0xDEF6BD: remap_gimple_stmt(gimple*, copy_body_data*) (gimple.h:1758) ==4991== by 0xDF0AB6: copy_bb(copy_body_data*, basic_block_def*, int, long) (tree-inline.c:1828) ==4991== by 0xDF210C: copy_body(copy_body_data*, long, int, basic_block_def*, basic_block_def*, basic_block_def*) (tree-inline.c:2773) ==4991== by 0xDF77A0: expand_call_inline(basic_block_def*, gimple*, copy_body_data*) (tree-inline.c:4751) ==4991== by 0xDF975C: optimize_inline_calls(tree_node*) (tree-inline.c:4896) ==4991== by 0x14E0231: early_inliner(function*) (ipa-inline.c:2721) Now only 48% of the allocation is actually written to (acc-ratios: 0.48 wr). Another possible leak: ==4991== -------------------- 10 of 10 -------------------- ==4991== max-live: 1,048,576 in 1 blocks ==4991== tot-alloc: 1,048,576 in 1 blocks (avg size 1048576.00) ==4991== deaths: none (none of these blocks were freed) ==4991== acc-ratios: 5.87 rd, 0.78 wr (6,165,008 b-read, 825,104 b-written) ==4991== at 0x402F015: calloc (vg_replace_malloc.c:711) ==4991== by 0x15F4D10: xcalloc (xmalloc.c:163) ==4991== by 0x15C6688: ht_lookup_with_hash(ht*, unsigned char const*, unsigned long, unsigned int, ht_lookup_option) (symtab.c:188) ==4991== by 0xD6EB27: get_identifier(char const*) (stringpool.c:110) ==4991== by 0xAC8CB1: create_tmp_var_name(char const*) (gimple-expr.c:427) ==4991== by 0xAC8CEA: create_tmp_var_raw(tree_node*, char const*) (gimple-expr.c:438) ==4991== by 0xF4301F: run_scc_vn(vn_lookup_kind) (tree-ssa-sccvn.c:4383) ==4991== by 0xF10155: (anonymous namespace)::pass_fre::execute(function*) (tree-ssa-pre.c:5151) ==4991== by 0xCA0793: execute_one_pass(opt_pass*) (passes.c:2370) ==4991== by 0xCA0EB0: execute_pass_list_1(opt_pass*) (passes.c:2459) ==4991== by 0xCA0EC2: execute_pass_list_1(opt_pass*) (passes.c:2460) ==4991== by 0xCA0F0C: execute_pass_list(function*, opt_pass*) (passes.c:2470)