A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Tue May 19 17: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: 1539k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 210k
    Post-IPA-Leak: 1539k
    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: 219k
    Leak: 1570k
    Overhead: 192k
    GGC runs: 4
    Pre-IPA-Garbage: 210k
    Pre-IPA-Leak: 1539k
    Pre-IPA-Overhead: 186k
    Post-IPA-Garbage: 210k
    Post-IPA-Leak: 1539k
    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: 8925k -> 8929k
    Peak memory use before GGC: 1488k
    Peak memory use after GGC: 1437k
    Maximum of released memory in single GGC run: 92k
    Garbage: 226k
    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
    Peak memory use before GGC: 1488k
    Peak memory use after GGC: 1437k
    Maximum of released memory in single GGC run: 92k
    Garbage: 226k
    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:
  Amount of memory still referenced at the end of compilation increased from 7155k to 7171k, overall 0.22%
    Overall memory needed: 31445k
    Peak memory use before GGC: 17469k
    Peak memory use after GGC: 17020k
    Maximum of released memory in single GGC run: 1910k
    Garbage: 37902k -> 37903k
    Leak: 7155k -> 7171k
    Overhead: 5492k -> 5492k
    GGC runs: 330 -> 331
    Pre-IPA-Garbage: 12539k
    Pre-IPA-Leak: 18401k
    Pre-IPA-Overhead: 2507k
    Post-IPA-Garbage: 12539k
    Post-IPA-Leak: 18401k
    Post-IPA-Overhead: 2507k

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 33369k
    Peak memory use before GGC: 19377k
    Peak memory use after GGC: 18859k
    Maximum of released memory in single GGC run: 1920k
    Garbage: 38118k
    Leak: 10441k
    Overhead: 6305k
    GGC runs: 315
    Pre-IPA-Garbage: 12558k
    Pre-IPA-Leak: 20650k
    Pre-IPA-Overhead: 2989k
    Post-IPA-Garbage: 12558k
    Post-IPA-Leak: 20650k
    Post-IPA-Overhead: 2989k

comparing combine.c compilation at -O1 level:
    Overall memory needed: 31837k -> 31873k
    Peak memory use before GGC: 16476k
    Peak memory use after GGC: 16310k
    Maximum of released memory in single GGC run: 1378k
    Garbage: 45344k
    Leak: 7156k
    Overhead: 6390k
    GGC runs: 387
    Pre-IPA-Garbage: 12959k
    Pre-IPA-Leak: 17620k
    Pre-IPA-Overhead: 2503k
    Post-IPA-Garbage: 12959k
    Post-IPA-Leak: 17620k
    Post-IPA-Overhead: 2503k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 32949k -> 32801k
    Peak memory use before GGC: 16540k
    Peak memory use after GGC: 16375k
    Maximum of released memory in single GGC run: 1488k
    Garbage: 56233k -> 56233k
    Leak: 7188k
    Overhead: 8012k -> 8012k
    GGC runs: 441
    Pre-IPA-Garbage: 13011k
    Pre-IPA-Leak: 17643k
    Pre-IPA-Overhead: 2509k
    Post-IPA-Garbage: 13011k
    Post-IPA-Leak: 17643k
    Post-IPA-Overhead: 2509k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 33317k -> 33345k
    Peak memory use before GGC: 16507k
    Peak memory use after GGC: 16341k
    Maximum of released memory in single GGC run: 1671k
    Garbage: 65046k
    Leak: 7211k
    Overhead: 9285k -> 9285k
    GGC runs: 471
    Pre-IPA-Garbage: 13011k
    Pre-IPA-Leak: 17643k
    Pre-IPA-Overhead: 2509k
    Post-IPA-Garbage: 13011k
    Post-IPA-Leak: 17643k
    Post-IPA-Overhead: 2509k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 152505k
    Peak memory use before GGC: 65254k
    Peak memory use after GGC: 52818k
    Maximum of released memory in single GGC run: 26250k
    Garbage: 128573k
    Leak: 9587k
    Overhead: 16691k
    GGC runs: 259
    Pre-IPA-Garbage: 40782k
    Pre-IPA-Leak: 51014k
    Pre-IPA-Overhead: 7761k
    Post-IPA-Garbage: 40782k
    Post-IPA-Leak: 51014k
    Post-IPA-Overhead: 7761k

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 153849k -> 153817k
    Peak memory use before GGC: 66520k
    Peak memory use after GGC: 54081k
    Maximum of released memory in single GGC run: 26251k
    Garbage: 128911k
    Leak: 11219k
    Overhead: 17144k
    GGC runs: 253
    Pre-IPA-Garbage: 40791k
    Pre-IPA-Leak: 52539k
    Pre-IPA-Overhead: 8091k
    Post-IPA-Garbage: 40791k
    Post-IPA-Leak: 52539k
    Post-IPA-Overhead: 8091k

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 154557k
    Peak memory use before GGC: 54960k
    Peak memory use after GGC: 44890k
    Maximum of released memory in single GGC run: 17233k
    Garbage: 180932k
    Leak: 9178k
    Overhead: 23406k
    GGC runs: 298
    Pre-IPA-Garbage: 45067k
    Pre-IPA-Leak: 45085k
    Pre-IPA-Overhead: 7586k
    Post-IPA-Garbage: 45067k
    Post-IPA-Leak: 45085k
    Post-IPA-Overhead: 7586k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 202221k -> 202225k
    Peak memory use before GGC: 54409k
    Peak memory use after GGC: 44641k
    Maximum of released memory in single GGC run: 18696k
    Garbage: 211482k
    Leak: 9192k
    Overhead: 29278k
    GGC runs: 331
    Pre-IPA-Garbage: 45129k
    Pre-IPA-Leak: 45092k
    Pre-IPA-Overhead: 7591k
    Post-IPA-Garbage: 45129k
    Post-IPA-Leak: 45092k
    Post-IPA-Overhead: 7591k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 202237k -> 202013k
    Peak memory use before GGC: 54409k
    Peak memory use after GGC: 44641k -> 44637k
    Maximum of released memory in single GGC run: 18695k
    Garbage: 212704k
    Leak: 9199k
    Overhead: 29669k -> 29669k
    GGC runs: 339
    Pre-IPA-Garbage: 45129k
    Pre-IPA-Leak: 45092k
    Pre-IPA-Overhead: 7591k
    Post-IPA-Garbage: 45129k
    Post-IPA-Leak: 45092k
    Post-IPA-Overhead: 7591k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 146249k -> 146241k
    Peak memory use before GGC: 81679k
    Peak memory use after GGC: 80870k
    Maximum of released memory in single GGC run: 13632k
    Garbage: 197869k
    Leak: 55413k
    Overhead: 28228k
    GGC runs: 446
    Pre-IPA-Garbage: 110139k
    Pre-IPA-Leak: 84472k
    Pre-IPA-Overhead: 14999k
    Post-IPA-Garbage: 110139k
    Post-IPA-Leak: 84472k
    Post-IPA-Overhead: 14999k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 163949k -> 164025k
    Peak memory use before GGC: 95820k
    Peak memory use after GGC: 94870k
    Maximum of released memory in single GGC run: 13895k
    Garbage: 203199k -> 203199k
    Leak: 82504k
    Overhead: 34791k -> 34791k
    GGC runs: 418
    Pre-IPA-Garbage: 110724k
    Pre-IPA-Leak: 100993k
    Pre-IPA-Overhead: 18504k
    Post-IPA-Garbage: 110724k
    Post-IPA-Leak: 100993k
    Post-IPA-Overhead: 18504k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 107245k -> 107221k
    Peak memory use before GGC: 81696k
    Peak memory use after GGC: 80883k
    Maximum of released memory in single GGC run: 13475k
    Garbage: 258273k -> 258272k
    Leak: 52212k
    Overhead: 29617k -> 29617k
    GGC runs: 515
    Pre-IPA-Garbage: 149433k
    Pre-IPA-Leak: 85868k
    Pre-IPA-Overhead: 17968k -> 17968k
    Post-IPA-Garbage: 149433k
    Post-IPA-Leak: 85868k
    Post-IPA-Overhead: 17968k -> 17968k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 106941k -> 106933k
    Peak memory use before GGC: 81622k
    Peak memory use after GGC: 80162k
    Maximum of released memory in single GGC run: 13479k
    Garbage: 296591k -> 296581k
    Leak: 52286k
    Overhead: 34674k -> 34672k
    GGC runs: 561
    Pre-IPA-Garbage: 152496k
    Pre-IPA-Leak: 84974k
    Pre-IPA-Overhead: 18178k
    Post-IPA-Garbage: 152496k
    Post-IPA-Leak: 84974k
    Post-IPA-Overhead: 18178k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 107473k -> 107469k
    Peak memory use before GGC: 82083k
    Peak memory use after GGC: 80167k
    Maximum of released memory in single GGC run: 13479k
    Garbage: 313952k
    Leak: 52289k
    Overhead: 37003k -> 37003k
    GGC runs: 581
    Pre-IPA-Garbage: 152496k
    Pre-IPA-Leak: 84978k
    Pre-IPA-Overhead: 18178k
    Post-IPA-Garbage: 152496k
    Post-IPA-Leak: 84978k
    Post-IPA-Overhead: 18178k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 358809k -> 358569k
    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: 25004k
    GGC runs: 86
    Pre-IPA-Garbage: 12038k
    Pre-IPA-Leak: 18626k
    Pre-IPA-Overhead: 2447k
    Post-IPA-Garbage: 12038k
    Post-IPA-Leak: 18626k
    Post-IPA-Overhead: 2447k

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 358417k -> 358449k
    Peak memory use before GGC: 78856k
    Peak memory use after GGC: 49791k
    Maximum of released memory in single GGC run: 37041k
    Garbage: 140124k
    Leak: 9707k
    Overhead: 25573k
    GGC runs: 94
    Pre-IPA-Garbage: 12040k
    Pre-IPA-Leak: 18873k
    Pre-IPA-Overhead: 2500k
    Post-IPA-Garbage: 12040k
    Post-IPA-Leak: 18873k
    Post-IPA-Overhead: 2500k

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
    Overall memory needed: 208753k -> 208637k
    Peak memory use before GGC: 74131k
    Peak memory use after GGC: 69415k
    Maximum of released memory in single GGC run: 35390k
    Garbage: 215892k
    Leak: 9258k
    Overhead: 32795k
    GGC runs: 95
    Pre-IPA-Garbage: 39202k
    Pre-IPA-Leak: 63682k
    Pre-IPA-Overhead: 6995k
    Post-IPA-Garbage: 39202k
    Post-IPA-Leak: 63682k
    Post-IPA-Overhead: 6995k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 532041k -> 530177k
    Peak memory use before GGC: 74132k
    Peak memory use after GGC: 69415k
    Maximum of released memory in single GGC run: 37541k
    Garbage: 255641k
    Leak: 9008k
    Overhead: 38354k
    GGC runs: 106
    Pre-IPA-Garbage: 89544k
    Pre-IPA-Leak: 80238k
    Pre-IPA-Overhead: 11099k
    Post-IPA-Garbage: 89544k
    Post-IPA-Leak: 80238k
    Post-IPA-Overhead: 11099k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1234121k -> 1234769k
    Peak memory use before GGC: 134702k
    Peak memory use after GGC: 126430k
    Maximum of released memory in single GGC run: 54316k
    Garbage: 340034k
    Leak: 10282k
    Overhead: 43411k
    GGC runs: 106
    Pre-IPA-Garbage: 89544k
    Pre-IPA-Leak: 80238k
    Pre-IPA-Overhead: 11099k
    Post-IPA-Garbage: 89544k
    Post-IPA-Leak: 80238k
    Post-IPA-Overhead: 11099k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-haydn-memory/x86_64/mem-result/ChangeLog	2009-05-19 01:03:57.000000000 +0000
+++ /usr/src/SpecTests/sandbox-haydn-memory/gcc/gcc/ChangeLog	2009-05-19 15:17:40.000000000 +0000
@@ -1,3 +1,20 @@
+2009-05-19  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+	* builtins.c (do_mpc_arg1): Separate MPFR/MPC C rounding types.
+
+2009-05-19  Ben Elliston  <bje@au.ibm.com>
+
+	* unwind-dw2-fde.c (fde_unencoded_compare): Replace type punning
+	assignments with memcpy calls.
+	(add_fdes): Likewise.
+	(binary_search_unencoded_fdes): Likewise.
+	(linear_search_fdes): Eliminate type puns.
+	
+2009-05-19  Richard Guenther  <rguenther@suse.de>
+
+	* tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Do
+	not falsely claim to have propagated into all uses.
+
 2009-05-19  Ben Elliston  <bje@au.ibm.com>
 
 	* doc/invoke.texi (C Dialect Options): Update OpenMP specification


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