This is the mail archive of the gcc-regression@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

A recent patch increased GCC's memory consumption!


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: 8184k
    Peak memory use before GGC: 1291k
    Peak memory use after GGC: 1217k
    Maximum of released memory in single GGC run: 134k
    Garbage: 218k
    Leak: 1221k
    Overhead: 136k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing empty function compilation at -O0 -g level:
    Overall memory needed: 8428k
    Peak memory use before GGC: 1319k
    Peak memory use after GGC: 1245k
    Maximum of released memory in single GGC run: 133k
    Garbage: 220k
    Leak: 1254k
    Overhead: 141k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing empty function compilation at -O1 level:
    Overall memory needed: 8240k
    Peak memory use before GGC: 1291k
    Peak memory use after GGC: 1217k
    Maximum of released memory in single GGC run: 134k
    Garbage: 221k
    Leak: 1221k
    Overhead: 137k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing empty function compilation at -O2 level:
    Overall memory needed: 8452k
    Peak memory use before GGC: 1291k
    Peak memory use after GGC: 1218k
    Maximum of released memory in single GGC run: 135k
    Garbage: 226k
    Leak: 1221k
    Overhead: 138k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing empty function compilation at -O3 level:
    Overall memory needed: 8456k
    Peak memory use before GGC: 1291k
    Peak memory use after GGC: 1218k
    Maximum of released memory in single GGC run: 135k
    Garbage: 226k
    Leak: 1221k
    Overhead: 138k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing combine.c compilation at -O0 level:
  Amount of produced GGC garbage increased from 39088k to 39162k, overall 0.19%
    Overall memory needed: 32044k
    Peak memory use before GGC: 18004k
    Peak memory use after GGC: 17791k
    Maximum of released memory in single GGC run: 1825k -> 1824k
    Garbage: 39088k -> 39162k
    Leak: 5792k
    Overhead: 5267k
    GGC runs: 337
    Pre-IPA-Garbage: 12430k
    Pre-IPA-Leak: 19386k
    Pre-IPA-Overhead: 2624k
    Post-IPA-Garbage: 12430k
    Post-IPA-Leak: 19386k
    Post-IPA-Overhead: 2624k

comparing combine.c compilation at -O0 -g level:
  Amount of produced GGC garbage increased from 39376k to 39450k, overall 0.19%
    Overall memory needed: 34072k
    Peak memory use before GGC: 19904k -> 19910k
    Peak memory use after GGC: 19646k -> 19647k
    Maximum of released memory in single GGC run: 1834k -> 1833k
    Garbage: 39376k -> 39450k
    Leak: 9082k
    Overhead: 6084k -> 6084k
    GGC runs: 320
    Pre-IPA-Garbage: 12529k
    Pre-IPA-Leak: 21659k
    Pre-IPA-Overhead: 3114k
    Post-IPA-Garbage: 12529k
    Post-IPA-Leak: 21659k
    Post-IPA-Overhead: 3114k

comparing combine.c compilation at -O1 level:
  Amount of produced GGC garbage increased from 46537k to 46603k, overall 0.14%
    Overall memory needed: 30796k -> 30792k
    Peak memory use before GGC: 15651k
    Peak memory use after GGC: 15482k
    Maximum of released memory in single GGC run: 1393k -> 1380k
    Garbage: 46537k -> 46603k
    Leak: 5775k
    Overhead: 6087k -> 6087k
    GGC runs: 401
    Pre-IPA-Garbage: 13169k
    Pre-IPA-Leak: 16872k
    Pre-IPA-Overhead: 2532k
    Post-IPA-Garbage: 13169k
    Post-IPA-Leak: 16872k
    Post-IPA-Overhead: 2532k

comparing combine.c compilation at -O2 level:
  Amount of produced GGC garbage increased from 60584k to 60652k, overall 0.11%
    Overall memory needed: 31224k -> 31480k
    Peak memory use before GGC: 15794k
    Peak memory use after GGC: 15633k
    Maximum of released memory in single GGC run: 1356k -> 1357k
    Garbage: 60584k -> 60652k
    Leak: 5960k
    Overhead: 8146k -> 8146k
    GGC runs: 470
    Pre-IPA-Garbage: 13336k
    Pre-IPA-Leak: 16952k
    Pre-IPA-Overhead: 2553k
    Post-IPA-Garbage: 13336k
    Post-IPA-Leak: 16952k
    Post-IPA-Overhead: 2553k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 31924k -> 31768k
    Peak memory use before GGC: 15827k -> 15828k
    Peak memory use after GGC: 15668k -> 15669k
    Maximum of released memory in single GGC run: 1794k
    Garbage: 76025k -> 76095k
    Leak: 5825k
    Overhead: 9934k -> 9934k
    GGC runs: 506
    Pre-IPA-Garbage: 13336k
    Pre-IPA-Leak: 16960k
    Pre-IPA-Overhead: 2554k
    Post-IPA-Garbage: 13336k
    Post-IPA-Leak: 16960k
    Post-IPA-Overhead: 2554k

comparing insn-attrtab.c compilation at -O0 level:
  Amount of produced GGC garbage increased from 103547k to 103735k, overall 0.18%
    Overall memory needed: 157640k
    Peak memory use before GGC: 65250k -> 65310k
    Peak memory use after GGC: 53351k -> 53354k
    Maximum of released memory in single GGC run: 16211k
    Garbage: 103547k -> 103735k
    Leak: 35563k
    Overhead: 16157k -> 16157k
    GGC runs: 250 -> 251
    Pre-IPA-Garbage: 38224k
    Pre-IPA-Leak: 55908k
    Pre-IPA-Overhead: 8653k
    Post-IPA-Garbage: 38224k
    Post-IPA-Leak: 55908k
    Post-IPA-Overhead: 8653k

comparing insn-attrtab.c compilation at -O0 -g level:
  Amount of produced GGC garbage increased from 104027k to 104215k, overall 0.18%
    Overall memory needed: 158916k -> 158920k
    Peak memory use before GGC: 66524k -> 66584k
    Peak memory use after GGC: 54623k -> 54626k
    Maximum of released memory in single GGC run: 16212k
    Garbage: 104027k -> 104215k
    Leak: 37213k
    Overhead: 16613k -> 16613k
    GGC runs: 245
    Pre-IPA-Garbage: 38281k
    Pre-IPA-Leak: 57449k
    Pre-IPA-Overhead: 8989k
    Post-IPA-Garbage: 38281k
    Post-IPA-Leak: 57449k
    Post-IPA-Overhead: 8989k

comparing insn-attrtab.c compilation at -O1 level:
  Peak amount of GGC memory allocated before garbage collecting increased from 50314k to 50384k, overall 0.14%
  Peak amount of GGC memory still allocated after garbage collecting increased from 43412k to 43482k, overall 0.16%
  Amount of produced GGC garbage increased from 180689k to 180876k, overall 0.10%
    Overall memory needed: 134672k -> 134668k
    Peak memory use before GGC: 50314k -> 50384k
    Peak memory use after GGC: 43412k -> 43482k
    Maximum of released memory in single GGC run: 22952k
    Garbage: 180689k -> 180876k
    Leak: 8074k
    Overhead: 25327k -> 25327k
    GGC runs: 302
    Pre-IPA-Garbage: 43202k
    Pre-IPA-Leak: 43434k
    Pre-IPA-Overhead: 8052k
    Post-IPA-Garbage: 43202k
    Post-IPA-Leak: 43434k
    Post-IPA-Overhead: 8052k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 149892k -> 149896k
    Peak memory use before GGC: 50318k -> 50361k
    Peak memory use after GGC: 44407k -> 44450k
    Maximum of released memory in single GGC run: 21566k -> 21565k
    Garbage: 212637k -> 212770k
    Leak: 8059k
    Overhead: 31010k -> 31009k
    GGC runs: 335 -> 334
    Pre-IPA-Garbage: 43275k
    Pre-IPA-Leak: 43440k
    Pre-IPA-Overhead: 8061k
    Post-IPA-Garbage: 43275k
    Post-IPA-Leak: 43440k
    Post-IPA-Overhead: 8061k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 164860k -> 164900k
    Peak memory use before GGC: 61946k -> 61989k
    Peak memory use after GGC: 58846k -> 58889k
    Maximum of released memory in single GGC run: 23864k -> 23713k
    Garbage: 242888k -> 243015k
    Leak: 8067k
    Overhead: 34454k -> 34452k
    GGC runs: 341 -> 338
    Pre-IPA-Garbage: 43275k
    Pre-IPA-Leak: 43440k
    Pre-IPA-Overhead: 8061k
    Post-IPA-Garbage: 43275k
    Post-IPA-Leak: 43440k
    Post-IPA-Overhead: 8061k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 150608k -> 150600k
    Peak memory use before GGC: 82071k -> 82073k
    Peak memory use after GGC: 81237k
    Maximum of released memory in single GGC run: 15776k
    Garbage: 206366k -> 206460k
    Leak: 50844k
    Overhead: 27261k -> 27261k
    GGC runs: 416 -> 417
    Pre-IPA-Garbage: 112337k
    Pre-IPA-Leak: 87316k
    Pre-IPA-Overhead: 14978k
    Post-IPA-Garbage: 112337k
    Post-IPA-Leak: 87316k
    Post-IPA-Overhead: 14978k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 168112k
    Peak memory use before GGC: 95767k
    Peak memory use after GGC: 94819k
    Maximum of released memory in single GGC run: 16204k
    Garbage: 212057k -> 212150k
    Leak: 77406k
    Overhead: 33925k -> 33925k
    GGC runs: 389
    Pre-IPA-Garbage: 112959k
    Pre-IPA-Leak: 103831k
    Pre-IPA-Overhead: 18481k
    Post-IPA-Garbage: 112959k
    Post-IPA-Leak: 103831k
    Post-IPA-Overhead: 18481k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 110807k -> 110799k
    Peak memory use before GGC: 82820k -> 82822k
    Peak memory use after GGC: 81998k
    Maximum of released memory in single GGC run: 16084k
    Garbage: 285751k -> 285909k
    Leak: 47479k
    Overhead: 32504k -> 32504k
    GGC runs: 508 -> 509
    Pre-IPA-Garbage: 163112k
    Pre-IPA-Leak: 86583k
    Pre-IPA-Overhead: 20472k
    Post-IPA-Garbage: 163112k
    Post-IPA-Leak: 86583k
    Post-IPA-Overhead: 20472k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 112303k -> 112315k
    Peak memory use before GGC: 84293k -> 84296k
    Peak memory use after GGC: 83457k
    Maximum of released memory in single GGC run: 16069k
    Garbage: 339883k -> 340013k
    Leak: 47518k
    Overhead: 39048k -> 39048k
    GGC runs: 577 -> 576
    Pre-IPA-Garbage: 167129k
    Pre-IPA-Leak: 86920k
    Pre-IPA-Overhead: 20965k
    Post-IPA-Garbage: 167129k
    Post-IPA-Leak: 86920k
    Post-IPA-Overhead: 20965k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 112699k
    Peak memory use before GGC: 84920k -> 84912k
    Peak memory use after GGC: 84071k
    Maximum of released memory in single GGC run: 16069k
    Garbage: 371223k -> 371366k
    Leak: 47521k
    Overhead: 42270k -> 42270k
    GGC runs: 608
    Pre-IPA-Garbage: 167209k
    Pre-IPA-Leak: 87592k
    Pre-IPA-Overhead: 21020k
    Post-IPA-Garbage: 167209k
    Post-IPA-Leak: 87592k
    Post-IPA-Overhead: 21020k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 371176k -> 371204k
    Peak memory use before GGC: 81875k -> 81897k
    Peak memory use after GGC: 52810k -> 52831k
    Maximum of released memory in single GGC run: 38147k -> 38169k
    Garbage: 141327k -> 141349k
    Leak: 10656k
    Overhead: 24891k
    GGC runs: 86
    Pre-IPA-Garbage: 12562k
    Pre-IPA-Leak: 20190k
    Pre-IPA-Overhead: 2242k
    Post-IPA-Garbage: 12562k
    Post-IPA-Leak: 20190k
    Post-IPA-Overhead: 2242k

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 372056k -> 372104k
    Peak memory use before GGC: 82572k -> 82594k
    Peak memory use after GGC: 53506k -> 53528k
    Maximum of released memory in single GGC run: 38132k -> 38154k
    Garbage: 141428k -> 141450k
    Leak: 12698k
    Overhead: 25474k
    GGC runs: 92
    Pre-IPA-Garbage: 12570k
    Pre-IPA-Leak: 20439k
    Pre-IPA-Overhead: 2296k
    Post-IPA-Garbage: 12570k
    Post-IPA-Leak: 20439k
    Post-IPA-Overhead: 2296k

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
    Overall memory needed: 230260k
    Peak memory use before GGC: 73624k
    Peak memory use after GGC: 66143k
    Maximum of released memory in single GGC run: 34721k
    Garbage: 219596k -> 219628k
    Leak: 11158k
    Overhead: 30799k
    GGC runs: 97
    Pre-IPA-Garbage: 48349k
    Pre-IPA-Leak: 63525k
    Pre-IPA-Overhead: 8965k
    Post-IPA-Garbage: 48349k
    Post-IPA-Leak: 63525k
    Post-IPA-Overhead: 8965k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 362224k -> 362140k
    Peak memory use before GGC: 73624k
    Peak memory use after GGC: 66143k
    Maximum of released memory in single GGC run: 36043k
    Garbage: 247851k -> 247883k
    Leak: 10980k
    Overhead: 36877k
    GGC runs: 106
    Pre-IPA-Garbage: 109693k
    Pre-IPA-Leak: 73929k
    Pre-IPA-Overhead: 15408k
    Post-IPA-Garbage: 109693k
    Post-IPA-Leak: 73929k
    Post-IPA-Overhead: 15408k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1024552k -> 1024116k
    Peak memory use before GGC: 139561k
    Peak memory use after GGC: 126838k
    Maximum of released memory in single GGC run: 62382k -> 62381k
    Garbage: 365693k -> 365724k
    Leak: 6759k
    Overhead: 45401k
    GGC runs: 104 -> 105
    Pre-IPA-Garbage: 109693k
    Pre-IPA-Leak: 73929k
    Pre-IPA-Overhead: 15408k
    Post-IPA-Garbage: 109693k
    Post-IPA-Leak: 73929k
    Post-IPA-Overhead: 15408k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog	2008-09-21 18:28:45.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-09-22 11:03:42.000000000 +0000
@@ -1,3 +1,78 @@
+2008-09-22  Ira Rosen  <irar@il.ibm.com>
+
+	PR tree-optimization/37482
+	* tree-vectorizer.h (struct _slp_instance): Add new field.
+	(SLP_INSTANCE_FIRST_LOAD_STMT): New.
+	(get_earlier_stmt): New function.
+	* tree-vect-analyze.c (vect_find_first_load_in_slp_instance): New
+	function.
+	(vect_analyze_slp_instance): Set SLP_INSTANCE_FIRST_LOAD_STMT.
+	* tree-vect-transform.c (vect_finish_stmt_generation): Remove the
+	asserts that GSI points to the scalar statement being vectorized.
+	Set new statement location according to GSI.
+	(vect_schedule_slp_instance): Use GSI of
+	SLP_INSTANCE_FIRST_LOAD_STMT when vectorizing loads.
+
+2008-09-21  Jan Hubicka  <jh@suse.cz>
+
+	* ipa-cp.c (ipcp_estimate_growth): Check recursive calls.
+	(ipcp_insert_stage): Update dead_nodes bitmap.
+
+2008-09-22  Danny Smith  <dannysmith@users.sourceforge.net>
+
+	PR target/37528	
+	* config/i386/t-cygming (SHLIB_LC): Remove.
+	(SHLIB_LINK): Don't add static objects to SHLIB_IMPLIB
+	* config/i386/t-cygwin (SHLIB_LC): Specify all required
+	libraries.
+
+2008-09-22  Hans-Peter Nilsson  <hp@axis.com>
+
+	PR middle-end/37170
+	PR middle-end/37280
+	* final.c (mark_symbol_ref_as_used): New helper function.
+	(output_operand): Instead of just looking inside MEMs for
+	SYMBOL_REFs, use new helper function and for_each_rtx.
+	* varasm.c (assemble_external): Move #ifndef ASM_OUTPUT_EXTERNAL
+	to after weak-handling.  Don't mark decls with TREE_STATIC as weak.
+	Make head comment more general.
+	* config/darwin.c (machopic_output_indirection): Handle weak
+	references here, like in assemble_external.
+
+2008-09-21  Eric Botcazou  <ebotcazou@adacore.com>
+
+	* config/sparc/sparc-protos.h (gen_compare_operator): Declare.
+	(sparc_emit_float_lib_cmp): Change return type.
+	* config/sparc/sparc.c (gen_compare_reg): Add comment about TFmode.
+	(gen_compare_operator): New function.
+	(sparc_emit_float_lib_cmp): Return the new operator to be used in
+	the comparison sequence.  Minor tweaks.
+	* config/sparc/sparc.md (seq, sne, sgt, slt, sge, sle): Assert
+	that the final operator and the result of sparc_emit_float_lib_cmp
+	match for software TFmode; use emit_insn in lieu of emit_jump_insn.
+	(beq, bne, bgt, blt, bge, ble, bunordered, bordered, bungt, bunlt,
+	buneq, bunge, bunle, bltgt): Assert that the final operator and the
+	result of sparc_emit_float_lib_cmp match for software TFmode.
+	(movqicc, movhicc, movsicc, movdicc): Merge into...
+	(mov<I:mode>cc): ...this.
+	(movsfcc, movdfcc, movtfcc): Merge into...
+	(mov<F:mode>cc): ...this.
+	(movqi_cc_sp64, movhi_cc_sp64, movsi_cc_sp64, movdi_cc_sp64): Merge
+	into...
+	(mov<I:mode>_cc_v9): ...this.
+	(movdi_cc_sp64_trunc): Delete.
+	(movqi_cc_reg_sp64, movhi_cc_reg_sp64, movsi_cc_reg_sp64,
+	movdi_cc_reg_sp64): Merge into...
+	(mov<I:mode>_cc_reg_sp64): ...this.
+	(movsf_cc_sp64): Rename into...
+	(movsf_cc_v9): ...this.
+	(movdf_cc_sp64): Rename into...
+	(movdf_cc_v9): ...this.
+	(movtf_cc_hq_sp64): Rename into...
+	(movtf_cc_hq_v9): ...this.
+	(movtf_cc_sp64): Rename into...
+	(movtf_cc_v9): ...this.  Adjust for renaming of movdf_cc_sp64.
+
 2008-09-21  Diego Novillo  <dnovillo@google.com>
 
 	* doc/gccint.texi: Include generic.texi and gimple.texi.


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]