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