A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Mon Mar 10 22:55: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: 8149k
    Peak memory use before GGC: 1103k
    Peak memory use after GGC: 1000k
    Maximum of released memory in single GGC run: 130k
    Garbage: 239k
    Leak: 956k
    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: 8165k
    Peak memory use before GGC: 1130k
    Peak memory use after GGC: 1035k
    Maximum of released memory in single GGC run: 130k
    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: 8205k
    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: 959k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 228k
    Post-IPA-Leak: 959k
    Post-IPA-Overhead: 79k

comparing empty function compilation at -O2 level:
    Overall memory needed: 8225k
    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: 8225k
    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: 22677k
    Peak memory use before GGC: 7811k
    Peak memory use after GGC: 7192k
    Maximum of released memory in single GGC run: 1550k
    Garbage: 37936k
    Leak: 5519k
    Overhead: 4650k
    GGC runs: 371
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 24701k
    Peak memory use before GGC: 9651k
    Peak memory use after GGC: 8959k
    Maximum of released memory in single GGC run: 1838k
    Garbage: 38298k
    Leak: 8385k
    Overhead: 5277k
    GGC runs: 342
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O1 level:
    Overall memory needed: 32921k
    Peak memory use before GGC: 16336k
    Peak memory use after GGC: 16152k
    Maximum of released memory in single GGC run: 1381k
    Garbage: 51798k
    Leak: 5664k
    Overhead: 5845k
    GGC runs: 440
    Pre-IPA-Garbage: 13916k
    Pre-IPA-Leak: 17170k
    Pre-IPA-Overhead: 2124k
    Post-IPA-Garbage: 13916k
    Post-IPA-Leak: 17170k
    Post-IPA-Overhead: 2124k

comparing combine.c compilation at -O2 level:
  Amount of memory still referenced at the end of compilation increased from 5995k to 6006k, overall 0.18%
    Overall memory needed: 34689k -> 34737k
    Peak memory use before GGC: 16434k
    Peak memory use after GGC: 16271k
    Maximum of released memory in single GGC run: 1317k
    Garbage: 71321k -> 71360k
    Leak: 5995k -> 6006k
    Overhead: 8148k -> 8137k
    GGC runs: 508 -> 509
    Pre-IPA-Garbage: 14070k
    Pre-IPA-Leak: 17234k
    Pre-IPA-Overhead: 2139k
    Post-IPA-Garbage: 14070k
    Post-IPA-Leak: 17234k
    Post-IPA-Overhead: 2139k

comparing combine.c compilation at -O3 level:
  Amount of produced GGC garbage increased from 88182k to 88297k, overall 0.13%
  Amount of memory still referenced at the end of compilation increased from 6041k to 6051k, overall 0.18%
    Overall memory needed: 38469k -> 38617k
    Peak memory use before GGC: 16569k
    Peak memory use after GGC: 16287k
    Maximum of released memory in single GGC run: 1998k -> 1999k
    Garbage: 88182k -> 88297k
    Leak: 6041k -> 6051k
    Overhead: 10110k -> 10119k
    GGC runs: 544
    Pre-IPA-Garbage: 14072k
    Pre-IPA-Leak: 17246k
    Pre-IPA-Overhead: 2140k
    Post-IPA-Garbage: 14072k
    Post-IPA-Leak: 17246k
    Post-IPA-Overhead: 2140k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 137433k
    Peak memory use before GGC: 57004k
    Peak memory use after GGC: 31462k
    Maximum of released memory in single GGC run: 33255k
    Garbage: 128871k
    Leak: 8133k
    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: 138685k
    Peak memory use before GGC: 58147k
    Peak memory use after GGC: 32604k
    Maximum of released memory in single GGC run: 33257k
    Garbage: 128867k
    Leak: 10062k
    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: 142861k -> 142849k
    Peak memory use before GGC: 56224k
    Peak memory use after GGC: 49987k
    Maximum of released memory in single GGC run: 23976k
    Garbage: 205052k
    Leak: 9280k
    Overhead: 24747k
    GGC runs: 315
    Pre-IPA-Garbage: 50357k
    Pre-IPA-Leak: 49682k
    Pre-IPA-Overhead: 7543k
    Post-IPA-Garbage: 50357k
    Post-IPA-Leak: 49682k
    Post-IPA-Overhead: 7543k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 184581k -> 184409k
    Peak memory use before GGC: 56855k
    Peak memory use after GGC: 51575k
    Maximum of released memory in single GGC run: 22901k -> 22899k
    Garbage: 245706k -> 245751k
    Leak: 10364k -> 10364k
    Overhead: 30403k -> 30407k
    GGC runs: 347
    Pre-IPA-Garbage: 50429k
    Pre-IPA-Leak: 49685k
    Pre-IPA-Overhead: 7551k
    Post-IPA-Garbage: 50429k
    Post-IPA-Leak: 49685k
    Post-IPA-Overhead: 7551k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 190053k -> 190085k
    Peak memory use before GGC: 66400k -> 66401k
    Peak memory use after GGC: 62284k
    Maximum of released memory in single GGC run: 23392k -> 23397k
    Garbage: 269386k -> 269429k
    Leak: 10401k -> 10402k
    Overhead: 32191k -> 32194k
    GGC runs: 348
    Pre-IPA-Garbage: 50429k
    Pre-IPA-Leak: 49685k
    Pre-IPA-Overhead: 7551k
    Post-IPA-Garbage: 50429k
    Post-IPA-Leak: 49685k
    Post-IPA-Overhead: 7551k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 148303k -> 148364k
    Peak memory use before GGC: 84247k
    Peak memory use after GGC: 83412k
    Maximum of released memory in single GGC run: 16731k
    Garbage: 200925k
    Leak: 48029k
    Overhead: 23992k
    GGC runs: 417
    Pre-IPA-Garbage: 109792k
    Pre-IPA-Leak: 71157k
    Pre-IPA-Overhead: 12100k
    Post-IPA-Garbage: 109792k
    Post-IPA-Leak: 71157k
    Post-IPA-Overhead: 12100k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 169715k -> 169720k
    Peak memory use before GGC: 96218k
    Peak memory use after GGC: 95253k
    Maximum of released memory in single GGC run: 17546k
    Garbage: 206563k
    Leak: 69712k
    Overhead: 28969k
    GGC runs: 390
    Pre-IPA-Garbage: 110435k
    Pre-IPA-Leak: 84438k
    Pre-IPA-Overhead: 14676k
    Post-IPA-Garbage: 110435k
    Post-IPA-Leak: 84438k
    Post-IPA-Overhead: 14676k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 122501k -> 122505k
    Peak memory use before GGC: 84168k
    Peak memory use after GGC: 83331k
    Maximum of released memory in single GGC run: 16273k
    Garbage: 290373k
    Leak: 47320k
    Overhead: 29430k
    GGC runs: 518
    Pre-IPA-Garbage: 155006k
    Pre-IPA-Leak: 87961k
    Pre-IPA-Overhead: 17505k
    Post-IPA-Garbage: 155006k
    Post-IPA-Leak: 87961k
    Post-IPA-Overhead: 17505k

comparing Gerald's testcase PR8361 compilation at -O2 level:
  Amount of produced GGC garbage increased from 354284k to 356078k, overall 0.51%
  Amount of memory still referenced at the end of compilation increased from 48282k to 48426k, overall 0.30%
    Overall memory needed: 124549k -> 124921k
    Peak memory use before GGC: 84375k -> 84337k
    Peak memory use after GGC: 83499k -> 83498k
    Maximum of released memory in single GGC run: 16276k
    Garbage: 354284k -> 356078k
    Leak: 48282k -> 48426k
    Overhead: 36328k -> 36428k
    GGC runs: 586 -> 587
    Pre-IPA-Garbage: 157573k
    Pre-IPA-Leak: 88094k
    Pre-IPA-Overhead: 17788k
    Post-IPA-Garbage: 157573k
    Post-IPA-Leak: 88094k
    Post-IPA-Overhead: 17788k

comparing Gerald's testcase PR8361 compilation at -O3 level:
  Amount of produced GGC garbage increased from 378412k to 380143k, overall 0.46%
  Amount of memory still referenced at the end of compilation increased from 48870k to 49006k, overall 0.28%
    Overall memory needed: 127497k -> 127861k
    Peak memory use before GGC: 85604k -> 85602k
    Peak memory use after GGC: 84752k
    Maximum of released memory in single GGC run: 16625k
    Garbage: 378412k -> 380143k
    Leak: 48870k -> 49006k
    Overhead: 38508k -> 38622k
    GGC runs: 609 -> 611
    Pre-IPA-Garbage: 160292k
    Pre-IPA-Leak: 88379k
    Pre-IPA-Overhead: 18037k
    Post-IPA-Garbage: 160292k
    Post-IPA-Leak: 88379k
    Post-IPA-Overhead: 18037k

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: 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:
    Overall memory needed: 437301k -> 437209k
    Peak memory use before GGC: 78692k
    Peak memory use after GGC: 70441k
    Maximum of released memory in single GGC run: 37596k
    Garbage: 234302k
    Leak: 15907k
    Overhead: 35590k
    GGC runs: 106
    Pre-IPA-Garbage: 52926k
    Pre-IPA-Leak: 49237k
    Pre-IPA-Overhead: 7120k
    Post-IPA-Garbage: 52926k
    Post-IPA-Leak: 49237k
    Post-IPA-Overhead: 7120k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 356213k -> 355681k
    Peak memory use before GGC: 75428k
    Peak memory use after GGC: 70442k
    Maximum of released memory in single GGC run: 32242k
    Garbage: 245004k -> 245093k
    Leak: 16079k -> 16080k
    Overhead: 38757k -> 38768k
    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: 1199189k -> 1199149k
    Peak memory use before GGC: 136589k
    Peak memory use after GGC: 127947k
    Maximum of released memory in single GGC run: 59911k
    Garbage: 369974k
    Leak: 24893k
    Overhead: 49889k
    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-10 15:54:11.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-03-10 19:43:19.000000000 +0000
@@ -1,3 +1,35 @@
+2008-03-10  Jakub Jelinek  <jakub@redhat.com>
+
+	PR c/35438
+	PR c/35439
+	* c-parser.c (c_parser_omp_threadprivate): Don't add vars with
+	errorneous type.  Check that v is a VAR_DECL.
+
+	PR middle-end/35099
+	* tree-cfg.c (new_label_mapper): Update cfun->last_label_uid.
+
+2008-03-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR tree-optimization/35494
+	* tree-ssa-ccp.c (get_symbol_constant_value): Check if value
+	may be overriden at link and run time.
+
+2008-03-10  Richard Guenther  <rguenther@suse.de>
+
+	PR tree-optimization/34677
+	* tree-ssa-pre.c (modify_expr_node_pool): Remove.
+	(poolify_tree): Likewise.
+	(modify_expr_template): Likewise.
+	(poolify_modify_stmt): Likewise.
+	(insert_fake_stores): Handle all component-ref style stores
+	in addition to INDIRECT_REF.  Also handle complex types.
+	Do not poolify the inserted load.
+	(realify_fake_stores): Do not rebuild the tree but only
+	make it a SSA_NAME copy.
+	(init_pre): Remove initialzation of modify_expr_template.
+	Do not allocate modify_expr_node_pool.
+	(fini_pre): Do not free modify_expr_node_pool.
+
 2008-03-10  Paul Brook  <paul@codesourcery.com>
 
 	* config/arm/arm.md (UNSPEC_STACK_ALIGN, UNSPEC_PIC_OFFSET): Renumber


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