A recent patch increased GCC's memory consumption in some cases!

gcctest@suse.de gcctest@suse.de
Mon Mar 31 22:11: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:
  Peak amount of GGC memory still allocated after garbage collecting increased from 1000k to 1001k, overall 0.10%
  Amount of memory still referenced at the end of compilation increased from 957k to 959k, overall 0.22%
    Overall memory needed: 8152k
    Peak memory use before GGC: 1103k -> 1102k
    Peak memory use after GGC: 1000k -> 1001k
    Maximum of released memory in single GGC run: 130k -> 129k
    Garbage: 239k -> 235k
    Leak: 957k -> 959k
    Overhead: 80k -> 80k
    GGC runs: 2
Testing has produced no results
Testing has produced no results

comparing empty function compilation at -O0 -g level:
  Amount of memory still referenced at the end of compilation increased from 989k to 990k, overall 0.15%
    Overall memory needed: 8168k
    Peak memory use before GGC: 1130k -> 1129k
    Peak memory use after GGC: 1035k -> 1034k
    Maximum of released memory in single GGC run: 129k -> 126k
    Garbage: 241k -> 237k
    Leak: 989k -> 990k
    Overhead: 85k -> 84k
    GGC runs: 4
Testing has produced no results
Testing has produced no results

comparing empty function compilation at -O1 level:
  Peak amount of GGC memory still allocated after garbage collecting increased from 1000k to 1001k, overall 0.10%
  Amount of memory still referenced at the end of compilation increased from 957k to 959k, overall 0.22%
    Overall memory needed: 8204k
    Peak memory use before GGC: 1103k -> 1102k
    Peak memory use after GGC: 1000k -> 1001k
    Maximum of released memory in single GGC run: 132k -> 131k
    Garbage: 241k -> 237k
    Leak: 957k -> 959k
    Overhead: 81k -> 81k
    GGC runs: 2
  Amount of memory referenced pre-ipa increased from 960k to 962k, overall 0.26%
    Pre-IPA-Garbage: 228k -> 225k
    Pre-IPA-Leak: 960k -> 962k
    Pre-IPA-Overhead: 79k -> 79k
  Amount of memory referenced post-ipa increased from 960k to 962k, overall 0.26%
    Post-IPA-Garbage: 228k -> 225k
    Post-IPA-Leak: 960k -> 962k
    Post-IPA-Overhead: 79k -> 79k

comparing empty function compilation at -O2 level:
  Peak amount of GGC memory still allocated after garbage collecting increased from 1000k to 1002k, overall 0.20%
  Amount of memory still referenced at the end of compilation increased from 958k to 960k, overall 0.22%
    Overall memory needed: 8224k
    Peak memory use before GGC: 1103k -> 1102k
    Peak memory use after GGC: 1000k -> 1002k
    Maximum of released memory in single GGC run: 135k -> 134k
    Garbage: 245k -> 241k
    Leak: 958k -> 960k
    Overhead: 82k -> 81k
    GGC runs: 2
  Amount of memory referenced pre-ipa increased from 960k to 963k, overall 0.26%
    Pre-IPA-Garbage: 228k -> 225k
    Pre-IPA-Leak: 960k -> 963k
    Pre-IPA-Overhead: 79k -> 79k
  Amount of memory referenced post-ipa increased from 960k to 963k, overall 0.26%
    Post-IPA-Garbage: 228k -> 225k
    Post-IPA-Leak: 960k -> 963k
    Post-IPA-Overhead: 79k -> 79k

comparing empty function compilation at -O3 level:
  Peak amount of GGC memory still allocated after garbage collecting increased from 1000k to 1002k, overall 0.20%
  Amount of memory still referenced at the end of compilation increased from 958k to 960k, overall 0.22%
    Overall memory needed: 8224k
    Peak memory use before GGC: 1103k -> 1102k
    Peak memory use after GGC: 1000k -> 1002k
    Maximum of released memory in single GGC run: 135k -> 134k
    Garbage: 245k -> 241k
    Leak: 958k -> 960k
    Overhead: 82k -> 81k
    GGC runs: 2
  Amount of memory referenced pre-ipa increased from 960k to 963k, overall 0.26%
    Pre-IPA-Garbage: 228k -> 225k
    Pre-IPA-Leak: 960k -> 963k
    Pre-IPA-Overhead: 79k -> 79k
  Amount of memory referenced post-ipa increased from 960k to 963k, overall 0.26%
    Post-IPA-Garbage: 228k -> 225k
    Post-IPA-Leak: 960k -> 963k
    Post-IPA-Overhead: 79k -> 79k

comparing combine.c compilation at -O0 level:
    Overall memory needed: 22644k -> 22632k
    Peak memory use before GGC: 7810k -> 7799k
    Peak memory use after GGC: 7189k -> 7175k
    Maximum of released memory in single GGC run: 1550k -> 1546k
    Garbage: 37894k -> 37767k
    Leak: 5517k -> 5509k
    Overhead: 4637k -> 4605k
    GGC runs: 372
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O0 -g level:
  Amount of memory still referenced at the end of compilation decreased from 8383k to 7914k, overall -5.92%
    Overall memory needed: 24672k -> 24512k
    Peak memory use before GGC: 9648k -> 9499k
    Peak memory use after GGC: 8948k -> 8762k
    Maximum of released memory in single GGC run: 1838k -> 1831k
    Garbage: 38215k -> 38122k
    Leak: 8383k -> 7914k
    Overhead: 5264k -> 4997k
    GGC runs: 343 -> 346
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O1 level:
    Overall memory needed: 32860k -> 32864k
    Peak memory use before GGC: 16269k -> 16267k
    Peak memory use after GGC: 16085k -> 16084k
    Maximum of released memory in single GGC run: 1380k -> 1375k
    Garbage: 51626k -> 51557k
    Leak: 5655k -> 5657k
    Overhead: 5811k -> 5802k
    GGC runs: 438 -> 440
    Pre-IPA-Garbage: 13937k -> 13924k
    Pre-IPA-Leak: 17098k -> 17105k
    Pre-IPA-Overhead: 2120k -> 2131k
    Post-IPA-Garbage: 13937k -> 13924k
    Post-IPA-Leak: 17098k -> 17105k
    Post-IPA-Overhead: 2120k -> 2131k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 34668k -> 34672k
    Peak memory use before GGC: 16369k -> 16367k
    Peak memory use after GGC: 16202k -> 16201k
    Maximum of released memory in single GGC run: 1308k -> 1304k
    Garbage: 70953k -> 70886k
    Leak: 5985k -> 5987k
    Overhead: 8055k -> 8050k
    GGC runs: 508 -> 510
    Pre-IPA-Garbage: 14091k -> 14078k
    Pre-IPA-Leak: 17161k -> 17166k
    Pre-IPA-Overhead: 2134k -> 2145k
    Post-IPA-Garbage: 14091k -> 14078k
    Post-IPA-Leak: 17161k -> 17166k
    Post-IPA-Overhead: 2134k -> 2145k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 38416k -> 37396k
    Peak memory use before GGC: 16507k -> 16499k
    Peak memory use after GGC: 16208k -> 16206k
    Maximum of released memory in single GGC run: 2005k -> 2004k
    Garbage: 87989k -> 87900k
    Leak: 6045k -> 6049k
    Overhead: 9994k -> 9987k
    GGC runs: 544 -> 545
    Pre-IPA-Garbage: 14093k -> 14080k
    Pre-IPA-Leak: 17173k -> 17178k
    Pre-IPA-Overhead: 2136k -> 2146k
    Post-IPA-Garbage: 14093k -> 14080k
    Post-IPA-Leak: 17173k -> 17178k
    Post-IPA-Overhead: 2136k -> 2146k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 137436k -> 137488k
    Peak memory use before GGC: 57005k -> 56968k
    Peak memory use after GGC: 31462k -> 31393k
    Maximum of released memory in single GGC run: 33256k -> 32968k
    Garbage: 128634k -> 128704k
    Leak: 8368k -> 8125k
    Overhead: 14369k -> 14274k
    GGC runs: 292 -> 293
Testing has produced no results
Testing has produced no results

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 138680k -> 138592k
    Peak memory use before GGC: 58147k -> 58027k
    Peak memory use after GGC: 32604k -> 32452k
    Maximum of released memory in single GGC run: 33256k -> 32968k
    Garbage: 128886k -> 128694k
    Leak: 10043k -> 9812k
    Overhead: 14724k -> 14512k
    GGC runs: 288 -> 289
Testing has produced no results
Testing has produced no results

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 142840k -> 142904k
    Peak memory use before GGC: 56207k -> 56190k
    Peak memory use after GGC: 49970k
    Maximum of released memory in single GGC run: 23976k -> 23960k
    Garbage: 205213k -> 205125k
    Leak: 9261k -> 9262k
    Overhead: 24762k -> 24695k
    GGC runs: 315
    Pre-IPA-Garbage: 50376k -> 50369k
    Pre-IPA-Leak: 49662k -> 49664k
    Pre-IPA-Overhead: 7543k -> 7545k
    Post-IPA-Garbage: 50376k -> 50369k
    Post-IPA-Leak: 49662k -> 49664k
    Post-IPA-Overhead: 7543k -> 7545k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 184368k -> 184160k
    Peak memory use before GGC: 56811k
    Peak memory use after GGC: 51537k -> 51536k
    Maximum of released memory in single GGC run: 22875k -> 22857k
    Garbage: 245760k -> 245663k
    Leak: 10340k -> 10341k
    Overhead: 30399k -> 30329k
    GGC runs: 346 -> 347
    Pre-IPA-Garbage: 50448k -> 50441k
    Pre-IPA-Leak: 49666k -> 49667k
    Pre-IPA-Overhead: 7551k -> 7553k
    Post-IPA-Garbage: 50448k -> 50441k
    Post-IPA-Leak: 49666k -> 49667k
    Post-IPA-Overhead: 7551k -> 7553k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 189888k -> 190056k
    Peak memory use before GGC: 66354k -> 66353k
    Peak memory use after GGC: 62275k -> 62274k
    Maximum of released memory in single GGC run: 23372k -> 23354k
    Garbage: 269474k -> 269372k
    Leak: 10378k -> 10379k
    Overhead: 32188k -> 32117k
    GGC runs: 346
    Pre-IPA-Garbage: 50448k -> 50441k
    Pre-IPA-Leak: 49666k -> 49667k
    Pre-IPA-Overhead: 7551k -> 7553k
    Post-IPA-Garbage: 50448k -> 50441k
    Post-IPA-Leak: 49666k -> 49667k
    Post-IPA-Overhead: 7551k -> 7553k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 148728k -> 147667k
    Peak memory use before GGC: 84475k -> 83441k
    Peak memory use after GGC: 83639k -> 82614k
    Maximum of released memory in single GGC run: 17028k -> 16522k
    Garbage: 200760k -> 198620k
    Leak: 48035k -> 47798k
    Overhead: 23977k -> 23753k
    GGC runs: 417
    Pre-IPA-Garbage: 109722k -> 109267k
    Pre-IPA-Leak: 71086k -> 70553k
    Pre-IPA-Overhead: 12093k -> 12198k
    Post-IPA-Garbage: 109722k -> 109267k
    Post-IPA-Leak: 71086k -> 70553k
    Post-IPA-Overhead: 12093k -> 12198k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
  Amount of memory still referenced at the end of compilation decreased from 69717k to 65692k, overall -6.13%
    Overall memory needed: 169568k -> 166695k
    Peak memory use before GGC: 96073k -> 93664k
    Peak memory use after GGC: 95120k -> 92737k
    Maximum of released memory in single GGC run: 17470k -> 16605k
    Garbage: 206408k -> 204260k
    Leak: 69717k -> 65692k
    Overhead: 28955k -> 26796k
    GGC runs: 390 -> 393
  Amount of memory referenced pre-ipa decreased from 84367k to 81801k, overall -3.14%
    Pre-IPA-Garbage: 110366k -> 109911k
    Pre-IPA-Leak: 84367k -> 81801k
    Pre-IPA-Overhead: 14669k -> 13755k
  Amount of memory referenced post-ipa decreased from 84367k to 81801k, overall -3.14%
    Post-IPA-Garbage: 110366k -> 109911k
    Post-IPA-Leak: 84367k -> 81801k
    Post-IPA-Overhead: 14669k -> 13755k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 122216k -> 122096k
    Peak memory use before GGC: 83934k -> 83693k
    Peak memory use after GGC: 83097k -> 82863k
    Maximum of released memory in single GGC run: 16195k -> 15729k
    Garbage: 288380k -> 287811k
    Leak: 47316k -> 47081k
    Overhead: 29215k -> 29690k
    GGC runs: 513 -> 514
    Pre-IPA-Garbage: 154771k -> 154418k
    Pre-IPA-Leak: 87717k -> 87525k
    Pre-IPA-Overhead: 17477k -> 17990k
    Post-IPA-Garbage: 154771k -> 154418k
    Post-IPA-Leak: 87717k -> 87525k
    Post-IPA-Overhead: 17477k -> 17990k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 124688k -> 124588k
    Peak memory use before GGC: 84225k -> 83899k
    Peak memory use after GGC: 83294k -> 83032k
    Maximum of released memory in single GGC run: 16197k -> 15732k
    Garbage: 354432k -> 353951k
    Leak: 48419k -> 48192k
    Overhead: 36251k -> 36760k
    GGC runs: 584 -> 587
    Pre-IPA-Garbage: 157324k -> 156969k
    Pre-IPA-Leak: 87865k -> 87662k
    Pre-IPA-Overhead: 17758k -> 18269k
    Post-IPA-Garbage: 157324k -> 156969k
    Post-IPA-Leak: 87865k -> 87662k
    Post-IPA-Overhead: 17758k -> 18269k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 127576k -> 127412k
    Peak memory use before GGC: 85407k -> 85163k
    Peak memory use after GGC: 84531k -> 84296k
    Maximum of released memory in single GGC run: 16568k -> 16125k
    Garbage: 377761k -> 377247k
    Leak: 49001k -> 48766k
    Overhead: 38376k -> 38883k
    GGC runs: 609
    Pre-IPA-Garbage: 160050k -> 159684k
    Pre-IPA-Leak: 88148k -> 87944k
    Pre-IPA-Overhead: 18007k -> 18525k
    Post-IPA-Garbage: 160050k -> 159684k
    Post-IPA-Leak: 88148k -> 87944k
    Post-IPA-Overhead: 18007k -> 18525k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
  Amount of memory still referenced at the end of compilation increased from 6103k to 8934k, overall 46.38%
    Overall memory needed: 380451k -> 380354k
    Peak memory use before GGC: 101215k -> 100958k
    Peak memory use after GGC: 56868k -> 56611k
    Maximum of released memory in single GGC run: 50583k
    Garbage: 178905k -> 175620k
    Leak: 6103k -> 8934k
    Overhead: 30783k -> 30537k
    GGC runs: 107
Testing has produced no results
Testing has produced no results

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
  Amount of memory still referenced at the end of compilation increased from 7833k to 10245k, overall 30.79%
    Overall memory needed: 381243k -> 381054k
    Peak memory use before GGC: 101845k -> 101501k
    Peak memory use after GGC: 57499k -> 57155k
    Maximum of released memory in single GGC run: 50582k
    Garbage: 179020k -> 175735k
    Leak: 7833k -> 10245k
    Overhead: 31215k -> 30757k
    GGC runs: 111 -> 110
Testing has produced no results
Testing has produced no results

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
  Amount of memory still referenced at the end of compilation increased from 15009k to 16425k, overall 9.43%
    Overall memory needed: 428300k -> 428368k
    Peak memory use before GGC: 78692k -> 78563k
    Peak memory use after GGC: 70441k -> 70443k
    Maximum of released memory in single GGC run: 37596k -> 37595k
    Garbage: 233151k -> 231505k
    Leak: 15009k -> 16425k
    Overhead: 33234k -> 33115k
    GGC runs: 106
    Pre-IPA-Garbage: 52926k -> 52922k
    Pre-IPA-Leak: 49238k -> 49243k
    Pre-IPA-Overhead: 7120k -> 7123k
    Post-IPA-Garbage: 52926k -> 52922k
    Post-IPA-Leak: 49238k -> 49243k
    Post-IPA-Overhead: 7120k -> 7123k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
  Amount of memory still referenced at the end of compilation increased from 15182k to 16598k, overall 9.32%
    Overall memory needed: 353836k -> 353820k
    Peak memory use before GGC: 75428k -> 75430k
    Peak memory use after GGC: 70442k -> 70444k
    Maximum of released memory in single GGC run: 31731k -> 31528k
    Garbage: 243948k -> 242300k
    Leak: 15182k -> 16598k
    Overhead: 35646k -> 35527k
    GGC runs: 117
    Pre-IPA-Garbage: 91838k -> 91834k
    Pre-IPA-Leak: 77295k -> 77300k
    Pre-IPA-Overhead: 11793k -> 11796k
    Post-IPA-Garbage: 91838k -> 91834k
    Post-IPA-Leak: 77295k -> 77300k
    Post-IPA-Overhead: 11793k -> 11796k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
  Amount of memory still referenced at the end of compilation increased from 24893k to 25797k, overall 3.63%
    Overall memory needed: 1198664k -> 1199060k
    Peak memory use before GGC: 136589k -> 136591k
    Peak memory use after GGC: 127947k -> 127949k
    Maximum of released memory in single GGC run: 59901k -> 59897k
    Garbage: 369963k -> 368322k
    Leak: 24893k -> 25797k
    Overhead: 49887k -> 49768k
    GGC runs: 104
    Pre-IPA-Garbage: 91838k -> 91834k
    Pre-IPA-Leak: 77295k -> 77300k
    Pre-IPA-Overhead: 11793k -> 11796k
    Post-IPA-Garbage: 91838k -> 91834k
    Post-IPA-Leak: 77295k -> 77300k
    Post-IPA-Overhead: 11793k -> 11796k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog	2008-03-31 14:22:44.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-03-31 18:58:55.000000000 +0000
@@ -1,3 +1,54 @@
+2008-03-31  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+	PR middle-end/30186
+	* fold-const.c (fold_indirect_ref_1): Support accessing non first
+	element of the vector via a pointer.
+
+2008-03-31  Ian Lance Taylor  <iant@google.com>
+
+	* tlink.c (scan_linker_output): Look for symbol name in single
+	quotes.
+
+2008-03-31  Jan Hubicka  <jh@suse.cz>
+
+	* builtins.c (expand_builtin_setjmp_receiver): Update call of
+	get_arg_pointer_save_area.
+	* expr.c (init_expr): Just clear out rtl.expr.
+	* function.c (free_after_compilation): Clear out whole RTL structure.
+	(get_func_frame_size): Merge into ...
+	(get_frame_size): ... this one.
+	(assign_stack_local_1): Merge into ...
+	(assign_stack_local): ... this one.
+	(expand_function_end): Update call of get_arg_pointer_save_area.
+	(get_art_pointer_save_area): Remove cfun argument.
+	* function.h (emit_status): regno_pointer_align does not need length
+	attribute. Move x_regno_reg_rtx to ...
+	(regno_reg_rtx): ... new global array.
+	(reg_rtx_no, seq_stack, REGNO_POINTER_ALIGN): Update accestors.
+	(pending_stack_adjust, inhibit_defer_pop, saveregs_value,
+	apply_args_value, forced_labels, stack_pointer_delta): Update accestors.
+	(struct varasm_status): Move here from varasm.c
+	(struct rtl_data): New. Move here some fields from struct function.
+	(return_label, naked_return_label, stack_slot_list, parm_birth_insn,
+	frame_offset, stack_check_probe_note, arg_pointer_save_area,
+	used_temp_slots avail_temp_slots, temp_slot_level,
+	nonlocal_goto_handler_labels): Update accesstors.
+	(rtl): New global variable.
+	(struct function): Move some fileds to rtl_data.
+	(get_arg_pointer_save_area): Update prototype.
+	* emit-rtl.c (rtl): Declare.
+	(regno_reg_rtx): Declare.
+	(first_insn, last_insn, cur_insn_uid, last_location, first_label_num): Update.
+	(gen_reg_rtx): Update.
+	(init_virtual_regs): Do not tate emit_status argument.
+	(init_emit): Do not allocate emit.
+	* varasm.c (varasm_statuc): Move to function.h.
+	(n_deferred_constatns): Update accestor.
+	(init_varasm_status): Do not allocate varasm_status.
+	(force_const_mem, get_pool_size, output_constant_pool): Update.
+	* stmt.c (force_label_rtx): Do not use x_ prefixes.
+	(expand_nl_goto_receiver): Update get_arg_pointer_save_area.
+
 2008-03-31  Zdenek Dvorak  <ook@ucw.cz>
 
 	PR rtl-optimization/35729


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