A recent patch increased GCC's memory consumption!
gcctest@suse.de
gcctest@suse.de
Fri Jul 25 17:56:00 GMT 2008
Hi,
I am a friendly script caring about memory consumption in GCC. Please
contact jh@suse.cz if something is going wrong.
Comparing memory consumption on compilation of combine.i, insn-attrtab.i,
and generate-3.4.ii I got:
comparing empty function compilation at -O0 level:
Overall memory needed: 8475k
Peak memory use before GGC: 1409k
Peak memory use after GGC: 1338k
Maximum of released memory in single GGC run: 172k
Garbage: 249k
Leak: 1332k
Overhead: 159k
GGC runs: 3
Pre-IPA-Garbage: 238k
Pre-IPA-Leak: 1334k
Pre-IPA-Overhead: 158k
Post-IPA-Garbage: 238k
Post-IPA-Leak: 1334k
Post-IPA-Overhead: 158k
comparing empty function compilation at -O0 -g level:
Overall memory needed: 8503k
Peak memory use before GGC: 1436k
Peak memory use after GGC: 1366k
Maximum of released memory in single GGC run: 175k
Garbage: 252k
Leak: 1365k
Overhead: 164k
GGC runs: 3
Pre-IPA-Garbage: 238k
Pre-IPA-Leak: 1334k
Pre-IPA-Overhead: 158k
Post-IPA-Garbage: 238k
Post-IPA-Leak: 1334k
Post-IPA-Overhead: 158k
comparing empty function compilation at -O1 level:
Overall memory needed: 8547k
Peak memory use before GGC: 1409k
Peak memory use after GGC: 1338k
Maximum of released memory in single GGC run: 169k
Garbage: 252k
Leak: 1332k
Overhead: 160k
GGC runs: 4
Pre-IPA-Garbage: 238k
Pre-IPA-Leak: 1334k
Pre-IPA-Overhead: 158k
Post-IPA-Garbage: 238k
Post-IPA-Leak: 1334k
Post-IPA-Overhead: 158k
comparing empty function compilation at -O2 level:
Overall memory needed: 8575k
Peak memory use before GGC: 1409k
Peak memory use after GGC: 1338k
Maximum of released memory in single GGC run: 168k
Garbage: 257k
Leak: 1333k
Overhead: 161k
GGC runs: 4
Pre-IPA-Garbage: 238k
Pre-IPA-Leak: 1335k
Pre-IPA-Overhead: 158k
Post-IPA-Garbage: 238k
Post-IPA-Leak: 1335k
Post-IPA-Overhead: 158k
comparing empty function compilation at -O3 level:
Overall memory needed: 8579k
Peak memory use before GGC: 1409k
Peak memory use after GGC: 1338k
Maximum of released memory in single GGC run: 168k
Garbage: 257k
Leak: 1333k
Overhead: 161k
GGC runs: 4
Pre-IPA-Garbage: 238k
Pre-IPA-Leak: 1335k
Pre-IPA-Overhead: 158k
Post-IPA-Garbage: 238k
Post-IPA-Leak: 1335k
Post-IPA-Overhead: 158k
comparing combine.c compilation at -O0 level:
Overall memory needed: 32047k
Peak memory use before GGC: 18853k
Peak memory use after GGC: 18660k
Maximum of released memory in single GGC run: 1842k
Garbage: 39844k
Leak: 5766k
Overhead: 4991k
GGC runs: 340
Pre-IPA-Garbage: 13096k
Pre-IPA-Leak: 20015k
Pre-IPA-Overhead: 2339k
Post-IPA-Garbage: 13096k
Post-IPA-Leak: 20015k
Post-IPA-Overhead: 2339k
comparing combine.c compilation at -O0 -g level:
Overall memory needed: 33995k
Peak memory use before GGC: 20746k
Peak memory use after GGC: 20530k
Maximum of released memory in single GGC run: 1851k
Garbage: 40217k
Leak: 9040k
Overhead: 5812k
GGC runs: 325
Pre-IPA-Garbage: 13195k
Pre-IPA-Leak: 22291k
Pre-IPA-Overhead: 2830k
Post-IPA-Garbage: 13195k
Post-IPA-Leak: 22291k
Post-IPA-Overhead: 2830k
comparing combine.c compilation at -O1 level:
Overall memory needed: 30603k -> 30599k
Peak memory use before GGC: 16650k
Peak memory use after GGC: 16484k
Maximum of released memory in single GGC run: 1396k
Garbage: 50469k
Leak: 5734k
Overhead: 5777k
GGC runs: 409
Pre-IPA-Garbage: 13941k
Pre-IPA-Leak: 17656k
Pre-IPA-Overhead: 2288k
Post-IPA-Garbage: 13941k
Post-IPA-Leak: 17656k
Post-IPA-Overhead: 2288k
comparing combine.c compilation at -O2 level:
Overall memory needed: 31919k
Peak memory use before GGC: 16746k
Peak memory use after GGC: 16580k
Maximum of released memory in single GGC run: 1334k
Garbage: 66412k
Leak: 5763k
Overhead: 7589k
GGC runs: 481
Pre-IPA-Garbage: 14090k
Pre-IPA-Leak: 17718k
Pre-IPA-Overhead: 2301k
Post-IPA-Garbage: 14090k
Post-IPA-Leak: 17718k
Post-IPA-Overhead: 2301k
comparing combine.c compilation at -O3 level:
Overall memory needed: 37639k -> 37647k
Peak memory use before GGC: 16770k
Peak memory use after GGC: 16596k
Maximum of released memory in single GGC run: 2122k
Garbage: 83077k
Leak: 5782k
Overhead: 9220k
GGC runs: 513
Pre-IPA-Garbage: 14091k
Pre-IPA-Leak: 17729k
Pre-IPA-Overhead: 2302k
Post-IPA-Garbage: 14091k
Post-IPA-Leak: 17729k
Post-IPA-Overhead: 2302k
comparing insn-attrtab.c compilation at -O0 level:
Overall memory needed: 148403k -> 148235k
Peak memory use before GGC: 66309k
Peak memory use after GGC: 58720k
Maximum of released memory in single GGC run: 28091k
Garbage: 135591k
Leak: 7596k
Overhead: 14872k
GGC runs: 259
Pre-IPA-Garbage: 43667k
Pre-IPA-Leak: 60539k
Pre-IPA-Overhead: 7757k
Post-IPA-Garbage: 43667k
Post-IPA-Leak: 60539k
Post-IPA-Overhead: 7757k
comparing insn-attrtab.c compilation at -O0 -g level:
Overall memory needed: 149711k
Peak memory use before GGC: 67584k
Peak memory use after GGC: 59992k
Maximum of released memory in single GGC run: 28091k
Garbage: 136116k
Leak: 9247k
Overhead: 15331k
GGC runs: 253
Pre-IPA-Garbage: 43724k
Pre-IPA-Leak: 62081k
Pre-IPA-Overhead: 8094k
Post-IPA-Garbage: 43724k
Post-IPA-Leak: 62081k
Post-IPA-Overhead: 8094k
comparing insn-attrtab.c compilation at -O1 level:
Overall memory needed: 131999k
Peak memory use before GGC: 53459k
Peak memory use after GGC: 47720k
Maximum of released memory in single GGC run: 23289k
Garbage: 202867k
Leak: 6978k
Overhead: 24163k
GGC runs: 298
Pre-IPA-Garbage: 50254k
Pre-IPA-Leak: 48654k
Pre-IPA-Overhead: 7367k
Post-IPA-Garbage: 50254k
Post-IPA-Leak: 48654k
Post-IPA-Overhead: 7367k
comparing insn-attrtab.c compilation at -O2 level:
Overall memory needed: 178755k -> 178751k
Peak memory use before GGC: 54123k
Peak memory use after GGC: 48728k
Maximum of released memory in single GGC run: 22127k
Garbage: 239725k
Leak: 6986k
Overhead: 29748k
GGC runs: 331
Pre-IPA-Garbage: 50323k
Pre-IPA-Leak: 48659k
Pre-IPA-Overhead: 7374k
Post-IPA-Garbage: 50323k
Post-IPA-Leak: 48659k
Post-IPA-Overhead: 7374k
comparing insn-attrtab.c compilation at -O3 level:
Overall memory needed: 187239k
Peak memory use before GGC: 65039k
Peak memory use after GGC: 62171k
Maximum of released memory in single GGC run: 24136k
Garbage: 266382k
Leak: 6994k
Overhead: 31585k
GGC runs: 333
Pre-IPA-Garbage: 50323k
Pre-IPA-Leak: 48659k
Pre-IPA-Overhead: 7374k
Post-IPA-Garbage: 50323k
Post-IPA-Leak: 48659k
Post-IPA-Overhead: 7374k
comparing Gerald's testcase PR8361 compilation at -O0 level:
Peak amount of GGC memory allocated before garbage collecting increased from 83343k to 84433k, overall 1.31%
Peak amount of GGC memory still allocated after garbage collecting increased from 82490k to 83576k, overall 1.32%
Amount of produced GGC garbage increased from 205361k to 207800k, overall 1.19%
Amount of memory still referenced at the end of compilation increased from 49661k to 49910k, overall 0.50%
Overall memory needed: 148705k -> 150637k
Peak memory use before GGC: 83343k -> 84433k
Peak memory use after GGC: 82490k -> 83576k
Maximum of released memory in single GGC run: 14621k -> 14926k
Garbage: 205361k -> 207800k
Leak: 49661k -> 49910k
Overhead: 26144k -> 26360k
GGC runs: 414 -> 417
Amount of produced pre-ipa-GGC garbage increased from 107822k to 110255k, overall 2.26%
Amount of memory referenced pre-ipa increased from 88230k to 88477k, overall 0.28%
Pre-IPA-Garbage: 107822k -> 110255k
Pre-IPA-Leak: 88230k -> 88477k
Pre-IPA-Overhead: 13911k -> 14126k
Amount of produced post-ipa-GGC garbage increased from 107822k to 110255k, overall 2.26%
Amount of memory referenced post-ipa increased from 88230k to 88477k, overall 0.28%
Post-IPA-Garbage: 107822k -> 110255k
Post-IPA-Leak: 88230k -> 88477k
Post-IPA-Overhead: 13911k -> 14126k
comparing Gerald's testcase PR8361 compilation at -O0 -g level:
Peak amount of GGC memory allocated before garbage collecting increased from 97292k to 98696k, overall 1.44%
Peak amount of GGC memory still allocated after garbage collecting increased from 96328k to 97719k, overall 1.44%
Amount of produced GGC garbage increased from 210991k to 213621k, overall 1.25%
Amount of memory still referenced at the end of compilation increased from 76251k to 76693k, overall 0.58%
Overall memory needed: 166245k -> 168529k
Peak memory use before GGC: 97292k -> 98696k
Peak memory use after GGC: 96328k -> 97719k
Maximum of released memory in single GGC run: 14909k -> 15504k
Garbage: 210991k -> 213621k
Leak: 76251k -> 76693k
Overhead: 32832k -> 33066k
GGC runs: 385 -> 389
Amount of produced pre-ipa-GGC garbage increased from 108461k to 110908k, overall 2.26%
Amount of memory referenced pre-ipa increased from 104800k to 105116k, overall 0.30%
Pre-IPA-Garbage: 108461k -> 110908k
Pre-IPA-Leak: 104800k -> 105116k
Pre-IPA-Overhead: 17450k -> 17680k
Amount of produced post-ipa-GGC garbage increased from 108461k to 110908k, overall 2.26%
Amount of memory referenced post-ipa increased from 104800k to 105116k, overall 0.30%
Post-IPA-Garbage: 108461k -> 110908k
Post-IPA-Leak: 104800k -> 105116k
Post-IPA-Overhead: 17450k -> 17680k
comparing Gerald's testcase PR8361 compilation at -O1 level:
Peak amount of GGC memory allocated before garbage collecting increased from 80338k to 81606k, overall 1.58%
Peak amount of GGC memory still allocated after garbage collecting increased from 79523k to 80791k, overall 1.59%
Amount of produced GGC garbage increased from 283146k to 286799k, overall 1.29%
Amount of memory still referenced at the end of compilation increased from 46427k to 46887k, overall 0.99%
Overall memory needed: 110124k -> 111653k
Peak memory use before GGC: 80338k -> 81606k
Peak memory use after GGC: 79523k -> 80791k
Maximum of released memory in single GGC run: 14441k -> 14786k
Garbage: 283146k -> 286799k
Leak: 46427k -> 46887k
Overhead: 28634k -> 28989k
GGC runs: 505 -> 509
Amount of produced pre-ipa-GGC garbage increased from 149613k to 152239k, overall 1.76%
Amount of memory referenced pre-ipa increased from 84262k to 84520k, overall 0.31%
Pre-IPA-Garbage: 149613k -> 152239k
Pre-IPA-Leak: 84262k -> 84520k
Pre-IPA-Overhead: 17163k -> 17402k
Amount of produced post-ipa-GGC garbage increased from 149613k to 152239k, overall 1.76%
Amount of memory referenced post-ipa increased from 84262k to 84520k, overall 0.31%
Post-IPA-Garbage: 149613k -> 152239k
Post-IPA-Leak: 84262k -> 84520k
Post-IPA-Overhead: 17163k -> 17402k
comparing Gerald's testcase PR8361 compilation at -O2 level:
Peak amount of GGC memory allocated before garbage collecting increased from 80429k to 81700k, overall 1.58%
Peak amount of GGC memory still allocated after garbage collecting increased from 79614k to 80884k, overall 1.60%
Amount of produced GGC garbage increased from 335123k to 339211k, overall 1.22%
Amount of memory still referenced at the end of compilation increased from 46551k to 46961k, overall 0.88%
Overall memory needed: 111400k -> 113169k
Peak memory use before GGC: 80429k -> 81700k
Peak memory use after GGC: 79614k -> 80884k
Maximum of released memory in single GGC run: 14443k -> 14788k
Garbage: 335123k -> 339211k
Leak: 46551k -> 46961k
Overhead: 33522k -> 33953k
GGC runs: 572 -> 578
Amount of produced pre-ipa-GGC garbage increased from 151211k to 153846k, overall 1.74%
Amount of memory referenced pre-ipa increased from 84127k to 84396k, overall 0.32%
Pre-IPA-Garbage: 151211k -> 153846k
Pre-IPA-Leak: 84127k -> 84396k
Pre-IPA-Overhead: 17297k -> 17538k
Amount of produced post-ipa-GGC garbage increased from 151211k to 153846k, overall 1.74%
Amount of memory referenced post-ipa increased from 84127k to 84396k, overall 0.32%
Post-IPA-Garbage: 151211k -> 153846k
Post-IPA-Leak: 84127k -> 84396k
Post-IPA-Overhead: 17297k -> 17538k
comparing Gerald's testcase PR8361 compilation at -O3 level:
Overall memory needed: 119580k -> 119581k
Peak memory use before GGC: 81700k
Peak memory use after GGC: 80884k
Maximum of released memory in single GGC run: 14788k
Garbage: 363823k
Leak: 46936k
Overhead: 35784k
GGC runs: 594
Pre-IPA-Garbage: 153846k
Pre-IPA-Leak: 84400k
Pre-IPA-Overhead: 17538k
Post-IPA-Garbage: 153846k
Post-IPA-Leak: 84400k
Post-IPA-Overhead: 17538k
comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
Overall memory needed: 377732k -> 377731k
Peak memory use before GGC: 101152k
Peak memory use after GGC: 56806k
Maximum of released memory in single GGC run: 50582k
Garbage: 180611k
Leak: 6622k
Overhead: 30732k
GGC runs: 88
Pre-IPA-Garbage: 12467k
Pre-IPA-Leak: 21983k
Pre-IPA-Overhead: 1847k
Post-IPA-Garbage: 12467k
Post-IPA-Leak: 21983k
Post-IPA-Overhead: 1847k
comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
Overall memory needed: 378692k -> 378691k
Peak memory use before GGC: 101851k
Peak memory use after GGC: 57504k
Maximum of released memory in single GGC run: 50583k
Garbage: 180728k
Leak: 8667k
Overhead: 31318k
GGC runs: 95
Pre-IPA-Garbage: 12475k
Pre-IPA-Leak: 22232k
Pre-IPA-Overhead: 1901k
Post-IPA-Garbage: 12475k
Post-IPA-Leak: 22232k
Post-IPA-Overhead: 1901k
comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
Overall memory needed: 384083k
Peak memory use before GGC: 75898k
Peak memory use after GGC: 67842k
Maximum of released memory in single GGC run: 34793k
Garbage: 243329k
Leak: 8242k
Overhead: 30714k
GGC runs: 94
Pre-IPA-Garbage: 49540k
Pre-IPA-Leak: 63958k
Pre-IPA-Overhead: 6527k
Post-IPA-Garbage: 49540k
Post-IPA-Leak: 63958k
Post-IPA-Overhead: 6527k
comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
Overall memory needed: 321991k -> 319143k
Peak memory use before GGC: 75899k
Peak memory use after GGC: 67843k
Maximum of released memory in single GGC run: 32467k
Garbage: 254882k
Leak: 8405k
Overhead: 33489k
GGC runs: 106
Pre-IPA-Garbage: 107535k
Pre-IPA-Leak: 75847k
Pre-IPA-Overhead: 10845k
Post-IPA-Garbage: 107535k
Post-IPA-Leak: 75847k
Post-IPA-Overhead: 10845k
comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
Overall memory needed: 1068331k -> 1068407k
Peak memory use before GGC: 142724k
Peak memory use after GGC: 129380k
Maximum of released memory in single GGC run: 59679k
Garbage: 356330k
Leak: 11384k
Overhead: 38131k
GGC runs: 92
Pre-IPA-Garbage: 107535k
Pre-IPA-Leak: 75847k
Pre-IPA-Overhead: 10845k
Post-IPA-Garbage: 107535k
Post-IPA-Leak: 75847k
Post-IPA-Overhead: 10845k
Head of the ChangeLog is:
--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog 2008-07-25 03:22:53.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog 2008-07-25 14:44:17.000000000 +0000
@@ -1,3 +1,79 @@
+2008-07-24 Jan Hubicka <jh@suse.cz>
+
+ * cgraphbuild.c (record_reference): Drop non-unit-at-a-time code.
+ (build_cgraph_edges): Likewise.
+ * cgraph.c (cgraph_node): Do not update assembler hash.
+ (cgraph_remove_node): Drop non-unit-at-a-time code.
+ * tree-pass.h (pass_O0_always_inline): Remove.
+ * ipa-reference.c (gate_reference): Remove unit-at-a-time check.
+ * toplev.c (process_options): Flag unit-at-a-time does not imply
+ no section anchors.
+ * cgraphunit.c: Update comments.
+ (decide_is_function_needed): Drop non-unit-at-a-time mode.
+ (cgraph_assemble_pending_functions): Remove.
+ (cgraph_reset_node): Drop non-unit-at-a-time code.
+ (cgraph_finalize_function): Likewise.
+ (cgraph_analyze_function): Likewise.
+ (cgraph_finalize_compilation_unit): Likewise.
+ (cgraph_expand_function): Likewise.
+ (cgraph_optimize): Likesise.
+ (save_inline_function_body): Likewise.
+ * ipa-pure-const.c (gate_pure_const): Drop flag_unit_at_a_time check.
+ * tree-ssa-alias.c (maybe_be_aliased): Likewise.
+ * ipa-inline.c: Update comments.
+ (enum inlining_mode): remove INLINE_SPEED.
+ (cgraph_clone_inlined_nodes): Drop unit-at-a-time check.
+ (cgraph_mark_inline_edge): Likewise.
+ (try_inline): Likewise.
+ (cgraph_decide_inlining_incrementally): Likewise.
+ (cgraph_gate_inlining): Remove.
+ (cgraph_early_inlining): Remove flag_unit_at_a_time checks.
+ (cgraph_gate_early_inlining): Likewise.
+ (gate_inline_passes): Remove.
+ (pass_inline_parameters, pass_ipa_inline): Remove gates.
+ (cgraph_gate_O0_always_inline, cgraph_O0_always_inline,
+ pass_O0_always_inline): Remove.
+ * c-pch.c (c_pch_matching): Remove -funit-at-a-time.
+ * dwarf2out.c (reference_to_unused): Remove flag_unit_at_a_time check.
+ * opts.c (no_unit_at_a_time_default): Remove.
+ (decode_options): Remove flag_unit_at_a_time reset and warning.
+ * opts.h (no_unit_at_a_time_default): Remove.
+ * c-decl.c (diagnose_mismatched_decls): Do not require inline keyword
+ early in GNU dialect.
+ (merge_decls): Update comment; drop unit-at-a-time check.
+ (finish_decl): Likewise.
+ (grok_declaration): Remove flag_inline_trees code.
+ (finish_functions): Return on function returning non-void on all
+ statics.
+ * ipa-tye-escape.c (gate_type_escape_vars): Remove.
+ * cfgexpand.c (expand_one_static_var): Remove.
+ (expand_one_var): Remove expand_one_static_var call.
+ (expand_used_vars_for_block): Remove flag_unit_a_time check.
+ * c-opts.c (c_common_post_options): Remove flag_inline_trees code
+ and flag_unit_at_a-time compatibility checks.
+ * varasm.c (assemble_alias): Remove flag_unit_at_a_time check.
+ * tree-inline.c (flag_inline_trees): Remove.
+ (inlinable_function_p): Don't check it.
+ (expand_call_inline): Remove non-unit-at-a-time code.
+ * tree-inline.h (flag_inline_trees): Remove.
+ * tree-optimize.c (execute_early_local_optimizations): Remove
+ unit-at-a-time checks.
+ (tree_rest_of_compilation): Likewise.
+ * combine.c (setup_incoming_promotions): Likewise.
+ * tree-profile.c (tree_gen_ic_func_profiler): Likewise.
+ * tree-ssa-structalias.c (delete_points_to_sets): Likewise.
+ * passes.c (pass_inline_parameters): Update comments; remove
+ O0_alwaysinline pass.
+ (execute_one_ipa_transform_pass): Do not reset in_gimple_form.
+ (execute_one_pass): Likewise.
+ * i386.c (ix86_function_regparm): Remove unit-at-a-time check.
+ (ix86_function_sseregparm): Likewise.
+ * arm.c (arm_function_in_section_p): Likewise.
+ * bfin.c (bfin_load_pic_reg, bfin_function_ok_for_sibcall): Likewise.
+ * varpool.c: Update comments.
+ (decide_is_variable_needed): Remove unit-at-a-time checks.
+ (varpool_finalize_decl): Likewise.
+
2008-07-24 Kaz Kojima <kkojima@gcc.gnu.org>
* config/sh/sh.h (OPTIMIZATION_OPTIONS): Set flag_omit_frame_pointer
--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog.cp 2008-07-24 19:55:14.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/cp/ChangeLog 2008-07-25 14:44:15.000000000 +0000
@@ -1,3 +1,10 @@
+2008-07-23 Jan Hubicka <jh@suse.cz>
+
+ * cp/decl.c (duplicate_decls): Update comment and unit-at-a-time.
+ (grogfndecl): Drop flag_inline_trees code.
+ * cp/pt.c (instantiate_decl): Drop flag_iline_trees code.
+ * cp/lex.c (cxx_init): Do not set unit-at-a-time.
+
2008-07-23 Jason Merrill <jason@redhat.com>
Implement defaulted/deleted functions as per N2346
The results can be reproduced by building a compiler with
--enable-gather-detailed-mem-stats targetting x86-64
and compiling preprocessed combine.c or testcase from PR8632 with:
-fmem-report --param=ggc-min-heapsize=1024 --param=ggc-min-expand=1 -Ox -Q
The memory consumption summary appears in the dump after detailed listing
of the places they are allocated in. Peak memory consumption is actually
computed by looking for maximal value in {GC XXXX -> YYYY} report.
Your testing script.
More information about the Gcc-regression
mailing list