]> gcc.gnu.org Git - gcc.git/commit - gcc/lto-streamer.h
Reduce memory usage for storing LTO decl resolutions
authorAndi Kleen <ak@linux.intel.com>
Fri, 7 Sep 2012 02:56:17 +0000 (02:56 +0000)
committerAndi Kleen <ak@gcc.gnu.org>
Fri, 7 Sep 2012 02:56:17 +0000 (02:56 +0000)
commitaed7d7cfbb865025c86bd4ef0164294ae4679923
tree60912414a472f915fe20ebfab483665067066d2a
parent6e85a1584edbc575a8f69bec8aa4dd4c4f977a04
Reduce memory usage for storing LTO decl resolutions

With a LTO build of a large project (>11k subfiles incrementially linked)
storing the LTO resolutions took over 0.5GB memory:

lto/lto.c:1087 (lto_resolution_read)                      0: 0.0%  540398500           15903: 0.0%

The reason is that the declaration indexes are quite sparse, but every subfile
got a full continuous vector for them. Since there are so many of them the
many vectors add up.

This patch instead stores the resolutions initially in a compact (index, resolution)
format. This is only expanded into a sparse vector for fast lookup when
the subfile is actually read, but then immediately freed. This means only one
vector is allocated at a time.

This brings the overhead for this down to less than 3MB for the test case:

lto/lto.c:1087 (lto_resolution_read)                      0: 0.0%    2821456           42186: 0.0%

gcc/:

2012-09-06  Andi Kleen  <ak@linux.intel.com>

* gcc/lto-streamer.h (res_pair): Add.
(lto_file_decl_data): Replace resolutions with respairs.
Add max_index.
* gcc/lto/lto.c (lto_resolution_read): Remove max_index.  Add rp.
Initialize respairs.
(lto_file_finalize): Set up resolutions vector lazily from respairs.

From-SVN: r191051
gcc/ChangeLog
gcc/lto-streamer.h
gcc/lto/lto.c
This page took 0.064316 seconds and 5 git commands to generate.