A recent patch increased GCC's memory consumption!

gcctest@suse.de gcctest@suse.de
Tue Mar 4 14:19: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: 1097k
    Peak memory use after GGC: 995k
    Maximum of released memory in single GGC run: 129k
    Garbage: 238k
    Leak: 952k
    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: 1125k
    Peak memory use after GGC: 1031k
    Maximum of released memory in single GGC run: 128k
    Garbage: 240k
    Leak: 985k
    Overhead: 84k
    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: 1097k
    Peak memory use after GGC: 995k
    Maximum of released memory in single GGC run: 131k
    Garbage: 240k
    Leak: 953k
    Overhead: 81k
    GGC runs: 2
    Pre-IPA-Garbage: 227k
    Pre-IPA-Leak: 955k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 227k
    Post-IPA-Leak: 955k
    Post-IPA-Overhead: 79k

comparing empty function compilation at -O2 level:
    Overall memory needed: 8223k
    Peak memory use before GGC: 1098k
    Peak memory use after GGC: 995k
    Maximum of released memory in single GGC run: 134k
    Garbage: 243k
    Leak: 954k
    Overhead: 81k
    GGC runs: 2
    Pre-IPA-Garbage: 227k
    Pre-IPA-Leak: 956k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 227k
    Post-IPA-Leak: 956k
    Post-IPA-Overhead: 79k

comparing empty function compilation at -O3 level:
    Overall memory needed: 8223k
    Peak memory use before GGC: 1098k
    Peak memory use after GGC: 995k
    Maximum of released memory in single GGC run: 134k
    Garbage: 243k
    Leak: 954k
    Overhead: 81k
    GGC runs: 2
    Pre-IPA-Garbage: 227k
    Pre-IPA-Leak: 956k
    Pre-IPA-Overhead: 79k
    Post-IPA-Garbage: 227k
    Post-IPA-Leak: 956k
    Post-IPA-Overhead: 79k

comparing combine.c compilation at -O0 level:
    Overall memory needed: 22691k
    Peak memory use before GGC: 7810k
    Peak memory use after GGC: 7187k
    Maximum of released memory in single GGC run: 1550k
    Garbage: 37932k
    Leak: 5515k
    Overhead: 4649k
    GGC runs: 372
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: 9648k
    Peak memory use after GGC: 8955k
    Maximum of released memory in single GGC run: 1838k
    Garbage: 38271k
    Leak: 8380k
    Overhead: 5276k
    GGC runs: 343
Testing has produced no results
Testing has produced no results

comparing combine.c compilation at -O1 level:
    Overall memory needed: 32931k
    Peak memory use before GGC: 16345k
    Peak memory use after GGC: 16161k
    Maximum of released memory in single GGC run: 1382k
    Garbage: 52133k
    Leak: 5660k
    Overhead: 5831k
    GGC runs: 444
    Pre-IPA-Garbage: 13920k
    Pre-IPA-Leak: 17182k
    Pre-IPA-Overhead: 2129k
    Post-IPA-Garbage: 13920k
    Post-IPA-Leak: 17182k
    Post-IPA-Overhead: 2129k

comparing combine.c compilation at -O2 level:
    Overall memory needed: 35723k -> 35719k
    Peak memory use before GGC: 16445k
    Peak memory use after GGC: 16280k
    Maximum of released memory in single GGC run: 1317k
    Garbage: 72004k
    Leak: 5986k
    Overhead: 8142k
    GGC runs: 511
    Pre-IPA-Garbage: 14077k
    Pre-IPA-Leak: 17247k
    Pre-IPA-Overhead: 2144k
    Post-IPA-Garbage: 14077k
    Post-IPA-Leak: 17247k
    Post-IPA-Overhead: 2144k

comparing combine.c compilation at -O3 level:
    Overall memory needed: 38711k
    Peak memory use before GGC: 16615k
    Peak memory use after GGC: 16293k
    Maximum of released memory in single GGC run: 2069k
    Garbage: 89499k
    Leak: 6039k
    Overhead: 10067k
    GGC runs: 545
    Pre-IPA-Garbage: 14078k
    Pre-IPA-Leak: 17258k
    Pre-IPA-Overhead: 2145k
    Post-IPA-Garbage: 14078k
    Post-IPA-Leak: 17258k
    Post-IPA-Overhead: 2145k

comparing insn-attrtab.c compilation at -O0 level:
    Overall memory needed: 137427k -> 137431k
    Peak memory use before GGC: 57000k
    Peak memory use after GGC: 31457k
    Maximum of released memory in single GGC run: 33256k
    Garbage: 128611k
    Leak: 8383k
    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: 138687k
    Peak memory use before GGC: 58142k
    Peak memory use after GGC: 32599k
    Maximum of released memory in single GGC run: 33256k
    Garbage: 128862k
    Leak: 10058k
    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: 142963k
    Peak memory use before GGC: 56212k
    Peak memory use after GGC: 49987k
    Maximum of released memory in single GGC run: 23977k
    Garbage: 206485k
    Leak: 9276k
    Overhead: 24747k
    GGC runs: 315
    Pre-IPA-Garbage: 50356k
    Pre-IPA-Leak: 49677k
    Pre-IPA-Overhead: 7543k
    Post-IPA-Garbage: 50356k
    Post-IPA-Leak: 49677k
    Post-IPA-Overhead: 7543k

comparing insn-attrtab.c compilation at -O2 level:
    Overall memory needed: 184571k -> 184567k
    Peak memory use before GGC: 56854k
    Peak memory use after GGC: 51574k
    Maximum of released memory in single GGC run: 22905k
    Garbage: 247312k
    Leak: 10363k
    Overhead: 30403k
    GGC runs: 347
    Pre-IPA-Garbage: 50428k
    Pre-IPA-Leak: 49681k
    Pre-IPA-Overhead: 7550k
    Post-IPA-Garbage: 50428k
    Post-IPA-Leak: 49681k
    Post-IPA-Overhead: 7550k

comparing insn-attrtab.c compilation at -O3 level:
    Overall memory needed: 190443k
    Peak memory use before GGC: 68033k
    Peak memory use after GGC: 62281k
    Maximum of released memory in single GGC run: 23399k
    Garbage: 275170k
    Leak: 10400k
    Overhead: 32196k
    GGC runs: 350
    Pre-IPA-Garbage: 50428k
    Pre-IPA-Leak: 49681k
    Pre-IPA-Overhead: 7550k
    Post-IPA-Garbage: 50428k
    Post-IPA-Leak: 49681k
    Post-IPA-Overhead: 7550k

comparing Gerald's testcase PR8361 compilation at -O0 level:
    Overall memory needed: 148428k -> 148424k
    Peak memory use before GGC: 84242k
    Peak memory use after GGC: 83407k
    Maximum of released memory in single GGC run: 16731k
    Garbage: 200926k
    Leak: 48024k
    Overhead: 23992k
    GGC runs: 417
    Pre-IPA-Garbage: 109791k
    Pre-IPA-Leak: 71152k
    Pre-IPA-Overhead: 12099k
    Post-IPA-Garbage: 109791k
    Post-IPA-Leak: 71152k
    Post-IPA-Overhead: 12099k

comparing Gerald's testcase PR8361 compilation at -O0 -g level:
    Overall memory needed: 169704k -> 169700k
    Peak memory use before GGC: 96213k
    Peak memory use after GGC: 95248k
    Maximum of released memory in single GGC run: 17546k
    Garbage: 206565k
    Leak: 69707k
    Overhead: 28969k
    GGC runs: 390
    Pre-IPA-Garbage: 110434k
    Pre-IPA-Leak: 84433k
    Pre-IPA-Overhead: 14675k
    Post-IPA-Garbage: 110434k
    Post-IPA-Leak: 84433k
    Post-IPA-Overhead: 14675k

comparing Gerald's testcase PR8361 compilation at -O1 level:
  Amount of produced GGC garbage increased from 290910k to 291457k, overall 0.19%
    Overall memory needed: 122804k -> 122520k
    Peak memory use before GGC: 84151k -> 84156k
    Peak memory use after GGC: 83317k -> 83321k
    Maximum of released memory in single GGC run: 16272k
    Garbage: 290910k -> 291457k
    Leak: 47432k -> 47314k
    Overhead: 29394k -> 29430k
    GGC runs: 515 -> 519
    Pre-IPA-Garbage: 155012k
    Pre-IPA-Leak: 87948k -> 87953k
    Pre-IPA-Overhead: 17503k -> 17504k
    Post-IPA-Garbage: 155012k
    Post-IPA-Leak: 87948k -> 87953k
    Post-IPA-Overhead: 17503k -> 17504k

comparing Gerald's testcase PR8361 compilation at -O2 level:
  Amount of produced GGC garbage increased from 355588k to 356488k, overall 0.25%
    Overall memory needed: 124576k -> 124644k
    Peak memory use before GGC: 84341k -> 84334k
    Peak memory use after GGC: 83500k -> 83498k
    Maximum of released memory in single GGC run: 16273k
    Garbage: 355588k -> 356488k
    Leak: 48431k -> 48286k
    Overhead: 36212k -> 36310k
    GGC runs: 592 -> 588
    Pre-IPA-Garbage: 157587k
    Pre-IPA-Leak: 88098k -> 88098k
    Pre-IPA-Overhead: 17791k -> 17791k
    Post-IPA-Garbage: 157587k
    Post-IPA-Leak: 88098k -> 88098k
    Post-IPA-Overhead: 17791k -> 17791k

comparing Gerald's testcase PR8361 compilation at -O3 level:
  Amount of produced GGC garbage increased from 381139k to 382580k, overall 0.38%
    Overall memory needed: 127328k -> 127608k
    Peak memory use before GGC: 85613k
    Peak memory use after GGC: 84751k -> 84752k
    Maximum of released memory in single GGC run: 16624k
    Garbage: 381139k -> 382580k
    Leak: 48886k -> 48877k
    Overhead: 38416k -> 38536k
    GGC runs: 611 -> 613
    Pre-IPA-Garbage: 160300k
    Pre-IPA-Leak: 88381k -> 88382k
    Pre-IPA-Overhead: 18040k -> 18040k
    Post-IPA-Garbage: 160300k
    Post-IPA-Leak: 88381k -> 88382k
    Post-IPA-Overhead: 18040k -> 18040k

comparing PR rtl-optimization/28071 testcase compilation at -O0 level:
    Overall memory needed: 380438k -> 380437k
    Peak memory use before GGC: 101210k
    Peak memory use after GGC: 56863k
    Maximum of released memory in single GGC run: 50583k
    Garbage: 178904k
    Leak: 6099k
    Overhead: 30782k
    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: 381238k -> 381241k
    Peak memory use before GGC: 101840k
    Peak memory use after GGC: 57494k
    Maximum of released memory in single GGC run: 50582k
    Garbage: 179019k
    Leak: 7829k
    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: 437899k -> 437687k
    Peak memory use before GGC: 78686k
    Peak memory use after GGC: 70437k
    Maximum of released memory in single GGC run: 37594k
    Garbage: 234297k
    Leak: 15903k
    Overhead: 35589k
    GGC runs: 105
    Pre-IPA-Garbage: 52925k
    Pre-IPA-Leak: 49233k
    Pre-IPA-Overhead: 7120k
    Post-IPA-Garbage: 52925k
    Post-IPA-Leak: 49233k
    Post-IPA-Overhead: 7120k

comparing PR rtl-optimization/28071 testcase compilation at -O2 level:
    Overall memory needed: 356599k -> 356603k
    Peak memory use before GGC: 75424k
    Peak memory use after GGC: 70438k
    Maximum of released memory in single GGC run: 32243k
    Garbage: 245000k
    Leak: 16075k
    Overhead: 38757k
    GGC runs: 116
    Pre-IPA-Garbage: 91836k
    Pre-IPA-Leak: 77291k
    Pre-IPA-Overhead: 11793k
    Post-IPA-Garbage: 91836k
    Post-IPA-Leak: 77291k
    Post-IPA-Overhead: 11793k

comparing PR rtl-optimization/28071 testcase compilation at -O3 -fno-tree-pre -fno-tree-fre level:
    Overall memory needed: 1197779k -> 1195911k
    Peak memory use before GGC: 136585k
    Peak memory use after GGC: 127943k
    Maximum of released memory in single GGC run: 59911k
    Garbage: 371518k
    Leak: 24889k
    Overhead: 49888k
    GGC runs: 103
    Pre-IPA-Garbage: 91836k
    Pre-IPA-Leak: 77291k
    Pre-IPA-Overhead: 11793k
    Post-IPA-Garbage: 91836k
    Post-IPA-Leak: 77291k
    Post-IPA-Overhead: 11793k

Head of the ChangeLog is:

--- /usr/src/SpecTests/sandbox-britten-memory/x86_64/mem-result/ChangeLog	2008-03-03 19:04:53.000000000 +0000
+++ /usr/src/SpecTests/sandbox-britten-memory/gcc/gcc/ChangeLog	2008-03-04 11:07:33.000000000 +0000
@@ -1,3 +1,22 @@
+2008-03-04  Jan Hubicka  <jh@suse.cz>
+
+	PR c++/35262
+	* ipa-inline.c (cgraph_decide_inlining_of_small_function): Fix typo
+	in last commit.
+
+2008-03-04  Danny Smith  <dannysmith@users.sourceforge.net>
+
+	* config/i386/i386.md (allocate_stack_worker_32): Use  __chkstk
+        label to probe the stack.
+
+2008-03-04  Danny Smith  <dannysmith@users.sourceforge.net>
+
+	* gthr-win32.h [__GTHREAD_HIDE_WIN32API]
+	(__gthr_win32_mutex_destroy): Declare.
+	[__GTHREAD_HIDE_WIN32API] (__gthread_mutex_destroy): Use
+	__gthr_win32_mutex_destroy.
+	* config/i386/gthr-win32.c  (__gthr_win32_mutex_destroy): Define.
+
 2008-03-03  Jan Hubicka  <jh@suse.cz>
 
 	PR c++/35262


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