A recent patch increased GCC's memory consumption!
gcctest@suse.de
gcctest@suse.de
Tue Jun 2 12:17:00 GMT 2009
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: 8801k
Peak memory use before GGC: 1488k
Peak memory use after GGC: 1437k
Maximum of released memory in single GGC run: 86k
Garbage: 219k -> 219k
Leak: 1537k -> 1537k
Overhead: 187k -> 187k
GGC runs: 4
Pre-IPA-Garbage: 210k
Pre-IPA-Leak: 1540k
Pre-IPA-Overhead: 186k
Post-IPA-Garbage: 210k
Post-IPA-Leak: 1540k
Post-IPA-Overhead: 186k
comparing empty function compilation at -O0 -g level:
Amount of produced GGC garbage increased from 220k to 221k, overall 0.34%
Overall memory needed: 8825k
Peak memory use before GGC: 1516k
Peak memory use after GGC: 1464k
Maximum of released memory in single GGC run: 87k -> 88k
Garbage: 220k -> 221k
Leak: 1569k -> 1570k
Overhead: 192k -> 192k
GGC runs: 4
Pre-IPA-Garbage: 210k
Pre-IPA-Leak: 1540k
Pre-IPA-Overhead: 186k
Post-IPA-Garbage: 210k
Post-IPA-Leak: 1540k
Post-IPA-Overhead: 186k
comparing empty function compilation at -O1 level:
Overall memory needed: 8929k -> 8801k
Peak memory use before GGC: 1488k
Peak memory use after GGC: 1437k
Maximum of released memory in single GGC run: 90k
Garbage: 224k
Leak: 1537k
Overhead: 188k
GGC runs: 4
Pre-IPA-Garbage: 212k
Pre-IPA-Leak: 1540k
Pre-IPA-Overhead: 186k
Post-IPA-Garbage: 212k
Post-IPA-Leak: 1540k
Post-IPA-Overhead: 186k
comparing empty function compilation at -O2 level:
Overall memory needed: 8929k
Peak memory use before GGC: 1488k
Peak memory use after GGC: 1437k
Maximum of released memory in single GGC run: 88k
Garbage: 229k
Leak: 1537k
Overhead: 189k
GGC runs: 5
Pre-IPA-Garbage: 212k
Pre-IPA-Leak: 1540k
Pre-IPA-Overhead: 186k
Post-IPA-Garbage: 212k
Post-IPA-Leak: 1540k
Post-IPA-Overhead: 186k
comparing empty function compilation at -O3 level:
Overall memory needed: 8933k
Peak memory use before GGC: 1488k
Peak memory use after GGC: 1437k
Maximum of released memory in single GGC run: 88k
Garbage: 229k
Leak: 1537k
Overhead: 189k
GGC runs: 5
Pre-IPA-Garbage: 212k
Pre-IPA-Leak: 1540k
Pre-IPA-Overhead: 186k
Post-IPA-Garbage: 212k
Post-IPA-Leak: 1540k
Post-IPA-Overhead: 186k
comparing combine.c compilation at -O0 level:
Overall memory needed: 31453k -> 31461k
Peak memory use before GGC: 17484k -> 17483k
Peak memory use after GGC: 17031k -> 17030k
Maximum of released memory in single GGC run: 1913k
Garbage: 37964k -> 37959k
Leak: 7161k -> 7157k
Overhead: 5496k -> 5495k
GGC runs: 333
Pre-IPA-Garbage: 12532k
Pre-IPA-Leak: 18412k
Pre-IPA-Overhead: 2504k
Post-IPA-Garbage: 12532k
Post-IPA-Leak: 18412k
Post-IPA-Overhead: 2504k
comparing combine.c compilation at -O0 -g level:
Amount of produced GGC garbage increased from 38166k to 38215k, overall 0.13%
Amount of memory still referenced at the end of compilation increased from 10429k to 10464k, overall 0.34%
Overall memory needed: 33369k -> 33377k
Peak memory use before GGC: 19390k -> 19395k
Peak memory use after GGC: 18870k
Maximum of released memory in single GGC run: 1923k -> 1924k
Garbage: 38166k -> 38215k
Leak: 10429k -> 10464k
Overhead: 6308k -> 6311k
GGC runs: 315
Pre-IPA-Garbage: 12551k
Pre-IPA-Leak: 20661k
Pre-IPA-Overhead: 2986k
Post-IPA-Garbage: 12551k
Post-IPA-Leak: 20661k
Post-IPA-Overhead: 2986k
comparing combine.c compilation at -O1 level:
Overall memory needed: 32085k -> 32097k
Peak memory use before GGC: 16554k
Peak memory use after GGC: 16381k
Maximum of released memory in single GGC run: 1379k -> 1380k
Garbage: 46007k -> 46002k
Leak: 7168k -> 7149k
Overhead: 6458k -> 6457k
GGC runs: 388
Pre-IPA-Garbage: 13407k
Pre-IPA-Leak: 17703k
Pre-IPA-Overhead: 2552k
Post-IPA-Garbage: 13407k
Post-IPA-Leak: 17703k
Post-IPA-Overhead: 2552k
comparing combine.c compilation at -O2 level:
Overall memory needed: 32893k -> 33025k
Peak memory use before GGC: 16618k
Peak memory use after GGC: 16448k
Maximum of released memory in single GGC run: 1491k
Garbage: 56639k -> 56610k
Leak: 7217k -> 7191k
Overhead: 8100k -> 8094k
GGC runs: 443 -> 442
Pre-IPA-Garbage: 13436k
Pre-IPA-Leak: 17725k
Pre-IPA-Overhead: 2555k
Post-IPA-Garbage: 13436k
Post-IPA-Leak: 17725k
Post-IPA-Overhead: 2555k
comparing combine.c compilation at -O3 level:
Overall memory needed: 37441k -> 37249k
Peak memory use before GGC: 16718k
Peak memory use after GGC: 16552k
Maximum of released memory in single GGC run: 1683k
Garbage: 80807k -> 80789k
Leak: 7278k -> 7264k
Overhead: 11089k -> 11086k
GGC runs: 529
Pre-IPA-Garbage: 13436k
Pre-IPA-Leak: 17760k
Pre-IPA-Overhead: 2555k
Post-IPA-Garbage: 13436k
Post-IPA-Leak: 17760k
Post-IPA-Overhead: 2555k
comparing insn-attrtab.c compilation at -O0 level:
Overall memory needed: 152501k -> 152477k
Peak memory use before GGC: 65256k
Peak memory use after GGC: 52819k
Maximum of released memory in single GGC run: 26251k
Garbage: 128610k -> 128607k
Leak: 9591k -> 9589k
Overhead: 16694k -> 16694k
GGC runs: 258
Pre-IPA-Garbage: 40783k
Pre-IPA-Leak: 51014k
Pre-IPA-Overhead: 7761k
Post-IPA-Garbage: 40783k
Post-IPA-Leak: 51014k
Post-IPA-Overhead: 7761k
comparing insn-attrtab.c compilation at -O0 -g level:
Overall memory needed: 153825k -> 153841k
Peak memory use before GGC: 66521k -> 66523k
Peak memory use after GGC: 54081k -> 54083k
Maximum of released memory in single GGC run: 26252k
Garbage: 128933k -> 128978k
Leak: 11222k -> 11224k
Overhead: 17147k -> 17149k
GGC runs: 252
Pre-IPA-Garbage: 40792k
Pre-IPA-Leak: 52539k
Pre-IPA-Overhead: 8091k
Post-IPA-Garbage: 40792k
Post-IPA-Leak: 52539k
Post-IPA-Overhead: 8091k
comparing insn-attrtab.c compilation at -O1 level:
Overall memory needed: 154425k -> 154585k
Peak memory use before GGC: 54974k -> 54973k
Peak memory use after GGC: 44904k
Maximum of released memory in single GGC run: 17234k
Garbage: 181164k -> 181161k
Leak: 9182k -> 9180k
Overhead: 23431k -> 23430k
GGC runs: 298
Pre-IPA-Garbage: 45256k
Pre-IPA-Leak: 45117k
Pre-IPA-Overhead: 7607k
Post-IPA-Garbage: 45256k
Post-IPA-Leak: 45117k
Post-IPA-Overhead: 7607k
comparing insn-attrtab.c compilation at -O2 level:
Overall memory needed: 202197k -> 202193k
Peak memory use before GGC: 54436k -> 54431k
Peak memory use after GGC: 44668k -> 44663k
Maximum of released memory in single GGC run: 18698k -> 18697k
Garbage: 211801k -> 211765k
Leak: 9218k -> 9210k
Overhead: 29318k -> 29311k
GGC runs: 331
Pre-IPA-Garbage: 45281k
Pre-IPA-Leak: 45121k
Pre-IPA-Overhead: 7609k
Post-IPA-Garbage: 45281k
Post-IPA-Leak: 45121k
Post-IPA-Overhead: 7609k
comparing insn-attrtab.c compilation at -O3 level:
Overall memory needed: 205505k -> 205697k
Peak memory use before GGC: 54449k -> 54444k
Peak memory use after GGC: 44680k -> 44675k
Maximum of released memory in single GGC run: 18680k
Garbage: 230141k -> 230105k
Leak: 9237k -> 9229k
Overhead: 31241k -> 31234k
GGC runs: 353
Pre-IPA-Garbage: 45281k
Pre-IPA-Leak: 45121k
Pre-IPA-Overhead: 7609k
Post-IPA-Garbage: 45281k
Post-IPA-Leak: 45121k
Post-IPA-Overhead: 7609k
comparing Gerald's testcase PR8361 compilation at -O0 level:
Overall memory needed: 146449k
Peak memory use before GGC: 81548k
Peak memory use after GGC: 80740k
Maximum of released memory in single GGC run: 13881k
Garbage: 195498k -> 195220k
Leak: 55823k -> 55662k
Overhead: 29072k -> 29032k
GGC runs: 441
Pre-IPA-Garbage: 105344k
Pre-IPA-Leak: 84661k
Pre-IPA-Overhead: 15579k
Post-IPA-Garbage: 105344k
Post-IPA-Leak: 84661k
Post-IPA-Overhead: 15579k
comparing Gerald's testcase PR8361 compilation at -O0 -g level:
Overall memory needed: 163949k -> 163897k
Peak memory use before GGC: 95759k
Peak memory use after GGC: 94810k
Maximum of released memory in single GGC run: 14051k
Garbage: 201063k -> 200656k
Leak: 83080k -> 82919k
Overhead: 35639k -> 35589k
GGC runs: 412
Pre-IPA-Garbage: 105846k
Pre-IPA-Leak: 101111k
Pre-IPA-Overhead: 19072k
Post-IPA-Garbage: 105846k
Post-IPA-Leak: 101111k
Post-IPA-Overhead: 19072k
comparing Gerald's testcase PR8361 compilation at -O1 level:
Overall memory needed: 107861k -> 107905k
Peak memory use before GGC: 81549k
Peak memory use after GGC: 80741k
Maximum of released memory in single GGC run: 13844k
Garbage: 270754k -> 270688k
Leak: 52421k -> 52374k
Overhead: 32027k -> 32018k
GGC runs: 526
Pre-IPA-Garbage: 153192k
Pre-IPA-Leak: 85862k
Pre-IPA-Overhead: 19154k -> 19154k
Post-IPA-Garbage: 153192k
Post-IPA-Leak: 85862k
Post-IPA-Overhead: 19154k -> 19154k
comparing Gerald's testcase PR8361 compilation at -O2 level:
Overall memory needed: 107577k -> 107677k
Peak memory use before GGC: 81323k
Peak memory use after GGC: 80299k
Maximum of released memory in single GGC run: 13840k
Garbage: 307097k -> 307020k
Leak: 52595k -> 52542k
Overhead: 37233k -> 37221k
GGC runs: 572
Pre-IPA-Garbage: 156507k
Pre-IPA-Leak: 85153k
Pre-IPA-Overhead: 19383k
Post-IPA-Garbage: 156507k
Post-IPA-Leak: 85153k
Post-IPA-Overhead: 19383k
comparing Gerald's testcase PR8361 compilation at -O3 level:
Overall memory needed: 113973k -> 114049k
Peak memory use before GGC: 81789k
Peak memory use after GGC: 80299k
Maximum of released memory in single GGC run: 13840k
Garbage: 337681k -> 337599k
Leak: 52633k -> 52580k
Overhead: 40848k -> 40834k
GGC runs: 610
Pre-IPA-Garbage: 156507k
Pre-IPA-Leak: 85157k
Pre-IPA-Overhead: 19383k
Post-IPA-Garbage: 156507k
Post-IPA-Leak: 85157k
Post-IPA-Overhead: 19383k
comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
Overall memory needed: 358781k -> 358665k
Peak memory use before GGC: 78174k -> 78173k
Peak memory use after GGC: 49108k
Maximum of released memory in single GGC run: 37058k -> 37057k
Garbage: 140207k -> 140207k
Leak: 7712k -> 7711k
Overhead: 24962k -> 24962k
GGC runs: 86
Pre-IPA-Garbage: 12171k
Pre-IPA-Leak: 18627k
Pre-IPA-Overhead: 2403k
Post-IPA-Garbage: 12171k
Post-IPA-Leak: 18627k
Post-IPA-Overhead: 2403k
comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
Overall memory needed: 358529k -> 359561k
Peak memory use before GGC: 78855k -> 78862k
Peak memory use after GGC: 49789k -> 49797k
Maximum of released memory in single GGC run: 37038k -> 37052k
Garbage: 140270k -> 140283k
Leak: 9706k -> 9713k
Overhead: 25530k -> 25531k
GGC runs: 94
Pre-IPA-Garbage: 12173k
Pre-IPA-Leak: 18873k
Pre-IPA-Overhead: 2456k
Post-IPA-Garbage: 12173k
Post-IPA-Leak: 18873k
Post-IPA-Overhead: 2456k
comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
Overall memory needed: 347473k -> 347793k
Peak memory use before GGC: 94212k
Peak memory use after GGC: 82936k
Maximum of released memory in single GGC run: 47307k
Garbage: 256021k -> 256021k
Leak: 9536k -> 9535k
Overhead: 35485k -> 35485k
GGC runs: 97
Pre-IPA-Garbage: 42051k
Pre-IPA-Leak: 64580k
Pre-IPA-Overhead: 7108k
Post-IPA-Garbage: 42051k
Post-IPA-Leak: 64580k
Post-IPA-Overhead: 7108k
comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
Overall memory needed: 667605k -> 667029k
Peak memory use before GGC: 90305k
Peak memory use after GGC: 82937k
Maximum of released memory in single GGC run: 38641k
Garbage: 302308k -> 302308k
Leak: 11373k -> 11373k
Overhead: 50853k -> 50853k
GGC runs: 108
Pre-IPA-Garbage: 84972k
Pre-IPA-Leak: 86483k
Pre-IPA-Overhead: 11064k
Post-IPA-Garbage: 84972k
Post-IPA-Leak: 86483k
Post-IPA-Overhead: 11064k
comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
Overall memory needed: 1234273k -> 1234201k
Peak memory use before GGC: 133837k
Peak memory use after GGC: 126292k
Maximum of released memory in single GGC run: 51245k
Garbage: 347523k -> 347523k
Leak: 10290k -> 10289k
Overhead: 43799k -> 43799k
GGC runs: 107
Pre-IPA-Garbage: 84972k
Pre-IPA-Leak: 86483k
Pre-IPA-Overhead: 11064k
Post-IPA-Garbage: 84972k
Post-IPA-Leak: 86483k
Post-IPA-Overhead: 11064k
Head of the ChangeLog is:
--- /usr/src/SpecTests/sandbox-haydn-memory/x86_64/mem-result/ChangeLog 2009-06-01 17:02:35.000000000 +0000
+++ /usr/src/SpecTests/sandbox-haydn-memory/gcc/gcc/ChangeLog 2009-06-01 21:04:05.000000000 +0000
@@ -1,3 +1,51 @@
+2009-06-01 Jakub Jelinek <jakub@redhat.com>
+
+ * config/i386/i386.c (queued_cfa_restores): New static variable.
+ (ix86_add_cfa_restore_note, ix86_add_queued_cfa_restore_notes): New
+ functions.
+ (pro_epilogue_adjust_stack): Call ix86_add_queued_cfa_restore_notes.
+ (ix86_emit_restore_reg_using_pop): Add RED_OFFSET argument.
+ Set RTX_FRAME_RELATED_P immediately after adding a REG_CFA_* note.
+ Call ix86_add_cfa_restore_note instead of adding REG_CFA_OFFSET
+ note unconditionally.
+ (ix86_emit_restore_regs_using_mov): Likewise.
+ (ix86_emit_restore_sse_regs_using_mov): Likewise.
+ (ix86_emit_restore_regs_using_pop): Add RED_OFFSET argument, pass
+ it through to ix86_emit_restore_reg_using_pop.
+ (ix86_emit_leave): Add RED_OFFSET argument. Call
+ ix86_add_queued_cfa_restore_notes. Call ix86_add_cfa_restore_note
+ instead of adding REG_CFA_OFFSET note unconditionally.
+ (ix86_expand_epilogue): Compute RED_OFFSET, pass it down to
+ the above functions. Call ix86_add_queued_cfa_restore_notes when
+ needed.
+
+ * dwarf2out.c (dwarf2out_cfi_label): Add FORCE argument, if true,
+ force output of the label even for dwarf2out_do_cfi_asm.
+ (add_fde_cfi): If -g2 and above and cfi might change CFA,
+ force creation of CFI label and chain DW_CFA_set_loc jumping to it
+ for convert_cfa_to_fb_loc_list. Adjust other dwarf2out_cfi_label
+ caller.
+ (dwarf2out_stack_adjust, dwarf2out_frame_debug,
+ dwarf2out_begin_epilogue, dwarf2out_frame_debug_restore_state): Adjust
+ dwarf2out_cfi_label callers.
+ * tree.h (dwarf2out_cfi_label): Adjust prototype.
+ * config/arm/arm.c (thumb_pushpop, thumb1_output_function_prologue):
+ Adjust dwarf2out_cfi_label callers.
+ * config/vax/vax.c (vax_output_function_prologue): Likewise.
+
+ * config/i386/i386.h (struct machine_cfa_state,
+ struct machine_function): Guard with ifndef USED_FOR_TARGET
+ instead of not IN_LIBGCC2 and not in IN_TARGET_LIBS.
+
+ PR other/40024
+ * emutls.c (__emutls_get_address): Change arr->size to mean number
+ of allocated arr->data entries instead of # of slots + 1.
+
+ PR middle-end/40316
+ * recog.c (peep2_reinit_state): New function.
+ (peephole2_init_state): Use it at the end of a basic block and also
+ when seeing a RTX_FRAME_RELATED_P insn.
+
2009-06-01 Steve Ellcey <sje@cup.hp.com>
* ia64.md (floatdirf2, fix_truncrfdi, floatunsdirf,
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