A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Fri Mar 14 20:04: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 -> 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: 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 -> 8168k
    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 -> 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: 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 -> 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: 8225k -> 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: 22641k -> 22640k
    Peak memory use before GGC: 7808k
    Peak memory use after GGC: 7189k
    Maximum of released memory in single GGC run: 1550k
    Garbage: 37868k
    Leak: 5517k
    Overhead: 4635k
    GGC runs: 372
Testing has produced no results
Testing has produced no results

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

comparing combine.c compilation at -O1 level:
    Overall memory needed: 32845k -> 32840k
    Peak memory use before GGC: 16263k
    Peak memory use after GGC: 16080k
    Maximum of released memory in single GGC run: 1379k -> 1380k
    Garbage: 51559k -> 51562k
    Leak: 5656k
    Overhead: 5805k -> 5805k
    GGC runs: 439
    Pre-IPA-Garbage: 13925k
    Pre-IPA-Leak: 17092k
    Pre-IPA-Overhead: 2119k
    Post-IPA-Garbage: 13925k
    Post-IPA-Leak: 17092k
    Post-IPA-Overhead: 2119k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 34657k -> 34660k
    Peak memory use before GGC: 16364k
    Peak memory use after GGC: 16197k
    Maximum of released memory in single GGC run: 1314k -> 1316k
    Garbage: 70936k -> 70945k
    Leak: 5995k
    Overhead: 8075k -> 8075k
    GGC runs: 507
    Pre-IPA-Garbage: 14079k
    Pre-IPA-Leak: 17155k
    Pre-IPA-Overhead: 2133k
    Post-IPA-Garbage: 14079k
    Post-IPA-Leak: 17155k
    Post-IPA-Overhead: 2133k

comparing combine.c compilation at -O3 level:
  Amount of produced GGC garbage increased from 87749k to 87899k, overall 0.17%
    Overall memory needed: 38541k -> 38464k
    Peak memory use before GGC: 16500k
    Peak memory use after GGC: 16202k
    Maximum of released memory in single GGC run: 2014k -> 2010k
    Garbage: 87749k -> 87899k
    Leak: 6048k -> 6039k
    Overhead: 9994k -> 10011k
    GGC runs: 544
    Pre-IPA-Garbage: 14081k
    Pre-IPA-Leak: 17167k
    Pre-IPA-Overhead: 2134k
    Post-IPA-Garbage: 14081k
    Post-IPA-Leak: 17167k
    Post-IPA-Overhead: 2134k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 137433k -> 137436k
    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 -> 138684k
    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: 142873k -> 142864k
    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: 184421k -> 184412k
    Peak memory use before GGC: 56855k
    Peak memory use after GGC: 51575k
    Maximum of released memory in single GGC run: 22891k
    Garbage: 245679k -> 245594k
    Leak: 10364k
    Overhead: 30403k -> 30386k
    GGC runs: 346
    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: 190069k -> 190256k
    Peak memory use before GGC: 66401k
    Peak memory use after GGC: 62285k
    Maximum of released memory in single GGC run: 23390k
    Garbage: 269384k -> 269298k
    Leak: 10403k
    Overhead: 32192k -> 32174k
    GGC runs: 346
    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: 148691k -> 148733k
    Peak memory use before GGC: 84449k
    Peak memory use after GGC: 83613k
    Maximum of released memory in single GGC run: 16993k
    Garbage: 200804k
    Leak: 48035k
    Overhead: 23982k
    GGC runs: 417
    Pre-IPA-Garbage: 109751k
    Pre-IPA-Leak: 71096k
    Pre-IPA-Overhead: 12096k
    Post-IPA-Garbage: 109751k
    Post-IPA-Leak: 71096k
    Post-IPA-Overhead: 12096k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 169315k -> 169317k
    Peak memory use before GGC: 96105k
    Peak memory use after GGC: 95153k
    Maximum of released memory in single GGC run: 17493k
    Garbage: 206431k
    Leak: 69718k
    Overhead: 28959k
    GGC runs: 390
    Pre-IPA-Garbage: 110395k
    Pre-IPA-Leak: 84377k
    Pre-IPA-Overhead: 14672k
    Post-IPA-Garbage: 110395k
    Post-IPA-Leak: 84377k
    Post-IPA-Overhead: 14672k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 122217k -> 122223k
    Peak memory use before GGC: 83951k
    Peak memory use after GGC: 83111k
    Maximum of released memory in single GGC run: 16213k
    Garbage: 288629k -> 288622k
    Leak: 47320k
    Overhead: 29242k -> 29242k
    GGC runs: 512
    Pre-IPA-Garbage: 154817k
    Pre-IPA-Leak: 87733k
    Pre-IPA-Overhead: 17481k
    Post-IPA-Garbage: 154817k
    Post-IPA-Leak: 87733k
    Post-IPA-Overhead: 17481k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 124741k -> 124743k
    Peak memory use before GGC: 84146k
    Peak memory use after GGC: 83312k
    Maximum of released memory in single GGC run: 16215k
    Garbage: 354028k -> 354021k
    Leak: 48415k -> 48418k
    Overhead: 36226k -> 36215k
    GGC runs: 584
    Pre-IPA-Garbage: 157364k
    Pre-IPA-Leak: 87884k
    Pre-IPA-Overhead: 17762k
    Post-IPA-Garbage: 157364k
    Post-IPA-Leak: 87884k
    Post-IPA-Overhead: 17762k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 127577k -> 127579k
    Peak memory use before GGC: 85427k
    Peak memory use after GGC: 84551k
    Maximum of released memory in single GGC run: 16587k
    Garbage: 377252k -> 377249k
    Leak: 48995k -> 48998k
    Overhead: 38305k -> 38301k
    GGC runs: 608
    Pre-IPA-Garbage: 160081k
    Pre-IPA-Leak: 88167k
    Pre-IPA-Overhead: 18011k
    Post-IPA-Garbage: 160081k
    Post-IPA-Leak: 88167k
    Post-IPA-Overhead: 18011k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 380451k -> 380450k
    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 -> 381242k
    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 -> 437136k
    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: 355609k -> 355596k
    Peak memory use before GGC: 75428k
    Peak memory use after GGC: 70442k
    Maximum of released memory in single GGC run: 32242k
    Garbage: 245093k
    Leak: 16080k
    Overhead: 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 -> 1198648k
    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-13 18:25:08.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-03-14 16:58:02.000000000 +0000
@@ -1,3 +1,50 @@
+2008-03-14  David Edelsohn  <edelsohn@gnu.org>
+
+	* doc/install.texi (Binaries): Remove UCLA archive.  Add HVCC
+	archive and Perzl.  Update The Written Word listing.
+
+2008-03-14  Richard Guenther  <rguenther@suse.de>
+
+	PR tree-optimization/34043
+	PR tree-optimization/33989
+	* tree-ssa-pre.c (execute_pre): Allow SCCVN to do insertion
+	when doing FRE.
+	(bitmap_find_leader): Use extra argument to verify dominance
+	relationship inside a basic-block.
+	(can_PRE_operation): Add VIEW_CONVERT_EXPR.
+	(find_leader_in_sets): Adjust.
+	(create_component_ref_by_pieces): Take extra argument for
+	dominance check, handle lookup failures.
+	(find_or_generate_expression): Likewise.
+	(create_expression_by_pieces): Likewise.
+	(insert_into_preds_of_block): Adjust.
+	(create_value_expr_from): If asked for, verify all operands
+	are in the blocks AVAIL_OUT set.
+	(make_values_for_stmt): Check for SSA_NAMEs that are life
+	over an abnormal edge.
+	(compute_avail): Remove such check.
+	(do_SCCVN_insertion): New function.
+	(eliminate): If we do not find a leader suitable for replacement
+	insert a replacement expression from SCCVN if available.
+	* tree-ssa-sccvn.h (run_scc_vn): Update prototype.
+	(struct vn_ssa_aux): Add needs_insertion flag.
+	* tree-ssa-sccvn.c (may_insert): New global flag.
+	(copy_reference_ops_from_ref): Value-number union member access
+	based on its size, not type and member if insertion is allowed.
+	(visit_reference_op_load): For a weak match from union type
+	punning lookup a view-converted value and insert a SSA_NAME
+	for that value if that is not found.
+	(visit_use): Make dumps shorter.  Do not disallow value numbering
+	SSA_NAMEs that are life over an abnormal edge to constants.
+	(free_scc_vn): Release inserted SSA_NAMEs.
+	(run_scc_vn): New flag to specify whether insertion is allowed.
+	Process SSA_NAMEs in forward order.
+	* tree-ssa-loop-im.c (for_each_index): Handle invariant
+	ADDR_EXPRs inside VIEW_CONVERT_EXPR.
+	* fold-const.c (fold_unary): Fold VIEW_CONVERT_EXPRs from/to
+	pointer type to/from integral types that do not change the
+	precision to regular conversions.
+
 2008-03-13  Uros Bizjak  <ubizjak@gmail.com>
 
 	* doc/extend.texi (X86 Built-in Functions) [__builtin_ia32_psll?,


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