A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Mon Jun 1 19:46: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
    Leak: 1537k
    Overhead: 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:
    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
    Garbage: 220k
    Leak: 1569k
    Overhead: 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
    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
    Peak memory use before GGC: 17484k
    Peak memory use after GGC: 17031k
    Maximum of released memory in single GGC run: 1913k
    Garbage: 37964k
    Leak: 7177k -> 7161k
    Overhead: 5496k -> 5496k
    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:
    Overall memory needed: 33369k
    Peak memory use before GGC: 19390k
    Peak memory use after GGC: 18870k
    Maximum of released memory in single GGC run: 1923k
    Garbage: 38167k -> 38166k
    Leak: 10437k -> 10429k
    Overhead: 6308k -> 6308k
    GGC runs: 316 -> 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:
  Amount of memory still referenced at the end of compilation increased from 7156k to 7168k, overall 0.17%
    Overall memory needed: 32061k -> 32085k
    Peak memory use before GGC: 16554k
    Peak memory use after GGC: 16381k
    Maximum of released memory in single GGC run: 1379k
    Garbage: 46007k
    Leak: 7156k -> 7168k
    Overhead: 6458k -> 6458k
    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: 33149k -> 32893k
    Peak memory use before GGC: 16618k
    Peak memory use after GGC: 16448k
    Maximum of released memory in single GGC run: 1491k
    Garbage: 56639k -> 56639k
    Leak: 7217k
    Overhead: 8100k -> 8100k
    GGC runs: 443
    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: 37341k -> 37441k
    Peak memory use before GGC: 16718k
    Peak memory use after GGC: 16552k
    Maximum of released memory in single GGC run: 1683k
    Garbage: 80807k
    Leak: 7278k
    Overhead: 11089k -> 11089k
    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: 152505k -> 152501k
    Peak memory use before GGC: 65256k
    Peak memory use after GGC: 52819k
    Maximum of released memory in single GGC run: 26251k
    Garbage: 128610k
    Leak: 9591k
    Overhead: 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
    Peak memory use before GGC: 66521k
    Peak memory use after GGC: 54081k
    Maximum of released memory in single GGC run: 26252k
    Garbage: 128933k
    Leak: 11222k
    Overhead: 17147k
    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
    Peak memory use before GGC: 54974k
    Peak memory use after GGC: 44904k
    Maximum of released memory in single GGC run: 17234k
    Garbage: 181164k
    Leak: 9182k
    Overhead: 23431k -> 23431k
    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: 202417k -> 202197k
    Peak memory use before GGC: 54436k
    Peak memory use after GGC: 44668k
    Maximum of released memory in single GGC run: 18698k
    Garbage: 211801k
    Leak: 9218k
    Overhead: 29318k
    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: 205693k -> 205505k
    Peak memory use before GGC: 54449k
    Peak memory use after GGC: 44680k
    Maximum of released memory in single GGC run: 18680k
    Garbage: 230141k
    Leak: 9237k
    Overhead: 31241k -> 31241k
    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: 146477k -> 146449k
    Peak memory use before GGC: 81548k
    Peak memory use after GGC: 80740k
    Maximum of released memory in single GGC run: 13881k
    Garbage: 195498k -> 195498k
    Leak: 55823k
    Overhead: 29072k -> 29072k
    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: 163989k -> 163949k
    Peak memory use before GGC: 95759k
    Peak memory use after GGC: 94810k
    Maximum of released memory in single GGC run: 14051k
    Garbage: 201063k
    Leak: 83080k
    Overhead: 35639k
    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: 107869k -> 107861k
    Peak memory use before GGC: 81549k
    Peak memory use after GGC: 80741k
    Maximum of released memory in single GGC run: 13844k
    Garbage: 270755k -> 270754k
    Leak: 52421k
    Overhead: 32027k -> 32027k
    GGC runs: 526
    Pre-IPA-Garbage: 153192k
    Pre-IPA-Leak: 85862k
    Pre-IPA-Overhead: 19154k
    Post-IPA-Garbage: 153192k
    Post-IPA-Leak: 85862k
    Post-IPA-Overhead: 19154k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 107717k -> 107577k
    Peak memory use before GGC: 81323k
    Peak memory use after GGC: 80299k
    Maximum of released memory in single GGC run: 13840k
    Garbage: 307097k -> 307097k
    Leak: 52588k -> 52595k
    Overhead: 37234k -> 37233k
    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: 113857k -> 113973k
    Peak memory use before GGC: 81791k -> 81789k
    Peak memory use after GGC: 80299k
    Maximum of released memory in single GGC run: 13840k
    Garbage: 337682k -> 337681k
    Leak: 52633k
    Overhead: 40848k
    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: 358525k -> 358781k
    Peak memory use before GGC: 78174k
    Peak memory use after GGC: 49108k
    Maximum of released memory in single GGC run: 37058k
    Garbage: 140207k
    Leak: 7712k
    Overhead: 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: 359585k -> 358529k
    Peak memory use before GGC: 78855k
    Peak memory use after GGC: 49789k
    Maximum of released memory in single GGC run: 37038k
    Garbage: 140270k
    Leak: 9706k
    Overhead: 25530k
    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: 347449k -> 347473k
    Peak memory use before GGC: 94212k
    Peak memory use after GGC: 82936k
    Maximum of released memory in single GGC run: 47307k
    Garbage: 256021k
    Leak: 9536k
    Overhead: 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: 666941k -> 667605k
    Peak memory use before GGC: 90305k
    Peak memory use after GGC: 82937k
    Maximum of released memory in single GGC run: 38641k
    Garbage: 302308k
    Leak: 11373k
    Overhead: 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: 1234225k -> 1234273k
    Peak memory use before GGC: 133837k
    Peak memory use after GGC: 126292k
    Maximum of released memory in single GGC run: 51245k
    Garbage: 347523k
    Leak: 10290k
    Overhead: 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 07:09:47.000000000 +0000
+++ /usr/src/SpecTests/sandbox-haydn-memory/gcc/gcc/ChangeLog	2009-06-01 17:02:35.000000000 +0000
@@ -1,3 +1,116 @@
+2009-06-01  Steve Ellcey  <sje@cup.hp.com>
+
+	* ia64.md (floatdirf2, fix_truncrfdi, floatunsdirf,
+	fixuns_truncrfdi2): New.
+	(fix_truncxfdi2_alts, fixuns_truncxfdi2_alts,
+	*nmaddsf4_alts, *nmadddf4_alts, *nmadddf4_truncsf_alts,
+	*mulxf3_alts, *mulxf3_truncsf_alts, *mulxf3_truncdf_alts,
+	*maddxf4_alts, *maddxf4_alts_truncsf, *maddxf4_alts_truncdf,
+	*nmaddxf4_alts, *nmaddxf4_truncsf_alts, *nmaddxf4_truncdf_alts,
+	*recip_approx): Remove.
+	(divsi3 modsi3, udivsi3, umodsi3, divsi3_internal, divdi3,
+	moddi3, udivdi3, umoddi3, divdi3_internal_lat, divdi3_internal_thr,
+	divsf3, sqrtsf2, divdf3, sqrtdf2, divxf3, sqrtxf2): Modify and
+	move to div.md.
+	* div.md (fix_truncrfdi2_alts, fixuns_truncrfdi2_alt,
+	setf_exp_rf): New.
+
+2009-06-01  Ian Lance Taylor  <iant@google.com>
+
+	* attribs.c (register_attribute): Use CONST_CAST.
+	* collect2.c (main): Use CONST_CAST2.
+	(scan_prog_file): Likewise.
+	* gcc.c (process_command, main): Likewise.
+	* toplev.c (toplev_main): Likewise.
+
+	* c-typeck.c (handle_warn_cast_qual): New static function,
+	partially broken out of build_c_cast.
+	(build_c_cast): Call handle_warn_cast_qual.
+	* doc/invoke.texi (Warning Options): Document new effect of
+	-Wcast-qual.
+
+2009-06-01  Aldy Hernandez  <aldyh@redhat.com>
+
+	* diagnostic.c (diagnostic_build_prefix): Always print columns.
+	(diagnostic_report_current_module): Print columns.
+	* common.opt (flag_show_column): Enable by default.
+
+2009-06-01  Luis Machado  <luisgpm@br.ibm.com>
+
+	* alias.c (find_base_term): Check for NULL term before returning.
+
+2009-06-01  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+	Revert due to PR40320:
+	
+	2009-06-01  Maxim Kuvyrkov  <maxim@codesourcery.com>
+	* calls.c (emit_library_call_value_1): Don't force_operand for move
+	and push insns.
+
+2009-06-01  Olivier Hainque  <hainque@adacore.com>
+            Eric Botcazou  <botcazou@adacore.com>
+
+	* tree.h (CONSTRUCTOR_BITFIELD_P): True if NODE, a FIELD_DECL, is
+	to be processed as a bitfield for constructor output purposes.
+	* output.h (initializer_constant_valid_for_bitfield_p): Declare
+	new function.
+	* varasm.c (oc_local_state): New type, output_constructor
+	local state to support communication with helpers.
+	(oc_outer_state): New type, output_constructor outer state of
+	relevance in recursive calls.
+	(output_constructor_array_range): New output_constructor helper,
+	extracted code for an array range element.
+	(output_constructor_regular_field): New output_constructor helper,
+	extracted code for an element that is not a bitfield.
+	(output_constructor_bitfield): New output_constructor helper,
+	extracted code for a bitfield element.  Accept an OUTER state
+	argument for recursive processing.  Recurse on record or array
+	CONSTRUCTOR values, possibly past noop conversions.
+	(initializer_constant_valid_for_bitfield_p): New predicate.  Whether
+	VALUE is a valid constant-valued expression for use in a static
+	bit-field initializer.
+	(output_constructor): Rework to use helpers.  Accept and honor an
+	OUTER state argument for recursive calls.  Return total size.  Be
+	prepared for nested constructors initializing bitfields.
+	(output_constant): Feed OUTER in calls to output_constructor.
+
+2009-06-01  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+	* calls.c (emit_library_call_value_1): Don't force_operand for move
+	and push insns.
+
+2009-06-01  Nick Clifton  <nickc@redhat.com>
+
+	* doc/invoke.texi (IA-64 Options): Fix typo.
+
+2009-06-01  Ira Rosen  <irar@il.ibm.com>
+
+	PR tree-optimization/39129
+	* tree-vect-loop-manip.c (conservative_cost_threshold): Change the 
+	printed message.
+	(vect_do_peeling_for_loop_bound): Use 
+	LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT and
+	LOOP_REQUIRES_VERSIONING_FOR_ALIAS macros.
+	(vect_loop_versioning): Likewise.
+	(vect_create_cond_for_alias_checks): Fix indentation.
+	* tree-vectorizer.h (struct _loop_vec_info): Fix indentation of the 
+	macros.
+	(LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT): Define.
+	(LOOP_REQUIRES_VERSIONING_FOR_ALIAS): Likewise.
+	* tree-vect-loop.c (vect_analyze_loop_form): Change "too many BBs" to 
+	"control flow in loop".
+	(vect_estimate_min_profitable_iters): Use 
+	LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT and
+	LOOP_REQUIRES_VERSIONING_FOR_ALIAS macros.
+	* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Likewise.
+	(vect_create_data_ref_ptr): Don't mention array dimension in printing.
+	* tree-vect-stmts.c (vectorizable_store): Replace the check that the 
+	statement belongs to a group of strided accesses with the exact code 
+	check.
+	(vectorizable_load): Likewise.
+	* tree-vect-slp.c (vect_analyze_slp_instance): Spell out "basic block".
+	(vect_slp_analyze_bb, vect_slp_transform_bb): Likewise.
+
 2009-06-01  Gerald Pfeifer  <gerald@pfeifer.com>
 
 	* config/freebsd-stdint.h: New file.
--- /usr/src/SpecTests/sandbox-haydn-memory/x86_64/mem-result/ChangeLog.cp	2009-05-30 07:41:16.000000000 +0000
+++ /usr/src/SpecTests/sandbox-haydn-memory/gcc/gcc/cp/ChangeLog	2009-06-01 17:02:34.000000000 +0000
@@ -1,3 +1,8 @@
+2009-06-01  Aldy Hernandez  <aldyh@redhat.com>
+
+	* error.c (print_instantiation_partial_context): Print column
+	numbers.
+
 2009-05-29  Ian Lance Taylor  <iant@google.com>
 
 	* error.c (cp_printer): Don't use va_arg with enum type.


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