A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Thu Jan 10 07:53: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: 8151k
    Peak memory use before GGC: 1096k
    Peak memory use after GGC: 994k
    Maximum of released memory in single GGC run: 129k
    Garbage: 237k
    Leak: 951k
    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: 8167k
    Peak memory use before GGC: 1123k
    Peak memory use after GGC: 1021k
    Maximum of released memory in single GGC run: 131k
    Garbage: 239k
    Leak: 984k
    Overhead: 84k
    GGC runs: 3
Testing has produced no results
Testing has produced no results

comparing empty function compilation at -O1 level:
    Overall memory needed: 8211k
    Peak memory use before GGC: 1096k
    Peak memory use after GGC: 994k
    Maximum of released memory in single GGC run: 131k
    Garbage: 239k
    Leak: 952k
    Overhead: 81k
    GGC runs: 2
    Pre-IPA-Garbage: 226k
    Pre-IPA-Leak: 954k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 226k
    Post-IPA-Leak: 954k
    Post-IPA-Overhead: 79k

comparing empty function compilation at -O2 level:
    Overall memory needed: 8231k
    Peak memory use before GGC: 1096k
    Peak memory use after GGC: 994k
    Maximum of released memory in single GGC run: 134k
    Garbage: 243k
    Leak: 953k
    Overhead: 81k
    GGC runs: 2
    Pre-IPA-Garbage: 226k
    Pre-IPA-Leak: 955k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 226k
    Post-IPA-Leak: 955k
    Post-IPA-Overhead: 79k

comparing empty function compilation at -O3 level:
    Overall memory needed: 8231k
    Peak memory use before GGC: 1096k
    Peak memory use after GGC: 994k
    Maximum of released memory in single GGC run: 134k
    Garbage: 243k
    Leak: 953k
    Overhead: 81k
    GGC runs: 2
    Pre-IPA-Garbage: 226k
    Pre-IPA-Leak: 955k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 226k
    Post-IPA-Leak: 955k
    Post-IPA-Overhead: 79k

comparing combine.c compilation at -O0 level:
    Overall memory needed: 22699k -> 22695k
    Peak memory use before GGC: 7809k
    Peak memory use after GGC: 7186k
    Maximum of released memory in single GGC run: 1550k
    Garbage: 37949k
    Leak: 5506k
    Overhead: 4649k
    GGC runs: 371
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 24699k
    Peak memory use before GGC: 9648k
    Peak memory use after GGC: 8954k
    Maximum of released memory in single GGC run: 1838k
    Garbage: 38291k
    Leak: 8320k
    Overhead: 5276k
    GGC runs: 342
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O1 level:
    Overall memory needed: 33147k -> 33143k
    Peak memory use before GGC: 16345k
    Peak memory use after GGC: 16161k
    Maximum of released memory in single GGC run: 1362k
    Garbage: 51471k
    Leak: 5660k
    Overhead: 5782k
    GGC runs: 443
    Pre-IPA-Garbage: 13923k
    Pre-IPA-Leak: 17182k
    Pre-IPA-Overhead: 2129k
    Post-IPA-Garbage: 13923k
    Post-IPA-Leak: 17182k
    Post-IPA-Overhead: 2129k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 36047k
    Peak memory use before GGC: 16446k
    Peak memory use after GGC: 16280k
    Maximum of released memory in single GGC run: 1316k
    Garbage: 71101k
    Leak: 5990k
    Overhead: 8058k
    GGC runs: 512
    Pre-IPA-Garbage: 14080k
    Pre-IPA-Leak: 17247k
    Pre-IPA-Overhead: 2144k
    Post-IPA-Garbage: 14080k
    Post-IPA-Leak: 17247k
    Post-IPA-Overhead: 2144k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 39395k -> 39399k
    Peak memory use before GGC: 16626k
    Peak memory use after GGC: 16301k
    Maximum of released memory in single GGC run: 2063k
    Garbage: 93081k
    Leak: 6110k
    Overhead: 10677k
    GGC runs: 546
    Pre-IPA-Garbage: 14086k
    Pre-IPA-Leak: 17267k
    Pre-IPA-Overhead: 2146k
    Post-IPA-Garbage: 14086k
    Post-IPA-Leak: 17267k
    Post-IPA-Overhead: 2146k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 137439k
    Peak memory use before GGC: 56999k
    Peak memory use after GGC: 31456k
    Maximum of released memory in single GGC run: 33256k
    Garbage: 128624k
    Leak: 8382k
    Overhead: 14368k
    GGC runs: 293
Testing has produced no results
Testing has produced no results

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 138695k
    Peak memory use before GGC: 58141k
    Peak memory use after GGC: 32598k
    Maximum of released memory in single GGC run: 33256k
    Garbage: 128840k
    Leak: 10042k
    Overhead: 14724k
    GGC runs: 289
Testing has produced no results
Testing has produced no results

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 144819k -> 144827k
    Peak memory use before GGC: 56211k
    Peak memory use after GGC: 49983k
    Maximum of released memory in single GGC run: 23976k
    Garbage: 206434k
    Leak: 9275k
    Overhead: 24742k
    GGC runs: 315
    Pre-IPA-Garbage: 50355k
    Pre-IPA-Leak: 49676k
    Pre-IPA-Overhead: 7543k
    Post-IPA-Garbage: 50355k
    Post-IPA-Leak: 49676k
    Post-IPA-Overhead: 7543k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 188087k
    Peak memory use before GGC: 56850k
    Peak memory use after GGC: 51570k
    Maximum of released memory in single GGC run: 22733k
    Garbage: 246656k
    Leak: 10362k
    Overhead: 30349k
    GGC runs: 346
    Pre-IPA-Garbage: 50427k
    Pre-IPA-Leak: 49680k
    Pre-IPA-Overhead: 7550k
    Post-IPA-Garbage: 50427k
    Post-IPA-Leak: 49680k
    Post-IPA-Overhead: 7550k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 192847k -> 192879k
    Peak memory use before GGC: 68033k
    Peak memory use after GGC: 62277k
    Maximum of released memory in single GGC run: 23238k
    Garbage: 274564k
    Leak: 10399k
    Overhead: 32145k
    GGC runs: 348
    Pre-IPA-Garbage: 50427k
    Pre-IPA-Leak: 49680k
    Pre-IPA-Overhead: 7550k
    Post-IPA-Garbage: 50427k
    Post-IPA-Leak: 49680k
    Post-IPA-Overhead: 7550k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 149489k
    Peak memory use before GGC: 84849k
    Peak memory use after GGC: 84008k
    Maximum of released memory in single GGC run: 17149k
    Garbage: 201070k
    Leak: 48173k
    Overhead: 24080k
    GGC runs: 417
    Pre-IPA-Garbage: 109656k
    Pre-IPA-Leak: 71361k
    Pre-IPA-Overhead: 12151k
    Post-IPA-Garbage: 109656k
    Post-IPA-Leak: 71361k
    Post-IPA-Overhead: 12151k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 168857k -> 168853k
    Peak memory use before GGC: 96061k
    Peak memory use after GGC: 95110k
    Maximum of released memory in single GGC run: 17205k
    Garbage: 206567k
    Leak: 69786k
    Overhead: 29065k
    GGC runs: 391
    Pre-IPA-Garbage: 110300k
    Pre-IPA-Leak: 84641k
    Pre-IPA-Overhead: 14727k
    Post-IPA-Garbage: 110300k
    Post-IPA-Leak: 84641k
    Post-IPA-Overhead: 14727k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 123587k -> 123588k
    Peak memory use before GGC: 84527k
    Peak memory use after GGC: 83680k
    Maximum of released memory in single GGC run: 16324k
    Garbage: 292123k -> 292112k
    Leak: 47432k -> 47432k
    Overhead: 29531k -> 29530k
    GGC runs: 516
    Pre-IPA-Garbage: 155083k
    Pre-IPA-Leak: 88340k
    Pre-IPA-Overhead: 17592k
    Post-IPA-Garbage: 155083k
    Post-IPA-Leak: 88340k
    Post-IPA-Overhead: 17592k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 126591k -> 126728k
    Peak memory use before GGC: 84750k
    Peak memory use after GGC: 83909k
    Maximum of released memory in single GGC run: 16363k
    Garbage: 362881k -> 363083k
    Leak: 48359k -> 48358k
    Overhead: 36797k -> 36821k
    GGC runs: 591
    Pre-IPA-Garbage: 158351k
    Pre-IPA-Leak: 88468k
    Pre-IPA-Overhead: 17939k
    Post-IPA-Garbage: 158351k
    Post-IPA-Leak: 88468k
    Post-IPA-Overhead: 17939k

comparing Gerald's testcase PR8361 compilation at -O3 level:
  Amount of memory still referenced at the end of compilation increased from 48887k to 48973k, overall 0.17%
    Overall memory needed: 131747k -> 131228k
    Peak memory use before GGC: 85944k
    Peak memory use after GGC: 85091k
    Maximum of released memory in single GGC run: 16721k
    Garbage: 394074k -> 393714k
    Leak: 48887k -> 48973k
    Overhead: 39371k -> 39332k
    GGC runs: 623 -> 626
    Pre-IPA-Garbage: 161152k
    Pre-IPA-Leak: 88748k -> 88748k
    Pre-IPA-Overhead: 18193k -> 18193k
    Post-IPA-Garbage: 161152k
    Post-IPA-Leak: 88748k -> 88748k
    Post-IPA-Overhead: 18193k -> 18193k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 380112k
    Peak memory use before GGC: 101209k
    Peak memory use after GGC: 56862k
    Maximum of released memory in single GGC run: 50583k
    Garbage: 178951k
    Leak: 6098k
    Overhead: 30783k
    GGC runs: 106
Testing has produced no results
Testing has produced no results

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 380908k
    Peak memory use before GGC: 101839k
    Peak memory use after GGC: 57493k
    Maximum of released memory in single GGC run: 50582k
    Garbage: 179056k
    Leak: 7800k
    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:
    Overall memory needed: 441151k -> 437359k
    Peak memory use before GGC: 78857k
    Peak memory use after GGC: 70436k
    Maximum of released memory in single GGC run: 37753k
    Garbage: 234534k
    Leak: 16073k
    Overhead: 35581k
    GGC runs: 105
    Pre-IPA-Garbage: 52924k
    Pre-IPA-Leak: 49245k
    Pre-IPA-Overhead: 7121k
    Post-IPA-Garbage: 52924k
    Post-IPA-Leak: 49245k
    Post-IPA-Overhead: 7121k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 359315k -> 359571k
    Peak memory use before GGC: 75423k
    Peak memory use after GGC: 70437k
    Maximum of released memory in single GGC run: 32245k
    Garbage: 245314k
    Leak: 16245k
    Overhead: 38767k
    GGC runs: 116
    Pre-IPA-Garbage: 91836k
    Pre-IPA-Leak: 77290k
    Pre-IPA-Overhead: 11793k
    Post-IPA-Garbage: 91836k
    Post-IPA-Leak: 77290k
    Post-IPA-Overhead: 11793k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1313899k
    Peak memory use before GGC: 136584k
    Peak memory use after GGC: 127942k
    Maximum of released memory in single GGC run: 59911k
    Garbage: 371518k
    Leak: 24376k
    Overhead: 49888k
    GGC runs: 103
    Pre-IPA-Garbage: 91836k
    Pre-IPA-Leak: 77290k
    Pre-IPA-Overhead: 11793k
    Post-IPA-Garbage: 91836k
    Post-IPA-Leak: 77290k
    Post-IPA-Overhead: 11793k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog	2008-01-09 09:15:28.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-01-10 03:08:43.000000000 +0000
@@ -1,3 +1,46 @@
+2008-01-09  Sebastian Pop  <sebastian.pop@amd.com>
+
+	PR tree-optimization/34017
+	* lambda-code.c (lambda_loopnest_to_gcc_loopnest): Generate code
+	also for PHI_NODE expressions.
+
+2008-01-09  Jan Hubicka  <jh@suse.cz>
+
+	PR tree-optimization/34708
+	* tree-inline.c (estimate_num_insns_1): Compute cost of SWITCH_EXPR
+	based on number of case labels.
+	(init_inline_once): Remove switch_cost.
+	* tree-inline.h (eni_weights_d): Remove switch_cost.
+
+2008-01-09  Richard Guenther  <rguenther@suse.de>
+	Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+	PR middle-end/30132
+	* gimplify.c (gimplify_cond_expr): Do not create an addressable
+	temporary if an rvalue is ok or an lvalue is not required.
+
+2008-01-09  Richard Guenther  <rguenther@suse.de>
+
+	PR middle-end/34458
+	* tree-data-ref.c (initialize_matrix_A): Use tree_low_cst,
+	adjust return type.
+
+2008-01-09  Richard Guenther  <rguenther@suse.de>
+
+	PR middle-end/34679
+	* tree.c (host_integerp): Check for sizetype only if the
+	type is an integer type.
+
+2008-01-09  Steven Bosscher  <stevenb.gcc@gmail.com>
+
+	PR debug/26364
+	* opts.c (decode_options): Disable inlining of functions called
+	once if not in unit-at-a-time mode.
+
+2008-01-09  Alexandre Oliva  <aoliva@redhat.com>
+
+	* Makefile.in (dse.o): Remove duplicate $(RECOG_H) dependency.
+
 2008-01-08  Richard Guenther  <rguenther@suse.de>
 
 	PR middle-end/31863


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