A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Sat Jul 12 00:57: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: 8135k -> 8133k
    Peak memory use before GGC: 1165k
    Peak memory use after GGC: 1063k
    Maximum of released memory in single GGC run: 131k
    Garbage: 245k
    Leak: 1024k -> 1024k
    Overhead: 92k -> 92k
    GGC runs: 3
    Pre-IPA-Garbage: 235k
    Pre-IPA-Leak: 1024k -> 1024k
    Pre-IPA-Overhead: 90k -> 90k
    Post-IPA-Garbage: 235k
    Post-IPA-Leak: 1024k -> 1024k
    Post-IPA-Overhead: 90k -> 90k

comparing empty function compilation at -O0 -g level:
    Overall memory needed: 8151k -> 8153k
    Peak memory use before GGC: 1193k
    Peak memory use after GGC: 1091k
    Maximum of released memory in single GGC run: 131k
    Garbage: 247k
    Leak: 1057k -> 1057k
    Overhead: 96k -> 96k
    GGC runs: 3
    Pre-IPA-Garbage: 235k
    Pre-IPA-Leak: 1024k -> 1024k
    Pre-IPA-Overhead: 90k -> 90k
    Post-IPA-Garbage: 235k
    Post-IPA-Leak: 1024k -> 1024k
    Post-IPA-Overhead: 90k -> 90k

comparing empty function compilation at -O1 level:
    Overall memory needed: 8223k -> 8221k
    Peak memory use before GGC: 1165k
    Peak memory use after GGC: 1063k
    Maximum of released memory in single GGC run: 131k
    Garbage: 249k
    Leak: 1024k -> 1024k
    Overhead: 93k -> 93k
    GGC runs: 3
    Pre-IPA-Garbage: 235k
    Pre-IPA-Leak: 1026k -> 1026k
    Pre-IPA-Overhead: 91k -> 91k
    Post-IPA-Garbage: 235k
    Post-IPA-Leak: 1026k -> 1026k
    Post-IPA-Overhead: 91k -> 91k

comparing empty function compilation at -O2 level:
    Overall memory needed: 8231k -> 8233k
    Peak memory use before GGC: 1165k
    Peak memory use after GGC: 1064k
    Maximum of released memory in single GGC run: 130k
    Garbage: 254k
    Leak: 1024k -> 1024k
    Overhead: 94k -> 94k
    GGC runs: 3
    Pre-IPA-Garbage: 235k
    Pre-IPA-Leak: 1027k -> 1027k
    Pre-IPA-Overhead: 91k -> 91k
    Post-IPA-Garbage: 235k
    Post-IPA-Leak: 1027k -> 1027k
    Post-IPA-Overhead: 91k -> 91k

comparing empty function compilation at -O3 level:
    Overall memory needed: 8239k -> 8237k
    Peak memory use before GGC: 1165k
    Peak memory use after GGC: 1064k
    Maximum of released memory in single GGC run: 130k
    Garbage: 254k
    Leak: 1024k -> 1024k
    Overhead: 94k -> 94k
    GGC runs: 3
    Pre-IPA-Garbage: 235k
    Pre-IPA-Leak: 1027k -> 1027k
    Pre-IPA-Overhead: 91k -> 91k
    Post-IPA-Garbage: 235k
    Post-IPA-Leak: 1027k -> 1027k
    Post-IPA-Overhead: 91k -> 91k

comparing combine.c compilation at -O0 level:
    Overall memory needed: 27395k -> 27393k
    Peak memory use before GGC: 15015k
    Peak memory use after GGC: 14752k
    Maximum of released memory in single GGC run: 1787k -> 1788k
    Garbage: 38067k -> 38075k
    Leak: 5205k -> 5189k
    Overhead: 4643k -> 4644k
    GGC runs: 354
    Pre-IPA-Garbage: 12896k
    Pre-IPA-Leak: 15352k -> 15352k
    Pre-IPA-Overhead: 1978k -> 1978k
    Post-IPA-Garbage: 12896k
    Post-IPA-Leak: 15352k -> 15352k
    Post-IPA-Overhead: 1978k -> 1978k

comparing combine.c compilation at -O0 -g level:
  Amount of memory still referenced at the end of compilation increased from 8470k to 8486k, overall 0.19%
    Overall memory needed: 29599k -> 29601k
    Peak memory use before GGC: 16874k -> 16875k
    Peak memory use after GGC: 16644k
    Maximum of released memory in single GGC run: 1796k -> 1812k
    Garbage: 38439k -> 38416k
    Leak: 8470k -> 8486k
    Overhead: 5462k -> 5462k
    GGC runs: 336 -> 337
    Pre-IPA-Garbage: 12996k
    Pre-IPA-Leak: 17628k -> 17628k
    Pre-IPA-Overhead: 2469k -> 2469k
    Post-IPA-Garbage: 12996k
    Post-IPA-Leak: 17628k -> 17628k
    Post-IPA-Overhead: 2469k -> 2469k

comparing combine.c compilation at -O1 level:
    Overall memory needed: 30319k -> 30321k
    Peak memory use before GGC: 16342k
    Peak memory use after GGC: 16180k
    Maximum of released memory in single GGC run: 1395k
    Garbage: 50530k
    Leak: 5178k -> 5178k
    Overhead: 5602k -> 5602k
    GGC runs: 430
    Pre-IPA-Garbage: 13919k
    Pre-IPA-Leak: 17185k -> 17185k
    Pre-IPA-Overhead: 2114k -> 2114k
    Post-IPA-Garbage: 13919k
    Post-IPA-Leak: 17185k -> 17185k
    Post-IPA-Overhead: 2114k -> 2114k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 31643k -> 31641k
    Peak memory use before GGC: 16439k
    Peak memory use after GGC: 16276k
    Maximum of released memory in single GGC run: 1333k
    Garbage: 66537k -> 66538k
    Leak: 5207k -> 5208k
    Overhead: 7421k -> 7421k
    GGC runs: 505
    Pre-IPA-Garbage: 14068k
    Pre-IPA-Leak: 17247k -> 17247k
    Pre-IPA-Overhead: 2127k -> 2127k
    Post-IPA-Garbage: 14068k
    Post-IPA-Leak: 17247k -> 17247k
    Post-IPA-Overhead: 2127k -> 2127k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 37383k -> 37365k
    Peak memory use before GGC: 16466k
    Peak memory use after GGC: 16293k
    Maximum of released memory in single GGC run: 2127k
    Garbage: 83128k -> 83127k
    Leak: 5227k -> 5231k
    Overhead: 9048k -> 9048k
    GGC runs: 534
    Pre-IPA-Garbage: 14069k
    Pre-IPA-Leak: 17258k -> 17258k
    Pre-IPA-Overhead: 2128k -> 2128k
    Post-IPA-Garbage: 14069k
    Post-IPA-Leak: 17258k -> 17258k
    Post-IPA-Overhead: 2128k -> 2128k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 141735k -> 141741k
    Peak memory use before GGC: 62365k
    Peak memory use after GGC: 52700k
    Maximum of released memory in single GGC run: 25736k
    Garbage: 130179k
    Leak: 7087k -> 7087k
    Overhead: 14220k -> 14220k
    GGC runs: 272
    Pre-IPA-Garbage: 43045k
    Pre-IPA-Leak: 49873k -> 49873k
    Pre-IPA-Overhead: 7105k -> 7105k
    Post-IPA-Garbage: 43045k
    Post-IPA-Leak: 49873k -> 49873k
    Post-IPA-Overhead: 7105k -> 7105k

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 143035k -> 143037k
    Peak memory use before GGC: 63640k
    Peak memory use after GGC: 53973k
    Maximum of released memory in single GGC run: 25737k
    Garbage: 130597k
    Leak: 8739k -> 8739k
    Overhead: 14675k -> 14675k
    GGC runs: 263
    Pre-IPA-Garbage: 43102k
    Pre-IPA-Leak: 51416k -> 51416k
    Pre-IPA-Overhead: 7441k -> 7441k
    Post-IPA-Garbage: 43102k
    Post-IPA-Leak: 51416k -> 51416k
    Post-IPA-Overhead: 7441k -> 7441k

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 133011k -> 133013k
    Peak memory use before GGC: 54287k
    Peak memory use after GGC: 48560k
    Maximum of released memory in single GGC run: 23289k
    Garbage: 203580k
    Leak: 6477k -> 6477k
    Overhead: 24012k -> 24012k
    GGC runs: 313
    Pre-IPA-Garbage: 50236k
    Pre-IPA-Leak: 49387k -> 49387k
    Pre-IPA-Overhead: 7216k -> 7216k
    Post-IPA-Garbage: 50236k
    Post-IPA-Leak: 49387k -> 49387k
    Post-IPA-Overhead: 7216k -> 7216k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 179739k -> 179733k
    Peak memory use before GGC: 54969k
    Peak memory use after GGC: 49573k -> 49574k
    Maximum of released memory in single GGC run: 22125k
    Garbage: 240505k -> 240508k
    Leak: 6485k -> 6485k
    Overhead: 29589k -> 29589k
    GGC runs: 346
    Pre-IPA-Garbage: 50305k
    Pre-IPA-Leak: 49392k -> 49392k
    Pre-IPA-Overhead: 7223k -> 7223k
    Post-IPA-Garbage: 50305k
    Post-IPA-Leak: 49392k -> 49392k
    Post-IPA-Overhead: 7223k -> 7223k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 188287k -> 188289k
    Peak memory use before GGC: 65890k
    Peak memory use after GGC: 63022k
    Maximum of released memory in single GGC run: 24136k
    Garbage: 267145k
    Leak: 6493k -> 6493k
    Overhead: 31425k -> 31425k
    GGC runs: 349
    Pre-IPA-Garbage: 50305k
    Pre-IPA-Leak: 49392k -> 49392k
    Pre-IPA-Overhead: 7223k -> 7223k
    Post-IPA-Garbage: 50305k
    Post-IPA-Leak: 49392k -> 49392k
    Post-IPA-Overhead: 7223k -> 7223k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 137224k -> 137215k
    Peak memory use before GGC: 79972k -> 79974k
    Peak memory use after GGC: 79180k -> 79182k
    Maximum of released memory in single GGC run: 14878k
    Garbage: 197846k -> 197831k
    Leak: 47686k -> 47687k
    Overhead: 24132k -> 24133k
    GGC runs: 425 -> 424
    Pre-IPA-Garbage: 107619k -> 107619k
    Pre-IPA-Leak: 68615k -> 68617k
    Pre-IPA-Overhead: 11898k -> 11898k
    Post-IPA-Garbage: 107619k -> 107619k
    Post-IPA-Leak: 68615k -> 68617k
    Post-IPA-Overhead: 11898k -> 11898k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 155432k -> 155447k
    Peak memory use before GGC: 94257k -> 94258k
    Peak memory use after GGC: 93323k -> 93325k
    Maximum of released memory in single GGC run: 15679k -> 15678k
    Garbage: 203486k -> 203503k
    Leak: 74284k -> 74285k
    Overhead: 30823k -> 30824k
    GGC runs: 390 -> 391
    Pre-IPA-Garbage: 108258k -> 108258k
    Pre-IPA-Leak: 85185k -> 85186k
    Pre-IPA-Overhead: 15436k -> 15436k
    Post-IPA-Garbage: 108258k -> 108258k
    Post-IPA-Leak: 85185k -> 85186k
    Post-IPA-Overhead: 15436k -> 15436k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 108563k -> 108527k
    Peak memory use before GGC: 79064k -> 79066k
    Peak memory use after GGC: 78222k -> 78223k
    Maximum of released memory in single GGC run: 14459k
    Garbage: 283146k -> 283157k
    Leak: 44475k -> 44476k
    Overhead: 27890k -> 27889k
    GGC runs: 513
    Pre-IPA-Garbage: 149639k -> 149633k
    Pre-IPA-Leak: 82294k -> 82295k
    Pre-IPA-Overhead: 16420k -> 16420k
    Post-IPA-Garbage: 149639k -> 149633k
    Post-IPA-Leak: 82294k -> 82295k
    Post-IPA-Overhead: 16420k -> 16420k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 110095k -> 110111k
    Peak memory use before GGC: 79356k -> 79357k
    Peak memory use after GGC: 78569k -> 78571k
    Maximum of released memory in single GGC run: 14427k -> 14426k
    Garbage: 334884k -> 334887k
    Leak: 44575k -> 44584k
    Overhead: 32775k -> 32765k
    GGC runs: 581
    Pre-IPA-Garbage: 151231k -> 151234k
    Pre-IPA-Leak: 82159k -> 82160k
    Pre-IPA-Overhead: 16555k -> 16555k
    Post-IPA-Garbage: 151231k -> 151234k
    Post-IPA-Leak: 82159k -> 82160k
    Post-IPA-Overhead: 16555k -> 16555k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 117731k -> 117763k
    Peak memory use before GGC: 80351k -> 80352k
    Peak memory use after GGC: 79545k -> 79547k
    Maximum of released memory in single GGC run: 14783k -> 14782k
    Garbage: 363935k -> 363884k
    Leak: 44963k -> 44953k
    Overhead: 35002k -> 35025k
    GGC runs: 603 -> 602
    Pre-IPA-Garbage: 153864k -> 153862k
    Pre-IPA-Leak: 82424k -> 82425k
    Pre-IPA-Overhead: 16792k -> 16792k
    Post-IPA-Garbage: 153864k -> 153862k
    Post-IPA-Leak: 82424k -> 82425k
    Post-IPA-Overhead: 16792k -> 16792k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 377301k -> 377304k
    Peak memory use before GGC: 100917k -> 100918k
    Peak memory use after GGC: 56571k
    Maximum of released memory in single GGC run: 50582k -> 50583k
    Garbage: 178404k
    Leak: 6287k -> 6287k
    Overhead: 30426k -> 30426k
    GGC runs: 94
    Pre-IPA-Garbage: 12065k
    Pre-IPA-Leak: 16461k -> 16461k
    Pre-IPA-Overhead: 1540k -> 1540k
    Post-IPA-Garbage: 12065k
    Post-IPA-Leak: 16461k -> 16461k
    Post-IPA-Overhead: 1540k -> 1540k

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 378541k -> 378536k
    Peak memory use before GGC: 101616k -> 101617k
    Peak memory use after GGC: 57270k
    Maximum of released memory in single GGC run: 50582k -> 50583k
    Garbage: 178522k
    Leak: 8332k -> 8332k
    Overhead: 31011k -> 31011k
    GGC runs: 103
    Pre-IPA-Garbage: 12073k
    Pre-IPA-Leak: 16710k -> 16710k
    Pre-IPA-Overhead: 1594k -> 1594k
    Post-IPA-Garbage: 12073k
    Post-IPA-Leak: 16710k -> 16710k
    Post-IPA-Overhead: 1594k -> 1594k

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
    Overall memory needed: 383735k -> 383569k
    Peak memory use before GGC: 75664k
    Peak memory use after GGC: 67608k
    Maximum of released memory in single GGC run: 34791k -> 34790k
    Garbage: 243330k
    Leak: 7907k -> 7907k
    Overhead: 30630k -> 30630k
    GGC runs: 103
    Pre-IPA-Garbage: 49522k
    Pre-IPA-Leak: 63645k -> 63645k
    Pre-IPA-Overhead: 6443k -> 6443k
    Post-IPA-Garbage: 49522k
    Post-IPA-Leak: 63645k -> 63645k
    Post-IPA-Overhead: 6443k -> 6443k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 322171k -> 320605k
    Peak memory use before GGC: 75664k
    Peak memory use after GGC: 67608k
    Maximum of released memory in single GGC run: 32489k
    Garbage: 254886k
    Leak: 8070k -> 8070k
    Overhead: 33405k -> 33405k
    GGC runs: 115
    Pre-IPA-Garbage: 107518k
    Pre-IPA-Leak: 75534k -> 75534k
    Pre-IPA-Overhead: 10761k -> 10761k
    Post-IPA-Garbage: 107518k
    Post-IPA-Leak: 75534k -> 75534k
    Post-IPA-Overhead: 10761k -> 10761k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1068131k -> 1068269k
    Peak memory use before GGC: 142490k
    Peak memory use after GGC: 129145k
    Maximum of released memory in single GGC run: 59679k -> 59680k
    Garbage: 356335k
    Leak: 11049k -> 11049k
    Overhead: 38047k -> 38047k
    GGC runs: 101
    Pre-IPA-Garbage: 107518k
    Pre-IPA-Leak: 75534k -> 75534k
    Pre-IPA-Overhead: 10761k -> 10761k
    Post-IPA-Garbage: 107518k
    Post-IPA-Leak: 75534k -> 75534k
    Post-IPA-Overhead: 10761k -> 10761k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog	2008-07-11 14:09:52.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-07-11 21:44:09.000000000 +0000
@@ -1,3 +1,45 @@
+2008-07-11  Anatoly Sokolov  <aesok@post.ru>	
+
+	* config/avr/avr-protos.h (avr_peep2_scratch_safe): Remove prototype.
+	* config/avr/avr.c (avr_peep2_scratch_safe): Remove.
+	(avr_hard_regno_scratch_ok): New function.
+	(TARGET_HARD_REGNO_SCRATCH_OK): Define.
+	* config/avr/avr.md (all peepholes that request a scratch register):
+	Remove avr_peep2_scratch_safe use.
+
+2008-07-11  Tom Tromey  <tromey@redhat.com>
+	    Ian Lance Taylor  <iant@google.com>
+
+	* c-common.h (enum rid): Add RID_CXX_COMPAT_WARN.
+	(struct c_common_resword): Define.
+	(D_CONLY, D_CXXONLY, D_C99, D_CXX0X, D_EXT, D_EXT89): Define.
+	(D_ASM, D_OBJC, D_CXX_OBJC, D_CXXWARN): Define.
+	(c_common_reswords, num_c_common_reswords): Declare.
+	* c-common.c (c_common_reswords): New global const array.
+	(num_c_common_reswords): New const int.
+	* c-parser.c (struct resword, reswords): Don't define.
+	(D_C89, D_EXT, D_EXT89, D_OBJC): Don't define.
+	(c_parse_init): Clarify mask code.  Use c_common_reswords rather
+	than reswords.  If warning about C++ keywords, give them a special
+	RID code.
+	(c_lex_one_token): Warn about C++ keywords.  Call
+	objc_is_reserved_word rather than OBJC_IS_AT_KEYWORD.
+	(c_parser_external_declaration): Look for RID_xxx rather than
+	RID_AT_xxx, for ObjC++ keywords which are also C++ keywords.
+	(c_parser_statement_after_labels): Likewise.
+	(c_parser_objc_class_instance_variables): Likewise.
+	(c_parser_objc_class_declaration): Likewise.
+	(c_parser_objc_try_catch_statement): Likewise.
+	* c-decl.c (c_print_identifier): Ignore RID_CXX_COMPAT_WARN.
+	(declspecs_add_type): Likewise.
+
+2008-07-11  Angelo Graziosi  <angelo.graziosi@alice.it>
+
+	* ggc-page.c (alloc_page):
+	Substituting xmalloc, xcalloc with
+	XNEWVEC and XCNEWVAR macros which add the
+	needed casts.
+
 2008-07-11  Richard Guenther  <rguenther@suse.de>
 
 	PR tree-optimization/36765
--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog.cp	2008-07-11 17:57:37.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/cp/ChangeLog	2008-07-11 21:44:09.000000000 +0000
@@ -1,3 +1,18 @@
+2008-07-11  Tom Tromey  <tromey@redhat.com>
+	    Ian Lance Taylor  <iant@google.com>
+
+	* lex.c (struct resword, reswords): Don't define.
+	(D_EXT, D_ASM, D_OBJC, D_CXX0X): Don't define.
+	(init_reswords): Clarify mask code.  Use c_common_reswords rather
+	than reswords.
+
+2008-07-11  Dodji Seketeli  <dseketel@redhat.com>
+
+	PR c++/13101
+	* decl.c (grokdeclarator): Warn about initializing variables
+	  of storage class 'extern' only after the type of the declarator
+	  has been properly computed.
+
 2008-07-11  Dodji Seketeli  <dseketel@redhat.com>
 
 	PR c++/31754
@@ -13,7 +28,8 @@
 	cp_parser_type_specifier, cp_parser_simple_type_specifier,
 	cp_parser_omp_for_loop, cp_parser_pragma): use location in error messages.
 
-2008-06-30 Dodji Seketeli <dseketel@redhat.com>
+
+2008-07-11 Dodji Seketeli <dseketel@redhat.com>
 
 	PR c++/31754
 	* pt.c, semantic.c:
@@ -148,7 +164,7 @@
 	* pt.c: (tsubst_copy_and_build): Adjust.
 	(unify): Handle { }.
 	* name-lookup.c (arg_assoc_type): Handle init_list_type_node.
-	
+
 2008-07-01  Daniel Jacobowitz  <dan@codesourcery.com>
 
 	* typeck.c (comp_ptr_ttypes_real): Use vector_targets_convertible_p.


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