A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Wed May 6 22:25: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: 85k
    Garbage: 218k
    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: 1515k
    Peak memory use after GGC: 1464k
    Maximum of released memory in single GGC run: 86k
    Garbage: 219k
    Leak: 1570k
    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: 8909k -> 8929k
    Peak memory use before GGC: 1488k
    Peak memory use after GGC: 1437k
    Maximum of released memory in single GGC run: 87k
    Garbage: 220k
    Leak: 1537k
    Overhead: 188k
    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 -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: 92k
    Garbage: 225k
    Leak: 1537k
    Overhead: 189k
    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 -O3 level:
    Overall memory needed: 8933k -> 8925k
    Peak memory use before GGC: 1488k
    Peak memory use after GGC: 1437k
    Maximum of released memory in single GGC run: 92k
    Garbage: 225k
    Leak: 1537k
    Overhead: 189k
    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 combine.c compilation at -O0 level:
    Overall memory needed: 31457k
    Peak memory use before GGC: 17484k
    Peak memory use after GGC: 17020k
    Maximum of released memory in single GGC run: 1913k
    Garbage: 38030k
    Leak: 7164k
    Overhead: 5526k -> 5526k
    GGC runs: 333
    Pre-IPA-Garbage: 12539k
    Pre-IPA-Leak: 18410k
    Pre-IPA-Overhead: 2515k
    Post-IPA-Garbage: 12539k
    Post-IPA-Leak: 18410k
    Post-IPA-Overhead: 2515k

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 33397k -> 33365k
    Peak memory use before GGC: 19392k
    Peak memory use after GGC: 18859k
    Maximum of released memory in single GGC run: 1923k
    Garbage: 38245k -> 38245k
    Leak: 10450k
    Overhead: 6339k -> 6339k
    GGC runs: 316
    Pre-IPA-Garbage: 12558k
    Pre-IPA-Leak: 20659k
    Pre-IPA-Overhead: 2998k
    Post-IPA-Garbage: 12558k
    Post-IPA-Leak: 20659k
    Post-IPA-Overhead: 2998k

comparing combine.c compilation at -O1 level:
    Overall memory needed: 31917k -> 31781k
    Peak memory use before GGC: 16491k
    Peak memory use after GGC: 16317k
    Maximum of released memory in single GGC run: 1389k
    Garbage: 44943k
    Leak: 7164k
    Overhead: 6323k -> 6323k
    GGC runs: 382
    Pre-IPA-Garbage: 12958k
    Pre-IPA-Leak: 17629k
    Pre-IPA-Overhead: 2512k
    Post-IPA-Garbage: 12958k
    Post-IPA-Leak: 17629k
    Post-IPA-Overhead: 2512k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 33241k -> 33085k
    Peak memory use before GGC: 16585k
    Peak memory use after GGC: 16415k
    Maximum of released memory in single GGC run: 1489k
    Garbage: 56735k -> 56737k
    Leak: 7191k
    Overhead: 8197k -> 8197k
    GGC runs: 442
    Pre-IPA-Garbage: 13096k
    Pre-IPA-Leak: 17716k
    Pre-IPA-Overhead: 2528k
    Post-IPA-Garbage: 13096k
    Post-IPA-Leak: 17716k
    Post-IPA-Overhead: 2528k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 33581k -> 33645k
    Peak memory use before GGC: 16586k
    Peak memory use after GGC: 16420k
    Maximum of released memory in single GGC run: 1673k
    Garbage: 67613k -> 67614k
    Leak: 7227k
    Overhead: 9712k -> 9712k
    GGC runs: 468
    Pre-IPA-Garbage: 13096k
    Pre-IPA-Leak: 17716k
    Pre-IPA-Overhead: 2528k
    Post-IPA-Garbage: 13096k
    Post-IPA-Leak: 17716k
    Post-IPA-Overhead: 2528k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 152669k -> 152705k
    Peak memory use before GGC: 65608k
    Peak memory use after GGC: 52818k
    Maximum of released memory in single GGC run: 26604k
    Garbage: 129481k
    Leak: 9591k
    Overhead: 16876k
    GGC runs: 259
    Pre-IPA-Garbage: 40782k
    Pre-IPA-Leak: 51017k
    Pre-IPA-Overhead: 7764k
    Post-IPA-Garbage: 40782k
    Post-IPA-Leak: 51017k
    Post-IPA-Overhead: 7764k

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 154017k -> 154013k
    Peak memory use before GGC: 66873k
    Peak memory use after GGC: 54081k
    Maximum of released memory in single GGC run: 26604k
    Garbage: 129818k
    Leak: 11222k
    Overhead: 17329k
    GGC runs: 253
    Pre-IPA-Garbage: 40791k
    Pre-IPA-Leak: 52542k
    Pre-IPA-Overhead: 8094k
    Post-IPA-Garbage: 40791k
    Post-IPA-Leak: 52542k
    Post-IPA-Overhead: 8094k

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 137841k
    Peak memory use before GGC: 54138k
    Peak memory use after GGC: 43653k
    Maximum of released memory in single GGC run: 17381k
    Garbage: 178724k
    Leak: 9181k
    Overhead: 22974k -> 22974k
    GGC runs: 290
    Pre-IPA-Garbage: 45067k
    Pre-IPA-Leak: 45088k
    Pre-IPA-Overhead: 7589k
    Post-IPA-Garbage: 45067k
    Post-IPA-Leak: 45088k
    Post-IPA-Overhead: 7589k

comparing insn-attrtab.c compilation at -O2 level:
  Amount of produced GGC garbage increased from 212037k to 212745k, overall 0.33%
    Overall memory needed: 201613k -> 201797k
    Peak memory use before GGC: 53557k
    Peak memory use after GGC: 43378k
    Maximum of released memory in single GGC run: 18700k -> 18813k
    Garbage: 212037k -> 212745k
    Leak: 9196k
    Overhead: 29422k -> 29528k
    GGC runs: 324 -> 325
    Pre-IPA-Garbage: 45129k
    Pre-IPA-Leak: 45095k
    Pre-IPA-Overhead: 7594k
    Post-IPA-Garbage: 45129k
    Post-IPA-Leak: 45095k
    Post-IPA-Overhead: 7594k

comparing insn-attrtab.c compilation at -O3 level:
  Amount of produced GGC garbage increased from 213251k to 213958k, overall 0.33%
    Overall memory needed: 201537k -> 201501k
    Peak memory use before GGC: 53562k
    Peak memory use after GGC: 43382k
    Maximum of released memory in single GGC run: 18646k -> 18758k
    Garbage: 213251k -> 213958k
    Leak: 9203k
    Overhead: 29816k -> 29922k
    GGC runs: 330 -> 331
    Pre-IPA-Garbage: 45129k
    Pre-IPA-Leak: 45095k
    Pre-IPA-Overhead: 7594k
    Post-IPA-Garbage: 45129k
    Post-IPA-Leak: 45095k
    Post-IPA-Overhead: 7594k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 145961k
    Peak memory use before GGC: 81663k
    Peak memory use after GGC: 80854k
    Maximum of released memory in single GGC run: 13633k
    Garbage: 197989k -> 197989k
    Leak: 55608k
    Overhead: 28464k -> 28464k
    GGC runs: 447
    Pre-IPA-Garbage: 110138k
    Pre-IPA-Leak: 84667k
    Pre-IPA-Overhead: 15210k
    Post-IPA-Garbage: 110138k
    Post-IPA-Leak: 84667k
    Post-IPA-Overhead: 15210k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 164025k -> 163977k
    Peak memory use before GGC: 95805k
    Peak memory use after GGC: 94854k
    Maximum of released memory in single GGC run: 13895k
    Garbage: 203318k -> 203319k
    Leak: 82700k -> 82699k
    Overhead: 35027k -> 35027k
    GGC runs: 419
    Pre-IPA-Garbage: 110724k
    Pre-IPA-Leak: 101188k
    Pre-IPA-Overhead: 18715k
    Post-IPA-Garbage: 110724k
    Post-IPA-Leak: 101188k
    Post-IPA-Overhead: 18715k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 108097k -> 108113k
    Peak memory use before GGC: 82668k -> 82660k
    Peak memory use after GGC: 81786k -> 81778k
    Maximum of released memory in single GGC run: 13451k
    Garbage: 258715k -> 258715k
    Leak: 52401k -> 52393k
    Overhead: 29710k -> 29710k
    GGC runs: 513
    Pre-IPA-Garbage: 150372k
    Pre-IPA-Leak: 87178k
    Pre-IPA-Overhead: 18330k -> 18330k
    Post-IPA-Garbage: 150372k
    Post-IPA-Leak: 87178k
    Post-IPA-Overhead: 18330k -> 18330k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 109121k -> 109141k
    Peak memory use before GGC: 82971k
    Peak memory use after GGC: 82148k
    Maximum of released memory in single GGC run: 13453k
    Garbage: 299347k -> 299348k
    Leak: 52487k
    Overhead: 35309k -> 35309k
    GGC runs: 567
    Pre-IPA-Garbage: 154592k
    Pre-IPA-Leak: 86244k
    Pre-IPA-Overhead: 18642k
    Post-IPA-Garbage: 154592k
    Post-IPA-Leak: 86244k
    Post-IPA-Overhead: 18642k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 108873k -> 108909k
    Peak memory use before GGC: 83377k
    Peak memory use after GGC: 82550k
    Maximum of released memory in single GGC run: 13453k
    Garbage: 318000k -> 318000k
    Leak: 52486k
    Overhead: 37620k -> 37620k
    GGC runs: 582
    Pre-IPA-Garbage: 154653k
    Pre-IPA-Leak: 86665k
    Pre-IPA-Overhead: 18668k
    Post-IPA-Garbage: 154653k
    Post-IPA-Leak: 86665k
    Post-IPA-Overhead: 18668k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 358809k -> 358769k
    Peak memory use before GGC: 78173k
    Peak memory use after GGC: 49107k
    Maximum of released memory in single GGC run: 37057k
    Garbage: 140058k
    Leak: 7711k
    Overhead: 25005k
    GGC runs: 86
    Pre-IPA-Garbage: 12037k
    Pre-IPA-Leak: 18627k
    Pre-IPA-Overhead: 2448k
    Post-IPA-Garbage: 12037k
    Post-IPA-Leak: 18627k
    Post-IPA-Overhead: 2448k

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 359633k -> 358621k
    Peak memory use before GGC: 78856k
    Peak memory use after GGC: 49791k
    Maximum of released memory in single GGC run: 37041k
    Garbage: 140123k
    Leak: 9708k
    Overhead: 25574k
    GGC runs: 94
    Pre-IPA-Garbage: 12039k
    Pre-IPA-Leak: 18873k
    Pre-IPA-Overhead: 2501k
    Post-IPA-Garbage: 12039k
    Post-IPA-Leak: 18873k
    Post-IPA-Overhead: 2501k

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
    Overall memory needed: 207361k -> 206981k
    Peak memory use before GGC: 71011k
    Peak memory use after GGC: 66115k
    Maximum of released memory in single GGC run: 35381k
    Garbage: 210888k
    Leak: 9405k
    Overhead: 31867k
    GGC runs: 94
    Pre-IPA-Garbage: 39202k
    Pre-IPA-Leak: 63828k
    Pre-IPA-Overhead: 7142k
    Post-IPA-Garbage: 39202k
    Post-IPA-Leak: 63828k
    Post-IPA-Overhead: 7142k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 529553k -> 526193k
    Peak memory use before GGC: 70831k
    Peak memory use after GGC: 66115k
    Maximum of released memory in single GGC run: 37550k
    Garbage: 267163k
    Leak: 9152k
    Overhead: 40049k
    GGC runs: 106
    Pre-IPA-Garbage: 89543k
    Pre-IPA-Leak: 80531k
    Pre-IPA-Overhead: 11392k
    Post-IPA-Garbage: 89543k
    Post-IPA-Leak: 80531k
    Post-IPA-Overhead: 11392k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1249437k -> 1250737k
    Peak memory use before GGC: 131401k
    Peak memory use after GGC: 123130k
    Maximum of released memory in single GGC run: 49333k
    Garbage: 342807k
    Leak: 10574k
    Overhead: 44260k
    GGC runs: 106
    Pre-IPA-Garbage: 89543k
    Pre-IPA-Leak: 80531k
    Pre-IPA-Overhead: 11392k
    Post-IPA-Garbage: 89543k
    Post-IPA-Leak: 80531k
    Post-IPA-Overhead: 11392k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-haydn-memory/x86_64/mem-result/ChangeLog	2009-05-06 10:59:43.000000000 +0000
+++ /usr/src/SpecTests/sandbox-haydn-memory/gcc/gcc/ChangeLog	2009-05-06 20:18:19.000000000 +0000
@@ -1,3 +1,63 @@
+2009-05-06  Janis Johnson  <janis187@us.ibm.com>
+
+	PR middle-end/39986
+	* dfp.c (encode_decimal32, decode_decimal32, encode_decimal64,
+	decode_decimal64, encode_decimal128, decode_decimal128): Avoid
+	32-bit memcpy into long.
+
+2009-05-06  Jakub Jelinek  <jakub@redhat.com>
+
+	* dwarf2out.c (new_reg_loc_descr): Don't ever create DW_OP_regX.
+	(one_reg_loc_descriptor): Create DW_OP_regX here instead of calling
+	new_reg_loc_descr.
+	(loc_by_reference): If loc is DW_OP_regX, change it into DW_OP_bregX 0
+	instead of appending DW_OP_deref*.
+
+2009-05-06  Michael Matz  <matz@suse.de>
+
+	PR middle-end/40021
+	* cfgexpand.c (maybe_cleanup_end_of_block): New static function.
+	(expand_gimple_cond): Use it to cleanup CFG and superfluous jumps.
+
+2009-05-06  Rafael Avila de Espindola  <espindola@google.com>
+
+	* Makefile.in (install-plugin): Fix srcdir handling.
+
+2009-05-06  Andrey Belevantsev  <abel@ispras.ru>
+
+	* tree-ssa.c (execute_update_address_taken): Handle TARGET_MEM_REF
+	when processing for not_regs_needed bitmap.
+	* gimple.c (walk_stmt_load_store_addr_ops): When visiting address,
+	handle TARGET_MEM_REF in lhs.  Check TMR_BASE for NULL while 
+	handling it for rhs. 
+
+2009-05-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config/i386/i386.md (unnamed inc/dec peephole): Use
+	optimize_insn_for_size_p instead
+	of optimize_size.
+	* config/i386/predicates.md (incdec_operand): Likewise.
+	(aligned_operand): Likewise.
+	* config/i386/sse.md (divv8sf3): Likewise.
+	(sqrtv8sf2): Likewise.
+
+2009-05-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config/i386/i386.c (ix86_build_signbit_mask): Make it static.
+
+	* config/i386/i386-protos.h (ix86_build_signbit_mask): Removed.
+
+2009-05-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config/i386/i386.md (*avx_<code><mode>3_finite): Replace
+	ssemodesuffixf2c with avxmodesuffixf2c.
+
+2009-05-06  Joseph Myers  <joseph@codesourcery.com>
+
+	PR c/40032
+	* c-decl.c (grokdeclarator): Handle incomplete type of unnamed
+	field.
+
 2009-05-05  Jakub Jelinek  <jakub@redhat.com>
 
 	* tree.h: Remove DECL_BY_REFERENCE from private_flag comment.


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