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

gcctest@suse.de gcctest@suse.de
Tue Dec 12 13:10:00 GMT 2006


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: 18265k -> 18273k
    Peak memory use before GGC: 2233k
    Peak memory use after GGC: 1940k
    Maximum of released memory in single GGC run: 293k
    Garbage: 422k -> 422k
    Leak: 2271k
    Overhead: 446k -> 446k
    GGC runs: 3

comparing empty function compilation at -O0 -g level:
    Overall memory needed: 18281k -> 18289k
    Peak memory use before GGC: 2260k
    Peak memory use after GGC: 1967k
    Maximum of released memory in single GGC run: 293k
    Garbage: 425k -> 425k
    Leak: 2303k
    Overhead: 450k -> 450k
    GGC runs: 3

comparing empty function compilation at -O1 level:
    Overall memory needed: 18369k -> 18373k
    Peak memory use before GGC: 2233k
    Peak memory use after GGC: 1940k
    Maximum of released memory in single GGC run: 293k
    Garbage: 426k -> 426k
    Leak: 2273k
    Overhead: 446k -> 446k
    GGC runs: 4

comparing empty function compilation at -O2 level:
    Overall memory needed: 18381k -> 18385k
    Peak memory use before GGC: 2233k
    Peak memory use after GGC: 1940k
    Maximum of released memory in single GGC run: 293k
    Garbage: 429k -> 429k
    Leak: 2273k
    Overhead: 447k -> 447k
    GGC runs: 4

comparing empty function compilation at -O3 level:
    Overall memory needed: 18381k -> 18385k
    Peak memory use before GGC: 2233k
    Peak memory use after GGC: 1940k
    Maximum of released memory in single GGC run: 293k
    Garbage: 429k -> 429k
    Leak: 2273k
    Overhead: 447k -> 447k
    GGC runs: 4

comparing combine.c compilation at -O0 level:
  Peak amount of GGC memory allocated before garbage collecting increased from 9267k to 9285k, overall 0.19%
  Peak amount of GGC memory still allocated after garbage collectin increased from 8784k to 8800k, overall 0.18%
  Amount of produced GGC garbage increased from 37441k to 37513k, overall 0.19%
    Overall memory needed: 28397k -> 28429k
    Peak memory use before GGC: 9267k -> 9285k
    Peak memory use after GGC: 8784k -> 8800k
    Maximum of released memory in single GGC run: 2643k
    Garbage: 37441k -> 37513k
    Leak: 6450k -> 6447k
    Overhead: 4862k -> 4666k
    GGC runs: 280

comparing combine.c compilation at -O0 -g level:
  Peak amount of GGC memory allocated before garbage collecting increased from 10795k to 10811k, overall 0.15%
  Peak amount of GGC memory still allocated after garbage collectin increased from 10425k to 10440k, overall 0.14%
  Amount of produced GGC garbage increased from 38023k to 38085k, overall 0.16%
    Overall memory needed: 30477k -> 30513k
    Peak memory use before GGC: 10795k -> 10811k
    Peak memory use after GGC: 10425k -> 10440k
    Maximum of released memory in single GGC run: 2360k
    Garbage: 38023k -> 38085k
    Leak: 9260k -> 9257k
    Overhead: 5530k -> 5333k
    GGC runs: 272

comparing combine.c compilation at -O1 level:
  Ovarall memory allocated via mmap and sbrk decreased from 39825k to 29470k, overall -35.14%
  Peak amount of GGC memory allocated before garbage collecting increased from 16870k to 16958k, overall 0.52%
  Peak amount of GGC memory still allocated after garbage collectin increased from 16702k to 16787k, overall 0.51%
  Amount of produced GGC garbage decreased from 58326k to 55524k, overall -5.05%
    Overall memory needed: 39825k -> 29470k
    Peak memory use before GGC: 16870k -> 16958k
    Peak memory use after GGC: 16702k -> 16787k
    Maximum of released memory in single GGC run: 2259k -> 2255k
    Garbage: 58326k -> 55524k
    Leak: 6473k -> 6479k
    Overhead: 6290k -> 9642k
    GGC runs: 358 -> 363

comparing combine.c compilation at -O2 level:
  Peak amount of GGC memory allocated before garbage collecting increased from 16872k to 16956k, overall 0.50%
  Peak amount of GGC memory still allocated after garbage collectin increased from 16702k to 16787k, overall 0.51%
  Amount of produced GGC garbage decreased from 79634k to 71476k, overall -11.41%
  Amount of memory still referenced at the end of compilation increased from 6598k to 6610k, overall 0.19%
    Overall memory needed: 29386k -> 29470k
    Peak memory use before GGC: 16872k -> 16956k
    Peak memory use after GGC: 16702k -> 16787k
    Maximum of released memory in single GGC run: 4308k -> 2647k
    Garbage: 79634k -> 71476k
    Leak: 6598k -> 6610k
    Overhead: 8621k -> 11468k
    GGC runs: 416 -> 417

comparing combine.c compilation at -O3 level:
  Peak amount of GGC memory allocated before garbage collecting run decreased from 18754k to 18182k, overall -3.15%
  Amount of produced GGC garbage decreased from 116549k to 105939k, overall -10.02%
  Amount of memory still referenced at the end of compilation increased from 6668k to 6682k, overall 0.22%
    Overall memory needed: 29510k -> 29598k
    Peak memory use before GGC: 18754k -> 18182k
    Peak memory use after GGC: 17982k -> 17676k
    Maximum of released memory in single GGC run: 6490k -> 4116k
    Garbage: 116549k -> 105939k
    Leak: 6668k -> 6682k
    Overhead: 13281k -> 16395k
    GGC runs: 466 -> 471

comparing insn-attrtab.c compilation at -O0 level:
  Peak amount of GGC memory allocated before garbage collecting increased from 70078k to 71190k, overall 1.59%
  Peak amount of GGC memory still allocated after garbage collectin increased from 43585k to 44696k, overall 2.55%
  Amount of produced GGC garbage increased from 131129k to 131968k, overall 0.64%
  Amount of memory still referenced at the end of compilation increased from 9289k to 9513k, overall 2.41%
    Overall memory needed: 88530k -> 89646k
    Peak memory use before GGC: 70078k -> 71190k
    Peak memory use after GGC: 43585k -> 44696k
    Maximum of released memory in single GGC run: 37868k
    Garbage: 131129k -> 131968k
    Leak: 9289k -> 9513k
    Overhead: 16940k -> 15975k
    GGC runs: 216 -> 211

comparing insn-attrtab.c compilation at -O0 -g level:
  Peak amount of GGC memory allocated before garbage collecting increased from 71228k to 72339k, overall 1.56%
  Peak amount of GGC memory still allocated after garbage collectin increased from 44840k to 45952k, overall 2.48%
  Amount of produced GGC garbage increased from 132027k to 133122k, overall 0.83%
    Overall memory needed: 89714k -> 90830k
    Peak memory use before GGC: 71228k -> 72339k
    Peak memory use after GGC: 44840k -> 45952k
    Maximum of released memory in single GGC run: 37869k -> 37868k
    Garbage: 132027k -> 133122k
    Leak: 11184k -> 11184k
    Overhead: 17318k -> 16354k
    GGC runs: 213 -> 209

comparing insn-attrtab.c compilation at -O1 level:
  Ovarall memory allocated via mmap and sbrk decreased from 110266k to 94330k, overall -16.89%
  Peak amount of GGC memory allocated before garbage collecting run decreased from 85470k to 72446k, overall -17.98%
  Peak amount of GGC memory still allocated after garbage collecting decreased from 79437k to 70077k, overall -13.36%
  Amount of produced GGC garbage decreased from 271413k to 229261k, overall -18.39%
    Overall memory needed: 110266k -> 94330k
    Peak memory use before GGC: 85470k -> 72446k
    Peak memory use after GGC: 79437k -> 70077k
    Maximum of released memory in single GGC run: 31672k -> 31671k
    Garbage: 271413k -> 229261k
    Leak: 9336k -> 9340k
    Overhead: 28721k -> 28172k
    GGC runs: 223 -> 224

comparing insn-attrtab.c compilation at -O2 level:
  Overall memory allocated via mmap and sbrk increased from 117834k to 123310k, overall 4.65%
  Peak amount of GGC memory allocated before garbage collecting run decreased from 87632k to 78010k, overall -12.33%
  Peak amount of GGC memory still allocated after garbage collecting decreased from 80352k to 75480k, overall -6.45%
  Amount of produced GGC garbage decreased from 310281k to 282035k, overall -10.01%
    Overall memory needed: 117834k -> 123310k
    Peak memory use before GGC: 87632k -> 78010k
    Peak memory use after GGC: 80352k -> 75480k
    Maximum of released memory in single GGC run: 30216k -> 30215k
    Garbage: 310281k -> 282035k
    Leak: 9339k -> 9343k
    Overhead: 35201k -> 34348k
    GGC runs: 246 -> 248

comparing insn-attrtab.c compilation at -O3 level:
  Ovarall memory allocated via mmap and sbrk decreased from 132294k to 113698k, overall -16.36%
  Peak amount of GGC memory allocated before garbage collecting run decreased from 87658k to 78036k, overall -12.33%
  Peak amount of GGC memory still allocated after garbage collecting decreased from 80377k to 75505k, overall -6.45%
  Amount of produced GGC garbage decreased from 311122k to 282863k, overall -9.99%
    Overall memory needed: 132294k -> 113698k
    Peak memory use before GGC: 87658k -> 78036k
    Peak memory use after GGC: 80377k -> 75505k
    Maximum of released memory in single GGC run: 30409k
    Garbage: 311122k -> 282863k
    Leak: 9342k -> 9348k
    Overhead: 35427k -> 34576k
    GGC runs: 250 -> 252

comparing Gerald's testcase PR8361 compilation at -O0 level:
  Peak amount of GGC memory allocated before garbage collecting increased from 91699k to 92191k, overall 0.54%
  Peak amount of GGC memory still allocated after garbage collectin increased from 90791k to 91269k, overall 0.53%
  Amount of produced GGC garbage increased from 209462k to 209930k, overall 0.22%
  Amount of memory still referenced at the end of compilation increased from 47751k to 48078k, overall 0.68%
    Overall memory needed: 118582k -> 119062k
    Peak memory use before GGC: 91699k -> 92191k
    Peak memory use after GGC: 90791k -> 91269k
    Maximum of released memory in single GGC run: 19168k -> 19185k
    Garbage: 209462k -> 209930k
    Leak: 47751k -> 48078k
    Overhead: 20904k -> 20539k
    GGC runs: 413 -> 412

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
  Amount of produced GGC garbage increased from 216047k to 216527k, overall 0.22%
  Amount of memory still referenced at the end of compilation increased from 70710k to 70950k, overall 0.34%
    Overall memory needed: 131790k -> 131642k
    Peak memory use before GGC: 104519k -> 104385k
    Peak memory use after GGC: 103480k -> 103349k
    Maximum of released memory in single GGC run: 19647k -> 18862k
    Garbage: 216047k -> 216527k
    Leak: 70710k -> 70950k
    Overhead: 26521k -> 26156k
    GGC runs: 385 -> 384

comparing Gerald's testcase PR8361 compilation at -O1 level:
  Peak amount of GGC memory allocated before garbage collecting increased from 96182k to 96659k, overall 0.50%
  Peak amount of GGC memory still allocated after garbage collectin increased from 93928k to 94406k, overall 0.51%
  Amount of memory still referenced at the end of compilation increased from 49435k to 50143k, overall 1.43%
    Overall memory needed: 119578k -> 120098k
    Peak memory use before GGC: 96182k -> 96659k
    Peak memory use after GGC: 93928k -> 94406k
    Maximum of released memory in single GGC run: 17997k -> 18009k
    Garbage: 447346k -> 439924k
    Leak: 49435k -> 50143k
    Overhead: 32335k -> 101046k
    GGC runs: 565

comparing Gerald's testcase PR8361 compilation at -O2 level:
  Peak amount of GGC memory allocated before garbage collecting increased from 96209k to 96686k, overall 0.50%
  Peak amount of GGC memory still allocated after garbage collectin increased from 93956k to 94433k, overall 0.51%
  Amount of produced GGC garbage decreased from 565496k to 494683k, overall -14.31%
  Amount of memory still referenced at the end of compilation increased from 50350k to 51112k, overall 1.51%
    Overall memory needed: 119602k -> 120142k
    Peak memory use before GGC: 96209k -> 96686k
    Peak memory use after GGC: 93956k -> 94433k
    Maximum of released memory in single GGC run: 17997k -> 18009k
    Garbage: 565496k -> 494683k
    Leak: 50350k -> 51112k
    Overhead: 42152k -> 55999k
    GGC runs: 626 -> 619

comparing Gerald's testcase PR8361 compilation at -O3 level:
  Peak amount of GGC memory allocated before garbage collecting increased from 97180k to 97680k, overall 0.51%
  Peak amount of GGC memory still allocated after garbage collectin increased from 95588k to 96087k, overall 0.52%
  Amount of produced GGC garbage decreased from 587055k to 514724k, overall -14.05%
  Amount of memory still referenced at the end of compilation increased from 50305k to 51087k, overall 1.55%
    Overall memory needed: 121418k -> 121938k
    Peak memory use before GGC: 97180k -> 97680k
    Peak memory use after GGC: 95588k -> 96087k
    Maximum of released memory in single GGC run: 18403k
    Garbage: 587055k -> 514724k
    Leak: 50305k -> 51087k
    Overhead: 42978k -> 55482k
    GGC runs: 635 -> 626

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 137618k -> 137638k
    Peak memory use before GGC: 81563k -> 81585k
    Peak memory use after GGC: 58443k -> 58465k
    Maximum of released memory in single GGC run: 45145k -> 45166k
    Garbage: 148485k -> 148443k
    Leak: 7540k -> 7539k
    Overhead: 25305k -> 25101k
    GGC runs: 82

comparing PR rtl-optimization/28071 testcase compilation at -O0 -g level:
    Overall memory needed: 137990k -> 138182k
    Peak memory use before GGC: 82197k -> 82218k
    Peak memory use after GGC: 59077k -> 59098k
    Maximum of released memory in single GGC run: 45210k -> 45232k
    Garbage: 148688k -> 148662k
    Leak: 9247k -> 9247k
    Overhead: 25770k -> 25566k
    GGC runs: 88

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
  Overall memory allocated via mmap and sbrk increased from 408354k to 423542k, overall 3.72%
  Peak amount of GGC memory allocated before garbage collecting increased from 194178k to 202462k, overall 4.27%
  Peak amount of GGC memory still allocated after garbage collectin increased from 187997k to 196531k, overall 4.54%
    Overall memory needed: 408354k -> 423542k
    Peak memory use before GGC: 194178k -> 202462k
    Peak memory use after GGC: 187997k -> 196531k
    Maximum of released memory in single GGC run: 94123k -> 94103k
    Garbage: 283657k -> 281969k
    Leak: 29776k -> 29776k
    Overhead: 29619k -> 29673k
    GGC runs: 98 -> 99

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
  Overall memory allocated via mmap and sbrk increased from 330166k to 353098k, overall 6.95%
  Peak amount of GGC memory allocated before garbage collecting increased from 194171k to 202459k, overall 4.27%
  Peak amount of GGC memory still allocated after garbage collectin increased from 187990k to 196528k, overall 4.54%
    Overall memory needed: 330166k -> 353098k
    Peak memory use before GGC: 194171k -> 202459k
    Peak memory use after GGC: 187990k -> 196528k
    Maximum of released memory in single GGC run: 96138k -> 96113k
    Garbage: 363897k -> 362205k
    Leak: 30359k -> 30359k
    Overhead: 45368k -> 45422k
    GGC runs: 105 -> 106

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
  Peak amount of GGC memory allocated before garbage collecting increased from 310802k to 321489k, overall 3.44%
  Peak amount of GGC memory still allocated after garbage collectin increased from 289146k to 299831k, overall 3.70%
    Overall memory needed: 778354k -> 769610k
    Peak memory use before GGC: 310802k -> 321489k
    Peak memory use after GGC: 289146k -> 299831k
    Maximum of released memory in single GGC run: 166516k -> 166488k
    Garbage: 501676k -> 498586k
    Leak: 45411k -> 45411k
    Overhead: 57008k -> 55694k
    GGC runs: 98

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog	2006-12-11 19:56:44.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2006-12-12 11:12:21.000000000 +0000
@@ -1,3 +1,497 @@
+2006-12-12  Olivier Hainque  <hainque@adacore.com>
+
+	* config/rs6000/t-vxworks: Remove assignment to LIB2FUNCS_EXTRA.
+
+2006-12-12  Olivier Hainque  <hainque@adacore.com>
+
+	* config/vxlib.c: Extract tls related routines into ...
+	* config/vxlib-tls.c: New file. 
+	* config/t-vxworks: Add vxlib-tls.c to LIB2FUNCS_EXTRA.
+	
+2006-12-12  Sa Liu  <saliu@de.ibm.com>
+	    Ben Elliston  <bje@au.ibm.com>
+
+	* config/spu/spu.opt (mfixed-range): New option.
+	* config/spu/spu.h (spu_fixed_range_string): Declare.
+	* config/spu/spu.c (spu_override_options): Handle -mfixed-range.
+	(fix_range): New function.
+	* doc/invoke.texi (SPU Options): Document -mfixed-range.
+	* testsuite/gcc.target/spu/fixed-range.c: New.
+	* testsuite/gcc.target/spu/fixed-range-bad.c: Ditto.
+
+2006-12-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR middle-end/17982
+	PR middle-end/20218
+	* cgraphunit.c (cgraph_optimize): Remove call to
+	process_pending_assemble_externals.
+
+	* config/elfos.h (ASM_OUTPUT_EXTERNAL): New.
+
+	* config/ia64/hpux.h (TARGET_ASM_FILE_END): Removed.
+
+	* config/ia64/ia64.c (ia64_asm_output_external): Rewritten.
+	(ia64_hpux_add_extern_decl): Removed.
+	(ia64_hpux_file_end): Likewise.
+	(extern_func_list): Likewise.
+	(extern_func_head): Likewise.
+
+	* output.h (assemble_external): Update comments.
+	(default_elf_asm_output_external): New.
+	(maybe_assemble_visibility): New.
+
+	* toplev.c (compile_file): Update comment.
+
+	* varasm.c (assemble_external): Always put it on
+	pending_assemble_externals.
+	(maybe_assemble_visibility): Make it extern and return int.
+	(default_elf_asm_output_external): New.
+
+2006-12-11  Daniel Berlin  <dberlin@dberlin.org>
+
+	* tree-ssa-structalias.c (handle_ptr_arith): Return false when we
+	can't handle the pointer arithmetic.
+
+2006-12-11  Diego Novillo  <dnovillo@redhat.com>
+
+	* doc/tree-ssa.texi: Update documentation for virtual operands
+	and the use of push_stmt_changes/pop_stmt_changes.
+	* doc/invoke.texi: Remove documentation for params
+	global-var-threshold.
+	Update documentation on max-aliased-vops.
+
+	* tree-into-ssa.c: Cleanup comments, variables and
+	spacing in various functions.
+	(regs_to_rename): Declare.
+	(mem_syms_to_rename): Declare.
+	(dump_update_ssa): Declare.
+	(debug_update_ssa): Declare.
+	(dump_names_replaced_by): Declare.
+	(debug_names_replaced_by): Declare.
+	(dump_def_blocks): Declare.
+	(debug_def_blocks): Declare.
+	(dump_defs_stack): Declare.
+	(debug_defs_stack): Declare.
+	(dump_currdefs): Declare.
+	(debug_currdefs): Declare.
+	(mark_def_sites): Do not handle virtual operands.
+	(compute_idf): Rename from find_idf.  Update users.
+	(register_new_def): Make local.  Convert second argument
+	to 'tree'.
+	Use BLOCK_DEFS_STACK directly.
+	If pushing a non-register, also push the underlying
+	symbol.
+	(rewrite_stmt): Do not handle virtual operands.
+	(dump_tree_ssa): Call dump_def_blocks, dump_defs_stack,
+	dump_currdefs and dump_tree_ssa_stats.
+	(dump_tree_ssa_stats): Also dump REPL_TBL.
+	(replace_use): Remove.  Update all users to call SET_USE
+	instead.
+	(rewrite_blocks): Move code to free memory to
+	fini_ssa_renamer.
+	(mark_def_site_blocks): Move initialization code to
+	init_ssa_renamer.
+	(init_ssa_renamer): New.
+	(fini_ssa_renamer): New.
+	(rewrite_into_ssa): Call them.
+	(prepare_block_for_update): Process SSA_OP_ALL_USES first
+	and SSA_OP_ALL_DEFS later.  Do not process virtual
+	operands separately.
+	(dump_update_ssa): Call dump_decl_set.
+	(init_update_ssa): Initialize regs_to_rename and
+	mem_syms_to_rename.
+	Call init_ssa_renamer.
+	(delete_update_ssa): Call fini_ssa_renamer.
+	Free blocks_with_phis_to_rewrite.
+	(mark_sym_for_renaming): If the variable has
+	sub-variables, also mark them.
+	If the variable belongs to a partition, also mark it.
+	(mark_set_for_renaming): Call mark_sym_for_renaming on
+	every symbol in the set.
+	(switch_virtuals_to_full_rewrite): Call
+	mark_set_for_renaming.
+	(update_ssa): Separate syms_to_rename into regs_to_rename
+	and mem_syms_to_rename.
+
+	* tree-dump.c (dump_options): Add TDF_MEMSYMS.
+	* tree-pretty-print.c (debug_generic_expr): Add TDF_MEMSYMS.
+	(debug_generic_stmt): Likewise.
+	(debug_tree_chain): Likewise.
+	(dump_symbols): New.
+	(dump_generic_node): Check for TDF_MEMSYMS.
+	Handle MEMORY_PARTITION_TAG.
+	If the statement references memory and TDF_MEMSYMS is
+	given, call dump_symbols.
+	Indicate default names with (D).
+	(dump_vops): Update for new virtual operator format.
+
+	* tree.c (init_ttree): Add MEMORY_PARTITION_TAG to
+	tree_contains_struct.
+	(tree_code_size): Handle MEMORY_PARTITION_TAG.
+	(tree_node_structure): Likewise.
+	(needs_to_live_in_memory): Handle SSA names.
+	* tree.h (MTAG_P): Likewise.
+	(struct tree_memory_partition_tag): Declare.
+	(MPT_SYMBOLS): Define.
+	(union tree_node): Add field 'mpt'.
+	* treestruct.def (TS_MEMORY_PARTITION_TAG): Define.
+	* tree.def (MEMORY_PARTITION_TAG): Define.
+
+	* tree-pass.h (TDF_MEMSYMS): Define.
+
+	* params.h (GLOBAL_VAR_THRESHOLD): Remove.
+
+	* tree-ssa-alias.c: Include pointer-set.h
+	(struct alias_map_d): Remove fields total_alias_vops,
+	grouped_p and may_aliases.  Update all users.
+	(struct mp_info_def): Declare.
+	(mp_info_t): New type.
+	(get_smt_for): Rename from get_tmt_for.  Update all
+	users.
+	(add_may_alias): Add argument ALREADY_ADDED.  If given,
+	use it to avoid adding duplicate entries to alias sets.
+	(replace_may_alias): Remove.  Update all users.
+	(total_alias_vops_cmp): Remove.  Update all users.
+	(group_aliases_into): Remove.  Update all users.
+	(tree_pointer_compare): Remove.  Update all users.
+	(compact_name_tags): Remove.  Update all users.
+	(group_aliases): Remove.  Update all users.
+	(mark_non_addressable): Move from tree-flow-inline.h.
+	Remove the symbol from the partition holding it, if
+	needed.
+	(dump_mp_info): New.
+	(debug_mp_info): New.
+	(sort_mp_info): New.
+	(create_partition_for): New.
+	(rewrite_alias_set_for): New.
+	(compute_memory_partitions): New.
+	(compute_may_aliases): Call it.
+	(init_alias_info): If computing aliases for the first
+	time, mark every memory symbol for renaming.
+	(have_common_aliases_p): New.
+	(compute_flow_insensitive_aliasing): Call it.
+	(setup_pointers_and_addressables): Do not cache
+	num_referenced_vars.
+	For register promoted symbols, mark their former
+	partition for renaming.
+	(maybe_create_global_var): Only create .GLOBAL_VAR if
+	there are no call-clobbered variables and a mix of pure
+	and non-pure functions were found.
+	(may_alias_p): Tidy comments.
+	(create_tag_raw): Remove unused variable new_type.
+	(dump_alias_info): call dump_memory_partitions.
+	(dump_points_to_info_for): Call dump_decl_set.
+	(may_be_aliased): Tidy comments and formatting.
+
+	* timevar.def (TV_MEMORY_PARTITIONING): Define.
+	* tree-vectorizer.c (vect_memsyms_to_rename): Rename from
+	vect_vnames_to_rename.  Set DECL_UIDs instead of SSA name
+	versions in it.
+	(slpeel_update_phi_nodes_for_guard1): Ignore memory PHIs.
+	* tree-vect-transform.c (vect_transform_loop): Call
+	mark_set_for_renaming with vect_memsyms_to_rename.
+	* tree-flow-inline.h (zero_imm_uses_p): New.
+	(memory_partition): New.
+	(set_memory_partition): New.
+	(factoring_name_p): New.
+	(symbol_mem_tag): New.  Update every function that used
+	to access the annotation directly.
+	(set_symbol_mem_tag): Likewise.
+
+	* tree-ssa-copy.c (may_propagate_copy): Allow copies
+	between a partition and a symbol as long as the symbol
+	belongs to the partition.
+	(merge_alias_info): Ignore merge requests when memory
+	partitions are involved.
+
+	* tree-ssa.c (verify_ssa_name): Check that default
+	definitions have empty defining statements.
+	(verify_use): Remove argument IS_VIRTUAL.
+	Don't call verify_ssa_name.
+	(verify_phi_args): Call verify_ssa_name.
+	(verify_flow_insensitive_alias_info): Handle MPTs.
+	(verify_flow_sensitive_alias_info): Likewise.
+	(verify_name_tags): Likewise.
+	(verify_call_clobbering): Likewise.
+	(verify_ssa): Check for VOPs only after aliasing
+	information is available.
+	Check virtuals and real operands separately.
+	Call verify_ssa_name on every operand.
+	(stmt_references_memory_p): Move to tree-ssa-operands.c.
+	(walk_use_def_chains_1): Guard against NULL PHI
+	arguments.
+
+	* tree-ssa-operands.c (stmt_references_memory_p): Move from
+	tree-ssa.c.
+	(get_mpt_for): New.
+	(dump_memory_partitions): New.
+	(debug_memory_partitions): New.
+
+	* tree-flow.h (struct var_ann_d): Add field mpt.
+	(struct stmt_ann_d): Add bitfield references_memory.
+	* Makefile.in (tree-ssa-structalias.o): Include
+	pointer-set.h
+	(tree-ssa-alias.o): Likewise.
+	* tree-ssa-structalias.c: (update_alias_info): Use
+	STORED_SYMS to determine which variables are being
+	written to by the store operation.
+	* tree-ssa-structalias.h (struct alias_info)
+	<total_alias_vops>: Remove.  Update all users.
+	<written_vars>: Change to a pointer set.  Update all
+	users.
+	<dereferenced_ptrs_store>: Likewise.
+	<dereferenced_ptrs_load>: Likewise.
+	(NUM_REFERENCES): Remove.  Update all users.
+	(NUM_REFERENCES_CLEAR): Remove.  Update all users.
+	(NUM_REFERENCES_INC): Remove.  Update all users.
+	(NUM_REFERENCES_SET): Remove.  Update all users.
+
+	* params.def (PARAM_GLOBAL_VAR_THRESHOLD): Remove.
+	Update all users.
+	(PARAM_MAX_ALIASED_VOPS): Set to 10.
+	* tree-ssanames.c (make_ssa_name): Initialize
+	SSA_NAME_IS_DEFAULT_DEF to 0.
+
+2006-12-11  Aldy Hernandez  <aldyh@redhat.com>
+
+	* tree-ssa-dse.c (aggregate_vardecl_d): New.
+	(dse_global_data): Add aggregate_vardecl field.
+	(dse_possible_dead_store_p): New.
+	Add prev_defvar variable.
+	Allow immediate uses and previous immediate uses to differ
+	if they are setting different parts of the whole.
+	(get_aggregate_vardecl): New.
+	(dse_record_partial_aggregate_store): New.
+	(dse_whole_aggregate_clobbered_p): New.
+	(dse_partial_kill_p): New.
+	(dse_optimize_stmt): Abstract code checking a possible dead store
+	into new function dse_possible_dead_store_p().
+	Call dse_maybe_record_aggregate_store().
+	When checking whether a STMT and its USE_STMT refer to the
+	same memory address, check also for partial kills that clobber
+	the whole.
+	Move some variable definitions to the block where they are used.
+	(aggregate_vardecl_hash): New.
+	(aggregate_vardecl_eq): New.
+	(aggregate_vardecl_free): New.
+	(aggregate_whole_store_p): New.
+	(tree_ssa_dse): Initialize and free aggregate_vardecl.
+	Mark which aggregate stores we care about.
+
+2006-12-11  Andrew Macleod  <amacleod@redhat.com>
+
+	* tree-ssa-operands.h (struct vuse_element_d): Declare.
+	(vuse_element_t): Declare.
+	(struct vuse_vec_d): Declare.
+	(vuse_vec_p): Declare.
+	(VUSE_VECT_NUM_ELEM): Define.
+	(VUSE_VECT_ELEMENT_NC): Define.
+	(VUSE_ELEMENT_PTR_NC): Define.
+	(VUSE_ELEMENT_VAR_NC): Define.
+	(VUSE_VECT_ELEMENT): Define.
+	(VUSE_ELEMENT_PTR): Define.
+	(VUSE_ELEMENT_VAR): Define.
+	(struct maydef_optype_d) <use_var>: Remove.
+	<use_ptr>: Remove.
+	<usev>: Add.
+	(struct vuse_optype_d) <kill_var>: Remove.
+	<use_ptr>: Remove.
+	<usev>: Add.
+	(struct mustdef_optype_d) <kill_var>: Remove.
+	<use_ptr>: Remove.
+	<usev>: Add.
+	(VUSE_OP_PTR): Add argument.  Use VUSE_ELEMENT_PTR.
+	(VUSE_OP): Add argument.  Use VUSE_ELEMENT_PTR.
+	(VUSE_NUM): Define.
+	(VUSE_VECT): Define.
+	(MAYDEF_OP_PTR): Add argument.  Use VUSE_OP_PTR.
+	(MAYDEF_OP): Add argument.  Use VUSE_OP.
+	(MAYDEF_NUM): Define.
+	(MAYDEF_VECT): Define.
+	(MUSTDEF_KILL_PTR): Use VUSE_OP_PTR.
+	(MUSTDEF_KILL): Use VUSE_OP.
+	(MUSTDEF_NUM): Define.
+	(MUSTDEF_VECT): Define.
+	(realloc_maydef): Declare.
+	(realloc_vuse): Declare.
+	(struct ssa_operand_iterator_d) <vuse_index>: Add.
+	<mayuse_index>: Add.
+	(LOADED_SYMS): Define.
+	(STORED_SYMS): Define.
+	(FOR_EACH_SSA_MUSTDEF_OPERAND): Call op_iter_next_mustdef.
+	* tree-into-ssa.c: Adapt for multi-operand V_MAY_DEF and VUSE
+	operators.
+	* tree-pretty-print.c: Likewise.
+	* tree-ssa-dse.c: Likewise.
+	* tree-flow-inline.h: Likewise.
+	(op_iter_next_mustdef): New.
+	* tree-ssa-operands.c: Likewise.
+	(ALLOC_OPTYPE): Remove.
+	Update all users.
+	(alloc_def): New.
+	(alloc_use): New.
+	(alloc_maydef): New.
+	(alloc_vuse): New.
+	(alloc_mustdef): New.
+	(realloc_maydef): New.
+	(realloc_vuse): New.
+
+2006-12-11  Aldy Hernandez  <aldyh@redhat.com>
+
+	* tree-ssa-operands.c: Remove build_v_must_defs.
+	(init_ssa_operands): Delete build_v_must_defs.
+	(finalize_ssa_v_must_def_ops): Remove.
+	(finalize_ssa_v_must_defs): Remove.
+	(finalize_ssa_stmt_operands): Do not call
+	finalize_ssa_v_must_defs.
+	(start_ssa_stmt_operands): Do not check build_v_must_defs.
+	(append_v_must_def): Delete.
+	(copy_virtual_operands): Do not copy V_MUST_DEFs.
+	(get_modify_expr_operands): Remove reference to V_MUST_DEF from
+	comment.  Remove opf_kill_def.
+	(build_ssa_operands): Remove references to v_must_defs.
+	(copy_virtual_operands): Same.
+	(copy_virtual_operands): Same.
+	(fini_ssa_operands): Same.
+	(free_ssa_operands): Same.
+	(add_mustdef_op): Remove.
+	Remove mustdef_optype_p.
+	(alloc_mustdef): Remove.
+	Remove references to V_MUST_DEFs in comment at top of file.
+	(get_expr_operands): Remove opf_kill_def.
+	(opf_kill_def): Remove.
+	(add_virtual_operand): Remove opf_kill_def.
+	(get_indirect_ref_operands): Same.
+	(get_tmr_operands): Same.
+
+	* tree-vectorizer.c (rename_variables_in_bb): Remove
+	SSA_OP_ALL_KILLS.
+
+	* tree-ssa-loop-manip.c (find_uses_to_rename_stmt): Remove
+	SSA_OP_ALL_KILLS.
+	(check_loop_closed_ssa_stmt): Same.
+
+	* tree-ssa.c (verify_def): Remove V_MUST_DEF from comment.
+	(verify_use): Same.
+	(verify_ssa): Remove V_MUST_DEFs traces.
+	(verify_ssa): Remove SSA_OP_ALL_KILLS.
+
+	* tree-into-ssa.c (mark_def_sites): Change SSA_OP_VMUSTDEF to
+	SSA_OP_VMAYDEF.
+	(rewrite_update_stmt): Remove SSA_OP_VIRTUAL_KILLS.
+	(rewrite_stmt): Remove SSA_OP_ALL_KILLS.
+
+	* tree-ssa-operands.h (struct stmt_operands_d): Remove V_MUST_DEF
+	references.
+	(MUSTDEF_OPS): Remove.
+	(SSA_OP_VMUSTDEF): Remove.
+	(FOR_EACH_SSA_MUSTDEF_OPERAND): Remove.
+	(struct mustdef_optype_d): Remove.
+	Remove mustdef_optype_p.
+	(struct stmt_operands_d): Remove mustdef_ops.
+	(ssa_operand_iterator_d): Remove mustdefs and mustkills.
+	(SSA_OP_VIRTUAL_DEFS): Remove SSA_OP_VMUSTDEF.
+	(MUSTDEF_RESULT_PTR): Remove.
+	(MUSTDEF_RESULT): Remove.
+	(MUSTDEF_KILL_PTR): Remove.
+	(MUSTDEF_KILL): Remove.
+	(MUSTDEF_NUM): Remove.
+	(MUSTDEF_VECT): Remove.
+	(SSA_OP_VIRTUAL_KILLS): Remove.
+	(SSA_OP_ALL_VIRTUALS): Remove SSA_OP_VIRTUAL_KILLS.
+	(SSA_OP_VMUSTKILL): Remove.
+	(SSA_OP_ALL_KILLS): Remove.
+	(SSA_OP_ALL_OPERANDS): Remove SSA_OP_ALL_KILLS.
+
+	* tree-flow-inline.h (op_iter_init_def): Remove
+	SSA_OP_VIRTUAL_KILLS.
+	(delink_stmt_imm_use): Remove SSA_OP_ALL_KILLS.
+
+	* tree-ssa-pre.c (compute_rvuse_and_antic_safe): Remove
+	SSA_OP_VIRTUAL_KILLS.
+
+	* tree-ssa-loop-im.c (determine_max_movement): Remove
+	SSA_OP_VIRTUAL_KILLS.
+	(gather_mem_refs_stmt): Same.
+	(gather_mem_refs_stmt): Same.
+
+	* tree-ssa-dce.c (mark_really_necessary_kill_operand_phis): Delete.
+	(perform_tree_ssa_dce): Remove call to
+	mark_really_necessary_kill_operand_phis.
+
+	* tree-flow-inline.h (op_iter_init): Remove setting of mustdefs
+	and mustkills.
+	(op_iter_next_use): Do not check mustkills.
+	(op_iter_next_def): Do not check mustdefs.
+	(op_iter_next_tree): Do not check mustkills or mustdefs.
+	(clear_and_done_ssa_iter): Do not set mustdefs or mustkills.
+	(op_iter_next_maymustdef): Do not check mustkills.
+	(op_iter_init_must_and_may_def): Remove SSA_OP_VMUSTKILL.
+	(op_iter_init_mustdef): Remove.
+
+	* tree-ssa-live.c (create_ssa_var_map): Change SSA_OP_VMUSTDEF to
+	SSA_OP_VMAYDEF.
+
+	* tree-ssa-dse.c (dse_optimize_stmt): Remove SSA_OP_VMUSTDEF.
+
+	* tree-ssa-ccp.c: Remove V_MUST_DEF traces from comments.
+	(visit_assignment): Same.
+
+	* tree-ssa-copy.c (copy_prop_visit_assignment): Same.
+
+	* tree-sra.c (mark_all_v_defs_1): Remove V_MUST_DEF from comment.
+
+	* tree-outof-ssa.c (check_replaceable): Remove SSA_OP_VMUSTDEF.
+
+	* tree-pretty-print.c (dump_vops): Remove printing of V_MUST_DEF.
+	Remove kill_p variable.
+
+	* tree-dfa.c (struct dfa_stats_d): Remove num_v_must_defs.
+	(dump_dfa_stats): Remove code related to V_MUST_DEFs.
+	(collect_dfa_stats_r): Do not set num_v_must_defs.
+	(mark_new_vars_to_rename): Remove v_must_defs_{before,after}
+	code.
+
+	* tree-into-ssa.c (mark_def_sites): Change SSA_OP_VMUSTKILL to
+	SSA_OP_VMAYUSE.
+
+	* tree-ssa-pre.c (compute_rvuse_and_antic_safe): Remove
+	SSA_OP_VMUSTDEF and SSA_OP_VMUSTKILL.
+
+	* tree-ssa-propagate.c (stmt_makes_single_store): Remove
+	SSA_OP_VMUSTDEF.
+
+2006-12-11  Zdenek Dvorak <dvorakz@suse.cz>
+
+	PR rtl-optimization/30113
+	* loop-iv.c (implies_p): Require the mode of the operands to be
+	scalar.
+
+2006-12-11  Diego Novillo  <dnovillo@redhat.com>
+
+	* tree-ssa-operands.h (create_ssa_artificial_load_stmt):
+	Rename from create_ssa_artficial_load_stmt.  Update all users.
+	* tree-into-ssa.c (register_new_def): Make static.
+	* tree.c (is_global_var): Handle SSA_NAMEs.
+	* tree.h (SSA_NAME_IS_DEFAULT_DEF): Define.  Update all users
+	that used to call gimple_default_def.
+	* tree-ssa-operands.c (push_stmt_changes): New.
+	(pop_stmt_changes): New.  Update every pass that modifies
+	statements to bracket modifications with
+	push_stmt_changes/pop_stmt_changes.
+	(discard_stmt_changes): New.
+	* tree-ssa-dom.c (stmts_to_rescan): Change to stack of
+	'tree *' instead of 'tree'.  Update all users.
+	* tree-flow-inline.h (zero_imm_uses_p): New.
+	(symbol_mem_tag): New.  Update every function that used
+	to access the annotation directly.
+	(set_symbol_mem_tag): Likewise.
+	* tree-dfa.c (dump_variable): Always show the escape mask.
+	(mark_symbols_for_renaming): Rename from
+	mark_new_vars_to_rename.  Update all users.
+	Only mark to rename naked symbols in real and virtual
+	operands.
+
 2006-12-11  Andreas Schwab  <schwab@suse.de>
 
 	* varasm.c (elf_record_gcc_switches): Cast second argument of
--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog.cp	2006-12-11 19:56:43.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/cp/ChangeLog	2006-12-12 11:12:04.000000000 +0000
@@ -1,3 +1,8 @@
+2006-12-12  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+	* decl.c (build_enumerator): Update error message to match C
+	front-end.
+	
 2006-12-11  Jan Hubicka  <jh@suse.cz>
 
 	* decl2.c (var_finalized_p): Update for renamed varpool functions.


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