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