A recent patch increased GCC's memory consumption in some cases!

gcctest@suse.de gcctest@suse.de
Sun Jan 20 11:48: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: 22703k
    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: 24707k
    Peak memory use before GGC: 9648k
    Peak memory use after GGC: 8954k
    Maximum of released memory in single GGC run: 1838k
    Garbage: 38291k
    Leak: 8380k
    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: 32919k
    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: 35775k
    Peak memory use before GGC: 16446k
    Peak memory use after GGC: 16280k
    Maximum of released memory in single GGC run: 1316k
    Garbage: 71130k
    Leak: 5986k
    Overhead: 8064k
    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: 39043k
    Peak memory use before GGC: 16623k
    Peak memory use after GGC: 16301k
    Maximum of released memory in single GGC run: 2063k
    Garbage: 93127k
    Leak: 6109k
    Overhead: 10687k
    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: 137443k
    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: 138735k
    Peak memory use before GGC: 58141k
    Peak memory use after GGC: 32598k
    Maximum of released memory in single GGC run: 33256k
    Garbage: 128862k
    Leak: 10057k
    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: 143015k
    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:
  Ovarall memory allocated via mmap and sbrk decreased from 184483k to 172087k, overall -7.20%
    Overall memory needed: 184483k -> 172087k
    Peak memory use before GGC: 56850k
    Peak memory use after GGC: 51570k
    Maximum of released memory in single GGC run: 22370k
    Garbage: 246629k
    Leak: 10362k
    Overhead: 30342k
    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:
  Ovarall memory allocated via mmap and sbrk decreased from 190687k to 177959k, overall -7.15%
    Overall memory needed: 190687k -> 177959k
    Peak memory use before GGC: 68033k
    Peak memory use after GGC: 62277k
    Maximum of released memory in single GGC run: 22875k
    Garbage: 274537k
    Leak: 10399k
    Overhead: 32137k
    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: 149537k
    Peak memory use before GGC: 84849k
    Peak memory use after GGC: 84008k
    Maximum of released memory in single GGC run: 17149k
    Garbage: 201068k
    Leak: 48173k
    Overhead: 24079k
    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: 169409k
    Peak memory use before GGC: 96061k
    Peak memory use after GGC: 95110k
    Maximum of released memory in single GGC run: 17205k
    Garbage: 206714k
    Leak: 69898k
    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: 123359k -> 123355k
    Peak memory use before GGC: 84526k
    Peak memory use after GGC: 83679k
    Maximum of released memory in single GGC run: 16324k
    Garbage: 290593k
    Leak: 47424k
    Overhead: 29408k
    GGC runs: 515
    Pre-IPA-Garbage: 155089k
    Pre-IPA-Leak: 88338k
    Pre-IPA-Overhead: 17593k
    Post-IPA-Garbage: 155089k
    Post-IPA-Leak: 88338k
    Post-IPA-Overhead: 17593k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 124211k
    Peak memory use before GGC: 84748k
    Peak memory use after GGC: 83908k
    Maximum of released memory in single GGC run: 16363k
    Garbage: 357675k
    Leak: 48356k
    Overhead: 36419k
    GGC runs: 588
    Pre-IPA-Garbage: 158354k
    Pre-IPA-Leak: 88467k
    Pre-IPA-Overhead: 17939k
    Post-IPA-Garbage: 158354k
    Post-IPA-Leak: 88467k
    Post-IPA-Overhead: 17939k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 126919k
    Peak memory use before GGC: 85966k
    Peak memory use after GGC: 85090k
    Maximum of released memory in single GGC run: 16722k
    Garbage: 384952k
    Leak: 48972k
    Overhead: 38683k
    GGC runs: 616
    Pre-IPA-Garbage: 161155k
    Pre-IPA-Leak: 88746k
    Pre-IPA-Overhead: 18193k
    Post-IPA-Garbage: 161155k
    Post-IPA-Leak: 88746k
    Post-IPA-Overhead: 18193k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 380432k
    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: 381232k
    Peak memory use before GGC: 101839k
    Peak memory use after GGC: 57493k
    Maximum of released memory in single GGC run: 50582k
    Garbage: 179066k
    Leak: 7828k
    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: 438599k
    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: 359811k -> 359815k
    Peak memory use before GGC: 75423k
    Peak memory use after GGC: 70437k
    Maximum of released memory in single GGC run: 32251k
    Garbage: 245332k
    Leak: 16245k
    Overhead: 38769k
    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 allocated via mmap and sbrk increased from 1197519k to 1345027k, overall 12.32%
    Overall memory needed: 1197519k -> 1345027k
    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-19 16:01:28.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-01-20 08:49:09.000000000 +0000
@@ -1,3 +1,54 @@
+2008-01-20  Richard Sandiford  <rsandifo@nildram.co.uk>
+
+	* global.c (find_reg): Only compute EH_RETURN_DATA_REGNO once per
+	input.
+
+2008-01-19  Kenneth Zadeck <zadeck@naturalbridge.com>
+
+	PR rtl-optimization/26854
+	PR rtl-optimization/34400
+	* ddg.c (create_ddg_dep_from_intra_loop_link): Do not use
+	DF_RD->gen.
+	* df.h (df_changeable_flags.DF_RD_NO_TRIM): New.
+	(df_rd_bb_info.expanded_lr_out): New.
+	* loop_invariant.c (find_defs): Added DF_RD_NO_TRIM flag.
+	* loop_iv.c (iv_analysis_loop_init): Ditto.
+	* df-problems.c (df_rd_free_bb_info, df_rd_alloc, df_rd_confluence_n,
+	df_rd_bb_local_compute, df_rd_transfer_function, df_rd_free):
+	Added code to allocate, initialize or free expanded_lr_out.
+	(df_rd_bb_local_compute_process_def): Restructured to make
+	more understandable.
+	(df_rd_confluence_n): Add code to do nothing with fake edges and
+	code to no apply invalidate_by_call sets if the sets are being trimmed.
+	(df_lr_local_finalize): Renamed to df_lr_finalize.
+	(df_live_local_finalize): Renamed to df_live_finalize.
+
+2008-01-20  Richard Sandiford  <rsandifo@nildram.co.uk>
+
+	PR target/34831
+	* config/mips/mips.md (div<mode>3): Use <recip_condition> when
+	deciding whether to use reciprocal instructions.
+
+2008-01-19  Uros Bizjak  <ubizjak@gmail.com>
+
+	* dwarf2out.c (dwarf2out_switch_text_section): Do not call
+	dwarf2out_note_section_used if cold_text_section is NULL.
+
+2008-01-19  Jakub Jelinek  <jakub@redhat.com>
+
+	PR gcov-profile/34610
+	* tree-cfg.c (make_edges): Mark both outgoing edges from
+	OMP_CONTINUE and from OMP_FOR as EDGE_ABNORMAL.
+	* omp-low.c (expand_omp_for): Clear EDGE_ABNORMAL bits
+	from OMP_FOR and OMP_CONTINUE outgoing edges.
+
+	* tree-profile.c (tree_profiling): Return early if
+	cfun->after_tree_profile != 0.  Set cfun->after_tree_profile
+	at the end.
+	* omp-low.c (expand_omp_parallel): Copy after_tree_profile
+	from cfun to child_cfun.
+	* function.h (struct function): Add after_tree_profile bit.
+
 2008-01-19 Anatoly Sokolov <aesok@post.ru>
 
 	* config/avr/avr.S (_exit): Disable interrupt.
@@ -182,7 +233,7 @@
 	function always sign-extends the value.
 
 2008-01-16  Jakub Jelinek  <jakub@redhat.com>
-	Richard Guenther  <rguenther@suse.de>
+	    Richard Guenther  <rguenther@suse.de>
 
 	PR c/34668
 	* gimplify.c (fold_indirect_ref_rhs): Rename to ...


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