This is the mail archive of the gcc-regression@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

A recent patch decreased GCC's memory consumption.


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: 8210k -> 8208k
    Peak memory use before GGC: 1291k
    Peak memory use after GGC: 1217k
    Maximum of released memory in single GGC run: 134k
    Garbage: 218k
    Leak: 1221k
    Overhead: 136k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing empty function compilation at -O0 -g level:
    Overall memory needed: 8454k -> 8452k
    Peak memory use before GGC: 1319k
    Peak memory use after GGC: 1245k
    Maximum of released memory in single GGC run: 133k
    Garbage: 220k
    Leak: 1254k
    Overhead: 141k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing empty function compilation at -O1 level:
    Overall memory needed: 8238k -> 8240k
    Peak memory use before GGC: 1291k
    Peak memory use after GGC: 1217k
    Maximum of released memory in single GGC run: 134k
    Garbage: 221k
    Leak: 1221k
    Overhead: 137k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing empty function compilation at -O2 level:
    Overall memory needed: 8454k -> 8452k
    Peak memory use before GGC: 1291k
    Peak memory use after GGC: 1218k
    Maximum of released memory in single GGC run: 135k
    Garbage: 226k
    Leak: 1221k
    Overhead: 138k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing empty function compilation at -O3 level:
    Overall memory needed: 8454k -> 8456k
    Peak memory use before GGC: 1291k
    Peak memory use after GGC: 1218k
    Maximum of released memory in single GGC run: 135k
    Garbage: 226k
    Leak: 1221k
    Overhead: 138k
    GGC runs: 4
    Pre-IPA-Garbage: 207k
    Pre-IPA-Leak: 1224k
    Pre-IPA-Overhead: 135k
    Post-IPA-Garbage: 207k
    Post-IPA-Leak: 1224k
    Post-IPA-Overhead: 135k

comparing combine.c compilation at -O0 level:
    Overall memory needed: 31990k -> 31988k
    Peak memory use before GGC: 18018k
    Peak memory use after GGC: 17801k
    Maximum of released memory in single GGC run: 1839k
    Garbage: 39406k
    Leak: 5800k
    Overhead: 5220k
    GGC runs: 337
    Pre-IPA-Garbage: 12408k
    Pre-IPA-Leak: 19349k
    Pre-IPA-Overhead: 2559k
    Post-IPA-Garbage: 12408k
    Post-IPA-Leak: 19349k
    Post-IPA-Overhead: 2559k

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 34010k -> 34008k
    Peak memory use before GGC: 19938k
    Peak memory use after GGC: 19657k
    Maximum of released memory in single GGC run: 1849k
    Garbage: 39703k
    Leak: 9082k
    Overhead: 6038k
    GGC runs: 321
    Pre-IPA-Garbage: 12507k
    Pre-IPA-Leak: 21623k
    Pre-IPA-Overhead: 3049k
    Post-IPA-Garbage: 12507k
    Post-IPA-Leak: 21623k
    Post-IPA-Overhead: 3049k

comparing combine.c compilation at -O1 level:
    Overall memory needed: 30750k -> 30620k
    Peak memory use before GGC: 15682k
    Peak memory use after GGC: 15507k
    Maximum of released memory in single GGC run: 1341k
    Garbage: 46800k
    Leak: 5780k
    Overhead: 6013k
    GGC runs: 402
    Pre-IPA-Garbage: 13147k
    Pre-IPA-Leak: 16845k
    Pre-IPA-Overhead: 2472k
    Post-IPA-Garbage: 13147k
    Post-IPA-Leak: 16845k
    Post-IPA-Overhead: 2472k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 31606k -> 31532k
    Peak memory use before GGC: 15825k
    Peak memory use after GGC: 15662k
    Maximum of released memory in single GGC run: 1355k
    Garbage: 60527k -> 60537k
    Leak: 5809k
    Overhead: 8021k -> 8022k
    GGC runs: 467
    Pre-IPA-Garbage: 13310k
    Pre-IPA-Leak: 16927k
    Pre-IPA-Overhead: 2491k
    Post-IPA-Garbage: 13310k
    Post-IPA-Leak: 16927k
    Post-IPA-Overhead: 2491k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 31970k -> 31736k
    Peak memory use before GGC: 15915k
    Peak memory use after GGC: 15756k
    Maximum of released memory in single GGC run: 1630k
    Garbage: 72941k -> 72942k
    Leak: 7136k
    Overhead: 9454k -> 9455k
    GGC runs: 497
    Pre-IPA-Garbage: 13310k
    Pre-IPA-Leak: 16927k
    Pre-IPA-Overhead: 2491k
    Post-IPA-Garbage: 13310k
    Post-IPA-Leak: 16927k
    Post-IPA-Overhead: 2491k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 155234k -> 155448k
    Peak memory use before GGC: 65230k
    Peak memory use after GGC: 53275k
    Maximum of released memory in single GGC run: 27424k
    Garbage: 130437k
    Leak: 8497k
    Overhead: 15723k
    GGC runs: 263
    Pre-IPA-Garbage: 38215k
    Pre-IPA-Leak: 55487k
    Pre-IPA-Overhead: 8223k
    Post-IPA-Garbage: 38215k
    Post-IPA-Leak: 55487k
    Post-IPA-Overhead: 8223k

comparing insn-attrtab.c compilation at -O0 -g level:
    Overall memory needed: 156510k -> 156724k
    Peak memory use before GGC: 66504k
    Peak memory use after GGC: 54546k
    Maximum of released memory in single GGC run: 27425k
    Garbage: 130915k
    Leak: 10147k
    Overhead: 16179k
    GGC runs: 255
    Pre-IPA-Garbage: 38272k
    Pre-IPA-Leak: 57029k
    Pre-IPA-Overhead: 8558k
    Post-IPA-Garbage: 38272k
    Post-IPA-Leak: 57029k
    Post-IPA-Overhead: 8558k

comparing insn-attrtab.c compilation at -O1 level:
    Overall memory needed: 133330k -> 133420k
    Peak memory use before GGC: 50200k
    Peak memory use after GGC: 43294k
    Maximum of released memory in single GGC run: 22951k
    Garbage: 180978k -> 180981k
    Leak: 7873k
    Overhead: 24528k -> 24529k
    GGC runs: 301
    Pre-IPA-Garbage: 43193k
    Pre-IPA-Leak: 43086k
    Pre-IPA-Overhead: 7642k
    Post-IPA-Garbage: 43193k
    Post-IPA-Leak: 43086k
    Post-IPA-Overhead: 7642k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 148826k -> 148816k
    Peak memory use before GGC: 50204k
    Peak memory use after GGC: 45013k
    Maximum of released memory in single GGC run: 17966k -> 17964k
    Garbage: 204660k -> 204641k
    Leak: 15536k
    Overhead: 30014k -> 29999k
    GGC runs: 326
    Pre-IPA-Garbage: 43265k
    Pre-IPA-Leak: 43092k
    Pre-IPA-Overhead: 7651k
    Post-IPA-Garbage: 43265k
    Post-IPA-Leak: 43092k
    Post-IPA-Overhead: 7651k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 162714k -> 164752k
    Peak memory use before GGC: 61826k
    Peak memory use after GGC: 58725k
    Maximum of released memory in single GGC run: 23617k
    Garbage: 242519k -> 242524k
    Leak: 7899k
    Overhead: 33463k -> 33465k
    GGC runs: 339
    Pre-IPA-Garbage: 43265k
    Pre-IPA-Leak: 43092k
    Pre-IPA-Overhead: 7651k
    Post-IPA-Garbage: 43265k
    Post-IPA-Leak: 43092k
    Post-IPA-Overhead: 7651k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 151196k -> 151211k
    Peak memory use before GGC: 82970k
    Peak memory use after GGC: 82148k
    Maximum of released memory in single GGC run: 14702k
    Garbage: 205124k
    Leak: 52167k
    Overhead: 26925k
    GGC runs: 415
    Pre-IPA-Garbage: 111127k
    Pre-IPA-Leak: 88391k
    Pre-IPA-Overhead: 14820k
    Post-IPA-Garbage: 111127k
    Post-IPA-Leak: 88391k
    Post-IPA-Overhead: 14820k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 169156k -> 169147k
    Peak memory use before GGC: 96597k
    Peak memory use after GGC: 95640k
    Maximum of released memory in single GGC run: 15130k
    Garbage: 210731k
    Leak: 78735k
    Overhead: 33589k
    GGC runs: 387
    Pre-IPA-Garbage: 111748k
    Pre-IPA-Leak: 104906k
    Pre-IPA-Overhead: 18323k
    Post-IPA-Garbage: 111748k
    Post-IPA-Leak: 104906k
    Post-IPA-Overhead: 18323k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 111239k -> 111223k
    Peak memory use before GGC: 84251k -> 84254k
    Peak memory use after GGC: 83412k
    Maximum of released memory in single GGC run: 14982k
    Garbage: 282165k -> 282027k
    Leak: 49470k
    Overhead: 31642k -> 31616k
    GGC runs: 502
    Pre-IPA-Garbage: 159771k
    Pre-IPA-Leak: 88115k
    Pre-IPA-Overhead: 19886k
    Post-IPA-Garbage: 159771k
    Post-IPA-Leak: 88115k
    Post-IPA-Overhead: 19886k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 112687k -> 112667k
    Peak memory use before GGC: 86015k -> 86013k
    Peak memory use after GGC: 85161k
    Maximum of released memory in single GGC run: 14965k
    Garbage: 337261k -> 336630k
    Leak: 49526k
    Overhead: 38209k -> 38161k
    GGC runs: 570 -> 569
    Pre-IPA-Garbage: 163761k
    Pre-IPA-Leak: 88480k
    Pre-IPA-Overhead: 20364k
    Post-IPA-Garbage: 163761k
    Post-IPA-Leak: 88480k
    Post-IPA-Overhead: 20364k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 113811k -> 113739k
    Peak memory use before GGC: 86636k -> 86633k
    Peak memory use after GGC: 85775k
    Maximum of released memory in single GGC run: 14965k
    Garbage: 368316k -> 367885k
    Leak: 49528k -> 49536k
    Overhead: 41447k -> 41484k
    GGC runs: 597 -> 598
    Pre-IPA-Garbage: 163841k
    Pre-IPA-Leak: 89138k
    Pre-IPA-Overhead: 20416k
    Post-IPA-Garbage: 163841k
    Post-IPA-Leak: 89138k
    Post-IPA-Overhead: 20416k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 361912k -> 361914k
    Peak memory use before GGC: 78518k
    Peak memory use after GGC: 49453k
    Maximum of released memory in single GGC run: 38186k
    Garbage: 144651k
    Leak: 7110k
    Overhead: 24889k
    GGC runs: 87
    Pre-IPA-Garbage: 12561k
    Pre-IPA-Leak: 20190k
    Pre-IPA-Overhead: 2241k
    Post-IPA-Garbage: 12561k
    Post-IPA-Leak: 20190k
    Post-IPA-Overhead: 2241k

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 362700k -> 362702k
    Peak memory use before GGC: 79215k
    Peak memory use after GGC: 50149k
    Maximum of released memory in single GGC run: 38170k
    Garbage: 144752k
    Leak: 9152k
    Overhead: 25473k
    GGC runs: 93
    Pre-IPA-Garbage: 12569k
    Pre-IPA-Leak: 20439k
    Pre-IPA-Overhead: 2295k
    Post-IPA-Garbage: 12569k
    Post-IPA-Leak: 20439k
    Post-IPA-Overhead: 2295k

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
  Ovarall memory allocated via mmap and sbrk decreased from 242106k to 227664k, overall -6.34%
    Overall memory needed: 242106k -> 227664k
    Peak memory use before GGC: 73624k
    Peak memory use after GGC: 66143k
    Maximum of released memory in single GGC run: 34735k
    Garbage: 222492k
    Leak: 7551k
    Overhead: 30652k
    GGC runs: 97
    Pre-IPA-Garbage: 48348k
    Pre-IPA-Leak: 63005k
    Pre-IPA-Overhead: 8797k
    Post-IPA-Garbage: 48348k
    Post-IPA-Leak: 63005k
    Post-IPA-Overhead: 8797k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 369134k -> 358484k
    Peak memory use before GGC: 73624k
    Peak memory use after GGC: 66143k
    Maximum of released memory in single GGC run: 36061k
    Garbage: 251005k
    Leak: 7553k
    Overhead: 36772k
    GGC runs: 106
    Pre-IPA-Garbage: 107058k
    Pre-IPA-Leak: 75901k
    Pre-IPA-Overhead: 14919k
    Post-IPA-Garbage: 107058k
    Post-IPA-Leak: 75901k
    Post-IPA-Overhead: 14919k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1027838k -> 1026608k
    Peak memory use before GGC: 141898k
    Peak memory use after GGC: 129175k
    Maximum of released memory in single GGC run: 62763k
    Garbage: 365514k
    Leak: 9099k
    Overhead: 44902k
    GGC runs: 103
    Pre-IPA-Garbage: 107058k
    Pre-IPA-Leak: 75901k
    Pre-IPA-Overhead: 14919k
    Post-IPA-Garbage: 107058k
    Post-IPA-Leak: 75901k
    Post-IPA-Overhead: 14919k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog	2008-11-19 14:42:45.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-11-20 08:08:38.000000000 +0000
@@ -1,8 +1,133 @@
+2008-11-19  Zdenek Dvorak  <ook@ucw.cz>
+
+	PR rtl-optimization/32283
+	* tree-ssa-loop-niter.c (scev_probably_wraps_p): Use type of the base
+	of the induction variable to decide whether it may wrap.
+	* tree-ssa-loop-ivopts.c (rewrite_use_compare): Emit the initialization
+	of the bound before the loop.
+	* simplify-rtx.c (simplify_binary_operation_1): Add two simplifications
+	regarding AND.
+	(simplify_plus_minus): Only fail if no simplification is possible.
+	* loop-iv.c (simple_rhs_p): Consider reg + reg and reg << cst simple.
+
+2008-11-20  Jakub Jelinek  <jakub@redhat.com>
+
+	PR c++/36631
+	* gimplify.c (gimplify_call_expr): Defer most of the cannot inline
+	checking until GIMPLE lowering.
+	* gimple-low.c (check_call_args): New function.
+	(lower_stmt) <case GIMPLE_CALL>: Call it.
+
+2008-11-19  Adam Nemet  <anemet@caviumnetworks.com>
+
+	* config/mips/mips.c (mips_gimplify_va_arg_expr): Use -rsize
+	with the same type as the first operand of the AND expression.
+
+2008-11-19  Vladimir Makarov  <vmakarov@redhat.com>
+
+	PR bootstrap/37859
+	* ira-int.h (struct ira_loop_tree_node): New member
+	entered_from_non_parent_p.
+
+	* ira-color.c (print_loop_title): Print loop bbs.
+
+	* ira-emit.c (entered_from_non_parent_p,
+	setup_entered_from_non_parent_p): New functions.
+	(not_modified_p): Rename to store_can_be_removed_p.  Check there
+	is no side entries.
+	(generate_edge_moves): Use store_can_be_removed_p instead of
+	not_modified_p.
+	(ira_emit): Call setup_entered_from_non_parent_p.
+	
+	* ira-build.c (copy_info_to_removed_store_destinations):
+	Accumulate CALL_FREQ, CALL_CROSSED_NUM, and
+	ALLOCNO_EXCESS_PRESSURE_POINTS_NUM.
+	(ira_flattening): Don't CHECK MEM_OPTIMIZED_DEST[_P], always
+	update all accumulated attributes.
+	
+2008-11-19  Vladimir Makarov  <vmakarov@redhat.com>
+
+	PR bootstrap/37790
+	* ira-int.h (ira_copy_allocno_live_range_list,
+	ira_merge_allocno_live_ranges,
+	ira_allocno_live_ranges_intersect_p,
+	ira_finish_allocno_live_range_list): New prototypes.
+	(ira_allocno_live_ranges_intersect_p,
+	ira_pseudo_live_ranges_intersect_p): Remove.
+	
+	* ira-conflicts.c (ira_allocno_live_ranges_intersect_p,
+	ira_pseudo_live_ranges_intersect_p): Rename to
+	allocnos_have_intersected_live_ranges_p and
+	pseudos_have_intersected_live_ranges_p.  Move them from here to
+	...
+
+	* ira-color.c: ... here
+	(coalesced_allocno_conflict_p): Use
+	allocnos_have_intersected_live_ranges_p.
+	(coalesced_allocnos_living_at_program_points,
+	coalesced_allocnos_live_at_points_p,
+	set_coalesced_allocnos_live_points): Remove.
+	(slot_coalesced_allocnos_live_ranges,
+	slot_coalesced_allocno_live_ranges_intersect_p,
+	setup_slot_coalesced_allocno_live_ranges): New.
+	(coalesce_spill_slots): Use ranges of coalesced allocnos.
+	(ira_sort_regnos_for_alter_reg): Use
+	allocnos_have_intersected_live_ranges_p.
+	(ira_reuse_stack_slot): Use
+	pseudos_have_intersected_live_ranges_p.
+
+	* global.c (pseudo_for_reload_consideration_p): Check
+	flag_ira_share_spill_slots too.
+
+	* ira-build.c (copy_allocno_live_range_list): Rename to
+	ira_copy_allocno_live_range_list.  Make it external.
+	(merge_ranges): Rename to ira_merge_allocno_live_ranges.  Make it
+	external.
+	(ira_allocno_live_ranges_intersect_p): New.
+	(ira_finish_allocno_live_range_list): New.
+	(finish_allocno): Use it.
+	(remove_unnecessary_allocnos): Use ira_merge_allocno_live_ranges.
+	(copy_info_to_removed_store_destinations): Ditto.  Use
+	ira_copy_allocno_live_range_list.
+	(ira_flattening): Use ira_merge_allocno_live_ranges.
+	
+	* ira.c (too_high_register_pressure_p): New function.
+	(ira): Switch off sharing spill slots if the pressure is too high.
+
+2008-11-19  Richard Guenther  <rguenther@suse.de>
+
+	* tree.c (build2_stat): Allow non-POINTER_PLUS_EXPRs with
+	non-sizetype offsets if their precision matches that of
+	the pointer.
+	* expr.c (expand_expr_real_1): Always sign-extend the offset
+	operand of a POINTER_PLUS_EXPR.
+
+2008-11-19  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>
+
+	* config.gcc: Unobsolete mips-sgi-irix[56]*.
+	(mips-sgi-irix[56]*): No need to use fixproto.
+
+2008-11-19  Maxim Kuvyrkov  <maxim@codesourcery.com>
+	    Paul Brook  <paul@codesourcery.com>
+
+	* config/m68k/lb1sf68.asm: Add GNU-stack annotation to avoid
+	executable stack.
+
+2008-11-19  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+	* config/m68k/m68k.c (sched_attr_op_type): Handle all CONSTs.
+
+2008-11-19  Razya Ladelsky  <razya@il.ibm.com>
+
+        PR target/38156
+        * tree-parloops.c (loop_parallel_p): NULL vect_dump.
+	(separate_decls_in_region): Create shared struct even when there 
+	are only reductions.
+
 2008-11-19  Hariharan Sandanagobalane <hariharan@picochip.com>
 	* config/picochip/picochip.c (headers): Remove an unnecessary
 	header file.
 
-
 2008-11-19  Andrew Stubbs  <ams@codesourcery.com>
 
 	PR target/36133
--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog.cp	2008-11-18 21:09:08.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/cp/ChangeLog	2008-11-20 08:08:37.000000000 +0000
@@ -1,3 +1,30 @@
+2008-11-19  Dodji Seketeli  <dodji@redhat.com>
+
+	PR c++/37142
+	* pt.c (coerce_template_template_parm): Use the more robust
+	uses_template_parms instead of dependent_type_p.
+
+2008-11-19  Dodji Seketeli  <dodji@redhat.com>
+
+	PR c++/35405
+	* pt.c (lookup_template_class): Check pointers before dereferencing
+	  Them.
+	* error.c (dump_template_decl): Likewise.
+
+2008-11-19  Jason Merrill  <jason@redhat.com>
+
+	PR c++/36410
+	* decl2.c (grokfield): Pass ATTR_FLAG_TYPE_IN_PLACE for a typedef
+	that names a class for linkage purposes.
+
+	PR c++/37563
+	* parser.c (cp_parser_pseudo_destructor_name): A pseudo-destructor
+	name is not a declaration.
+
+	PR c++/37256
+	* pt.c (instantiate_decl): Don't require a definition of
+	a template that is explicitly instantiated 'extern'.
+
 2008-11-18  Jason Merrill  <jason@redhat.com>
 	    Jakub Jelinek  <jakub@redhat.com>
 	


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]