A recent patch decreased GCC's memory consumption.

gcctest@suse.de gcctest@suse.de
Sat Mar 22 23:11: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: 8152k
    Peak memory use before GGC: 1103k
    Peak memory use after GGC: 1000k
    Maximum of released memory in single GGC run: 130k
    Garbage: 239k
    Leak: 957k
    Overhead: 80k
    GGC runs: 2
Testing has produced no results
Testing has produced no results

comparing empty function compilation at -O0 -g level:
    Overall memory needed: 8168k
    Peak memory use before GGC: 1130k
    Peak memory use after GGC: 1035k
    Maximum of released memory in single GGC run: 129k
    Garbage: 241k
    Leak: 989k
    Overhead: 85k
    GGC runs: 4
Testing has produced no results
Testing has produced no results

comparing empty function compilation at -O1 level:
    Overall memory needed: 8204k
    Peak memory use before GGC: 1103k
    Peak memory use after GGC: 1000k
    Maximum of released memory in single GGC run: 132k
    Garbage: 241k
    Leak: 957k
    Overhead: 81k
    GGC runs: 2
    Pre-IPA-Garbage: 228k
    Pre-IPA-Leak: 960k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 228k
    Post-IPA-Leak: 960k
    Post-IPA-Overhead: 79k

comparing empty function compilation at -O2 level:
    Overall memory needed: 8224k
    Peak memory use before GGC: 1103k
    Peak memory use after GGC: 1000k
    Maximum of released memory in single GGC run: 135k
    Garbage: 245k
    Leak: 958k
    Overhead: 82k
    GGC runs: 2
    Pre-IPA-Garbage: 228k
    Pre-IPA-Leak: 960k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 228k
    Post-IPA-Leak: 960k
    Post-IPA-Overhead: 79k

comparing empty function compilation at -O3 level:
    Overall memory needed: 8224k
    Peak memory use before GGC: 1103k
    Peak memory use after GGC: 1000k
    Maximum of released memory in single GGC run: 135k
    Garbage: 245k
    Leak: 958k
    Overhead: 82k
    GGC runs: 2
    Pre-IPA-Garbage: 228k
    Pre-IPA-Leak: 960k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 228k
    Post-IPA-Leak: 960k
    Post-IPA-Overhead: 79k

comparing combine.c compilation at -O0 level:
    Overall memory needed: 22644k
    Peak memory use before GGC: 7810k
    Peak memory use after GGC: 7189k
    Maximum of released memory in single GGC run: 1550k
    Garbage: 37894k
    Leak: 5517k
    Overhead: 4637k
    GGC runs: 372
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 24672k
    Peak memory use before GGC: 9648k
    Peak memory use after GGC: 8948k
    Maximum of released memory in single GGC run: 1838k
    Garbage: 38215k
    Leak: 8383k
    Overhead: 5264k
    GGC runs: 343
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O1 level:
    Overall memory needed: 32856k
    Peak memory use before GGC: 16268k
    Peak memory use after GGC: 16084k
    Maximum of released memory in single GGC run: 1380k
    Garbage: 51611k
    Leak: 5663k
    Overhead: 5810k
    GGC runs: 438
    Pre-IPA-Garbage: 13937k
    Pre-IPA-Leak: 17097k
    Pre-IPA-Overhead: 2120k
    Post-IPA-Garbage: 13937k
    Post-IPA-Leak: 17097k
    Post-IPA-Overhead: 2120k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 34656k
    Peak memory use before GGC: 16368k
    Peak memory use after GGC: 16201k
    Maximum of released memory in single GGC run: 1315k
    Garbage: 70958k
    Leak: 5994k
    Overhead: 8068k
    GGC runs: 508
    Pre-IPA-Garbage: 14091k
    Pre-IPA-Leak: 17160k
    Pre-IPA-Overhead: 2134k
    Post-IPA-Garbage: 14091k
    Post-IPA-Leak: 17160k
    Post-IPA-Overhead: 2134k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 38468k
    Peak memory use before GGC: 16506k
    Peak memory use after GGC: 16207k
    Maximum of released memory in single GGC run: 2012k
    Garbage: 87960k
    Leak: 6038k
    Overhead: 10009k
    GGC runs: 545
    Pre-IPA-Garbage: 14093k
    Pre-IPA-Leak: 17172k
    Pre-IPA-Overhead: 2136k
    Post-IPA-Garbage: 14093k
    Post-IPA-Leak: 17172k
    Post-IPA-Overhead: 2136k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 137432k
    Peak memory use before GGC: 57005k
    Peak memory use after GGC: 31462k
    Maximum of released memory in single GGC run: 33256k
    Garbage: 128634k
    Leak: 8368k
    Overhead: 14369k
    GGC runs: 292
Testing has produced no results
Testing has produced no results

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 138680k
    Peak memory use before GGC: 58147k
    Peak memory use after GGC: 32604k
    Maximum of released memory in single GGC run: 33256k
    Garbage: 128886k
    Leak: 10043k
    Overhead: 14724k
    GGC runs: 288
Testing has produced no results
Testing has produced no results

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 142840k
    Peak memory use before GGC: 56207k
    Peak memory use after GGC: 49970k
    Maximum of released memory in single GGC run: 23976k
    Garbage: 205213k
    Leak: 9261k
    Overhead: 24762k
    GGC runs: 315
    Pre-IPA-Garbage: 50376k
    Pre-IPA-Leak: 49662k
    Pre-IPA-Overhead: 7543k
    Post-IPA-Garbage: 50376k
    Post-IPA-Leak: 49662k
    Post-IPA-Overhead: 7543k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 184568k
    Peak memory use before GGC: 56838k
    Peak memory use after GGC: 51558k
    Maximum of released memory in single GGC run: 22891k
    Garbage: 245878k
    Leak: 10345k
    Overhead: 30414k
    GGC runs: 346
    Pre-IPA-Garbage: 50448k
    Pre-IPA-Leak: 49666k
    Pre-IPA-Overhead: 7551k
    Post-IPA-Garbage: 50448k
    Post-IPA-Leak: 49666k
    Post-IPA-Overhead: 7551k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 190416k
    Peak memory use before GGC: 66384k
    Peak memory use after GGC: 62267k
    Maximum of released memory in single GGC run: 23391k
    Garbage: 269582k
    Leak: 10383k
    Overhead: 32203k
    GGC runs: 346
    Pre-IPA-Garbage: 50448k
    Pre-IPA-Leak: 49666k
    Pre-IPA-Overhead: 7551k
    Post-IPA-Garbage: 50448k
    Post-IPA-Leak: 49666k
    Post-IPA-Overhead: 7551k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 148730k -> 148745k
    Peak memory use before GGC: 84475k
    Peak memory use after GGC: 83639k
    Maximum of released memory in single GGC run: 17028k
    Garbage: 200756k
    Leak: 48035k
    Overhead: 23977k
    GGC runs: 417
    Pre-IPA-Garbage: 109718k
    Pre-IPA-Leak: 71086k
    Pre-IPA-Overhead: 12093k
    Post-IPA-Garbage: 109718k
    Post-IPA-Leak: 71086k
    Post-IPA-Overhead: 12093k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 169574k -> 169569k
    Peak memory use before GGC: 96073k
    Peak memory use after GGC: 95120k
    Maximum of released memory in single GGC run: 17470k
    Garbage: 206402k
    Leak: 69717k
    Overhead: 28955k
    GGC runs: 390
    Pre-IPA-Garbage: 110362k
    Pre-IPA-Leak: 84367k
    Pre-IPA-Overhead: 14669k
    Post-IPA-Garbage: 110362k
    Post-IPA-Leak: 84367k
    Post-IPA-Overhead: 14669k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 122172k -> 122168k
    Peak memory use before GGC: 83935k
    Peak memory use after GGC: 83098k
    Maximum of released memory in single GGC run: 16195k
    Garbage: 288394k -> 288392k
    Leak: 47316k
    Overhead: 29216k -> 29216k
    GGC runs: 513
    Pre-IPA-Garbage: 154776k
    Pre-IPA-Leak: 87719k
    Pre-IPA-Overhead: 17477k
    Post-IPA-Garbage: 154776k
    Post-IPA-Leak: 87719k
    Post-IPA-Overhead: 17477k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 124676k
    Peak memory use before GGC: 84226k
    Peak memory use after GGC: 83296k
    Maximum of released memory in single GGC run: 16197k
    Garbage: 354453k -> 354451k
    Leak: 48418k
    Overhead: 36264k -> 36264k
    GGC runs: 586
    Pre-IPA-Garbage: 157324k
    Pre-IPA-Leak: 87866k
    Pre-IPA-Overhead: 17759k
    Post-IPA-Garbage: 157324k
    Post-IPA-Leak: 87866k
    Post-IPA-Overhead: 17759k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 127504k
    Peak memory use before GGC: 85407k
    Peak memory use after GGC: 84532k
    Maximum of released memory in single GGC run: 16568k
    Garbage: 377804k -> 377801k
    Leak: 49000k
    Overhead: 38373k -> 38372k
    GGC runs: 611
    Pre-IPA-Garbage: 160036k
    Pre-IPA-Leak: 88149k
    Pre-IPA-Overhead: 18007k
    Post-IPA-Garbage: 160036k
    Post-IPA-Leak: 88149k
    Post-IPA-Overhead: 18007k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 380451k
    Peak memory use before GGC: 101215k
    Peak memory use after GGC: 56868k
    Maximum of released memory in single GGC run: 50583k
    Garbage: 178905k
    Leak: 6103k
    Overhead: 30783k
    GGC runs: 107
Testing has produced no results
Testing has produced no results

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 381239k -> 381243k
    Peak memory use before GGC: 101845k
    Peak memory use after GGC: 57499k
    Maximum of released memory in single GGC run: 50582k
    Garbage: 179020k
    Leak: 7833k
    Overhead: 31215k
    GGC runs: 111
Testing has produced no results
Testing has produced no results

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
  Amount of memory still referenced at the end of compilation decreased from 15907k to 15009k, overall -5.98%
    Overall memory needed: 437264k -> 428080k
    Peak memory use before GGC: 78692k
    Peak memory use after GGC: 70441k
    Maximum of released memory in single GGC run: 37596k
    Garbage: 234583k -> 233151k
    Leak: 15907k -> 15009k
    Overhead: 35646k -> 33234k
    GGC runs: 106
    Pre-IPA-Garbage: 52926k
    Pre-IPA-Leak: 49238k
    Pre-IPA-Overhead: 7120k
    Post-IPA-Garbage: 52926k
    Post-IPA-Leak: 49238k
    Post-IPA-Overhead: 7120k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
  Amount of memory still referenced at the end of compilation decreased from 16079k to 15182k, overall -5.91%
    Overall memory needed: 357664k -> 353524k
    Peak memory use before GGC: 75428k
    Peak memory use after GGC: 70442k
    Maximum of released memory in single GGC run: 32234k -> 31731k
    Garbage: 245359k -> 243948k
    Leak: 16079k -> 15182k
    Overhead: 38822k -> 35646k
    GGC runs: 117
    Pre-IPA-Garbage: 91838k
    Pre-IPA-Leak: 77295k
    Pre-IPA-Overhead: 11793k
    Post-IPA-Garbage: 91838k
    Post-IPA-Leak: 77295k
    Post-IPA-Overhead: 11793k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1198728k -> 1198588k
    Peak memory use before GGC: 136589k
    Peak memory use after GGC: 127947k
    Maximum of released memory in single GGC run: 59910k -> 59901k
    Garbage: 369974k -> 369963k
    Leak: 24893k
    Overhead: 49889k -> 49887k
    GGC runs: 104
    Pre-IPA-Garbage: 91838k
    Pre-IPA-Leak: 77295k
    Pre-IPA-Overhead: 11793k
    Post-IPA-Garbage: 91838k
    Post-IPA-Leak: 77295k
    Post-IPA-Overhead: 11793k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog	2008-03-22 01:26:06.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-03-22 20:03:40.000000000 +0000
@@ -1,3 +1,35 @@
+2008-03-22  Richard Guenther  <rguenther@suse.de>
+
+	* tree-cfg.c (verify_expr): Recurse again for invariant addresses.
+	For PHI nodes verify the address is invariant.
+	* tree-ssa-ccp.c (ccp_decl_initial_min_invariant): Remove.
+	(get_symbol_constant_value): Use is_gimple_min_invariant.
+	(maybe_fold_stmt_indirect): Likewise.
+
+2008-03-22  Richard Sandiford  <rsandifo@nildram.co.uk>
+
+	PR rtl-optimization/33927
+	* Makefile.in (dse.o): Depend on $(TM_P_H).
+	* expr.h (extract_low_bits): Declare.
+	* expmed.c (extract_low_bits): New function.
+	* rtlhooks.c (gen_lowpart_general): Generalize SUBREG handling.
+	* dse.c: Include tm_p.h.
+	(find_shift_sequence): Remove the read_reg argument and return the
+	read value.  Emit the instructions instead of returning them.
+	Iterate on new_mode rather than calculating it each time.
+	Check MODES_TIEABLE_P.  Use simplify_gen_subreg to convert the
+	source to NEW_MODE and extract_low_bits to convert the shifted
+	value to READ_MODE.
+	(replace_read): Allow the load and store to have different mode
+	classes.  Use extract_low_bits when SHIFT == 0.  Create the shift
+	or extraction instructions before trying the replacement.  Update
+	dump-file code accordingly, avoiding use of REGNO (store_info->rhs).
+
+2008-03-22  Uros Bizjak  <ubizjak@gmail.com>
+
+	* config/i386/i386.c (assign_386_stack_local): Align DImode slots
+	to their natural alignment to avoid store forwarding stalls.
+
 2008-03-21  Andrew Pinski  <andrew_pinski@playstation.sony.com>
 
 	PR target/27946


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