A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Fri May 2 16:27: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: 1103k
    Peak memory use after GGC: 999k
    Maximum of released memory in single GGC run: 129k
    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: 8167k
    Peak memory use before GGC: 1131k
    Peak memory use after GGC: 1033k
    Maximum of released memory in single GGC run: 128k
    Garbage: 242k
    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: 8203k
    Peak memory use before GGC: 1103k
    Peak memory use after GGC: 999k
    Maximum of released memory in single GGC run: 131k
    Garbage: 241k
    Leak: 957k
    Overhead: 81k
    GGC runs: 2
    Pre-IPA-Garbage: 229k
    Pre-IPA-Leak: 959k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 229k
    Post-IPA-Leak: 959k
    Post-IPA-Overhead: 79k

comparing empty function compilation at -O2 level:
    Overall memory needed: 8223k
    Peak memory use before GGC: 1104k
    Peak memory use after GGC: 999k
    Maximum of released memory in single GGC run: 134k
    Garbage: 245k
    Leak: 958k
    Overhead: 82k
    GGC runs: 2
    Pre-IPA-Garbage: 229k
    Pre-IPA-Leak: 960k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 229k
    Post-IPA-Leak: 960k
    Post-IPA-Overhead: 79k

comparing empty function compilation at -O3 level:
    Overall memory needed: 8223k
    Peak memory use before GGC: 1104k
    Peak memory use after GGC: 999k
    Maximum of released memory in single GGC run: 134k
    Garbage: 245k
    Leak: 958k
    Overhead: 82k
    GGC runs: 2
    Pre-IPA-Garbage: 229k
    Pre-IPA-Leak: 960k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 229k
    Post-IPA-Leak: 960k
    Post-IPA-Overhead: 79k

comparing combine.c compilation at -O0 level:
    Overall memory needed: 22611k
    Peak memory use before GGC: 7771k
    Peak memory use after GGC: 7148k
    Maximum of released memory in single GGC run: 1545k
    Garbage: 37781k
    Leak: 5479k
    Overhead: 4618k
    GGC runs: 371
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O0 -g level:
    Overall memory needed: 24699k
    Peak memory use before GGC: 9706k
    Peak memory use after GGC: 9044k
    Maximum of released memory in single GGC run: 1831k
    Garbage: 38152k
    Leak: 8673k
    Overhead: 5414k
    GGC runs: 341
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O1 level:
  Amount of memory still referenced at the end of compilation increased from 5614k to 5647k, overall 0.58%
    Overall memory needed: 32831k
    Peak memory use before GGC: 16259k
    Peak memory use after GGC: 16096k
    Maximum of released memory in single GGC run: 1378k -> 1375k
    Garbage: 51489k -> 51457k
    Leak: 5614k -> 5647k
    Overhead: 5809k
    GGC runs: 441
    Pre-IPA-Garbage: 13899k
    Pre-IPA-Leak: 17090k
    Pre-IPA-Overhead: 2132k
    Post-IPA-Garbage: 13899k
    Post-IPA-Leak: 17090k
    Post-IPA-Overhead: 2132k

comparing combine.c compilation at -O2 level:
  Amount of memory still referenced at the end of compilation increased from 5943k to 5975k, overall 0.55%
    Overall memory needed: 34603k
    Peak memory use before GGC: 16359k
    Peak memory use after GGC: 16189k
    Maximum of released memory in single GGC run: 1307k -> 1304k
    Garbage: 71685k -> 71655k
    Leak: 5943k -> 5975k
    Overhead: 8157k -> 8158k
    GGC runs: 510
    Pre-IPA-Garbage: 14051k
    Pre-IPA-Leak: 17154k
    Pre-IPA-Overhead: 2147k
    Post-IPA-Garbage: 14051k
    Post-IPA-Leak: 17154k
    Post-IPA-Overhead: 2147k

comparing combine.c compilation at -O3 level:
  Amount of memory still referenced at the end of compilation increased from 6004k to 6034k, overall 0.50%
    Overall memory needed: 38767k
    Peak memory use before GGC: 16440k
    Peak memory use after GGC: 16204k
    Maximum of released memory in single GGC run: 2440k
    Garbage: 91515k -> 91485k
    Leak: 6004k -> 6034k
    Overhead: 10695k
    GGC runs: 546
    Pre-IPA-Garbage: 14053k
    Pre-IPA-Leak: 17165k
    Pre-IPA-Overhead: 2148k
    Post-IPA-Garbage: 14053k
    Post-IPA-Leak: 17165k
    Post-IPA-Overhead: 2148k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 137431k
    Peak memory use before GGC: 56956k
    Peak memory use after GGC: 31382k
    Maximum of released memory in single GGC run: 33223k
    Garbage: 128386k
    Leak: 8354k
    Overhead: 14292k
    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: 138719k
    Peak memory use before GGC: 58158k
    Peak memory use after GGC: 32583k
    Maximum of released memory in single GGC run: 33224k
    Garbage: 128900k
    Leak: 9932k
    Overhead: 14732k
    GGC runs: 289
Testing has produced no results
Testing has produced no results

comparing insn-attrtab.c compilation at -O1 level:
  Amount of memory still referenced at the end of compilation increased from 9249k to 9259k, overall 0.11%
    Overall memory needed: 142879k
    Peak memory use before GGC: 56178k -> 56181k
    Peak memory use after GGC: 49957k -> 49960k
    Maximum of released memory in single GGC run: 23959k
    Garbage: 205099k -> 205088k
    Leak: 9249k -> 9259k
    Overhead: 24744k
    GGC runs: 316
    Pre-IPA-Garbage: 50366k
    Pre-IPA-Leak: 49651k
    Pre-IPA-Overhead: 7555k
    Post-IPA-Garbage: 50366k
    Post-IPA-Leak: 49651k
    Post-IPA-Overhead: 7555k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 184091k -> 184087k
    Peak memory use before GGC: 56787k -> 56790k
    Peak memory use after GGC: 51558k -> 51560k
    Maximum of released memory in single GGC run: 22852k -> 22853k
    Garbage: 246601k -> 246591k
    Leak: 10327k -> 10337k
    Overhead: 30638k
    GGC runs: 346
    Pre-IPA-Garbage: 50438k
    Pre-IPA-Leak: 49654k
    Pre-IPA-Overhead: 7563k
    Post-IPA-Garbage: 50438k
    Post-IPA-Leak: 49654k
    Post-IPA-Overhead: 7563k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 191323k
    Peak memory use before GGC: 69203k -> 69206k
    Peak memory use after GGC: 65011k -> 65014k
    Maximum of released memory in single GGC run: 24862k
    Garbage: 273819k -> 273809k
    Leak: 10361k -> 10371k
    Overhead: 32554k
    GGC runs: 345
    Pre-IPA-Garbage: 50438k
    Pre-IPA-Leak: 49654k
    Pre-IPA-Overhead: 7563k
    Post-IPA-Garbage: 50438k
    Post-IPA-Leak: 49654k
    Post-IPA-Overhead: 7563k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 144044k -> 144076k
    Peak memory use before GGC: 80332k
    Peak memory use after GGC: 79536k
    Maximum of released memory in single GGC run: 14817k
    Garbage: 197305k -> 197295k
    Leak: 47159k -> 47169k
    Overhead: 24144k
    GGC runs: 418
    Pre-IPA-Garbage: 107934k
    Pre-IPA-Leak: 69091k
    Pre-IPA-Overhead: 12082k
    Post-IPA-Garbage: 107934k
    Post-IPA-Leak: 69091k
    Post-IPA-Overhead: 12082k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 166168k
    Peak memory use before GGC: 92915k
    Peak memory use after GGC: 91995k
    Maximum of released memory in single GGC run: 15518k
    Garbage: 202955k -> 202945k
    Leak: 71548k -> 71558k
    Overhead: 30503k
    GGC runs: 388
    Pre-IPA-Garbage: 108577k
    Pre-IPA-Leak: 83824k
    Pre-IPA-Overhead: 15386k
    Post-IPA-Garbage: 108577k
    Post-IPA-Leak: 83824k
    Post-IPA-Overhead: 15386k

comparing Gerald's testcase PR8361 compilation at -O1 level:
    Overall memory needed: 119135k -> 119139k
    Peak memory use before GGC: 79872k
    Peak memory use after GGC: 79079k
    Maximum of released memory in single GGC run: 14455k
    Garbage: 287583k -> 287572k
    Leak: 46293k -> 46303k
    Overhead: 29818k -> 29818k
    GGC runs: 517
    Pre-IPA-Garbage: 151102k
    Pre-IPA-Leak: 83607k
    Pre-IPA-Overhead: 17520k
    Post-IPA-Garbage: 151102k
    Post-IPA-Leak: 83607k
    Post-IPA-Overhead: 17520k

comparing Gerald's testcase PR8361 compilation at -O2 level:
    Overall memory needed: 121275k
    Peak memory use before GGC: 79798k
    Peak memory use after GGC: 78977k
    Maximum of released memory in single GGC run: 14457k
    Garbage: 356329k -> 356318k
    Leak: 47697k -> 47707k
    Overhead: 37070k -> 37070k
    GGC runs: 596
    Pre-IPA-Garbage: 152722k
    Pre-IPA-Leak: 83471k
    Pre-IPA-Overhead: 17688k
    Post-IPA-Garbage: 152722k
    Post-IPA-Leak: 83471k
    Post-IPA-Overhead: 17688k

comparing Gerald's testcase PR8361 compilation at -O3 level:
    Overall memory needed: 124379k
    Peak memory use before GGC: 81053k
    Peak memory use after GGC: 80233k
    Maximum of released memory in single GGC run: 14780k
    Garbage: 383317k -> 383307k
    Leak: 48121k -> 48131k
    Overhead: 39408k -> 39408k
    GGC runs: 618
    Pre-IPA-Garbage: 155353k
    Pre-IPA-Leak: 83756k
    Pre-IPA-Overhead: 17939k
    Post-IPA-Garbage: 155353k
    Post-IPA-Leak: 83756k
    Post-IPA-Overhead: 17939k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 380348k
    Peak memory use before GGC: 100956k
    Peak memory use after GGC: 56609k
    Maximum of released memory in single GGC run: 50583k
    Garbage: 178454k
    Leak: 6101k
    Overhead: 30540k
    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: 381196k
    Peak memory use before GGC: 101649k
    Peak memory use after GGC: 57302k
    Maximum of released memory in single GGC run: 50583k
    Garbage: 178569k
    Leak: 8130k
    Overhead: 31123k
    GGC runs: 110
Testing has produced no results
Testing has produced no results

comparing PR rtl-optimization/28071 testcase compilation at -O1 level:
    Overall memory needed: 393123k
    Peak memory use before GGC: 76378k
    Peak memory use after GGC: 70368k
    Maximum of released memory in single GGC run: 35020k
    Garbage: 238055k
    Leak: 13675k
    Overhead: 32176k
    GGC runs: 105
    Pre-IPA-Garbage: 47314k
    Pre-IPA-Leak: 67574k
    Pre-IPA-Overhead: 7555k
    Post-IPA-Garbage: 47314k
    Post-IPA-Leak: 67574k
    Post-IPA-Overhead: 7555k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 309451k
    Peak memory use before GGC: 76378k
    Peak memory use after GGC: 70368k
    Maximum of released memory in single GGC run: 31602k
    Garbage: 252498k
    Leak: 13849k
    Overhead: 35290k
    GGC runs: 118
    Pre-IPA-Garbage: 99940k
    Pre-IPA-Leak: 77333k
    Pre-IPA-Overhead: 12228k
    Post-IPA-Garbage: 99940k
    Post-IPA-Leak: 77333k
    Post-IPA-Overhead: 12228k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1200515k
    Peak memory use before GGC: 138640k
    Peak memory use after GGC: 127950k
    Maximum of released memory in single GGC run: 59910k
    Garbage: 374918k
    Leak: 24123k
    Overhead: 49943k
    GGC runs: 104
    Pre-IPA-Garbage: 99940k
    Pre-IPA-Leak: 77333k
    Pre-IPA-Overhead: 12228k
    Post-IPA-Garbage: 99940k
    Post-IPA-Leak: 77333k
    Post-IPA-Overhead: 12228k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog	2008-05-01 22:10:03.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-05-02 13:14:58.000000000 +0000
@@ -1,3 +1,11 @@
+2008-05-01  Jan Hubicka  <jh@suse.cz>
+
+	PR bootstrap/36100
+	* ipa-inline.c (inline_generate_summary): Make static.
+	(inline_transform): Do not call inlining at -O0; make static.
+	* passes.c (execute_todo): Add sanity check.
+	(execute_one_ipa_transform_pass): Execute proper flags.
+
 2008-05-01  Eric Botcazou  <ebotcazou@adacore.com>
 
 	* tree.h (TYPE_NONALIASED_COMPONENT): Expand comment.


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