This is the mail archive of the
gcc-cvs@gcc.gnu.org
mailing list for the GCC project.
r191051 - in /trunk/gcc: ChangeLog lto-streamer...
- From: ak at gcc dot gnu dot org
- To: gcc-cvs at gcc dot gnu dot org
- Date: Fri, 07 Sep 2012 02:56:17 -0000
- Subject: r191051 - in /trunk/gcc: ChangeLog lto-streamer...
Author: ak
Date: Fri Sep 7 02:56:17 2012
New Revision: 191051
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=191051
Log:
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.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/lto-streamer.h
trunk/gcc/lto/lto.c