diff options
author | Andi Kleen <ak@linux.intel.com> | 2012-09-07 02:56:17 +0000 |
---|---|---|
committer | Andi Kleen <ak@gcc.gnu.org> | 2012-09-07 02:56:17 +0000 |
commit | aed7d7cfbb865025c86bd4ef0164294ae4679923 (patch) | |
tree | 60912414a472f915fe20ebfab483665067066d2a /libobjc/configure.ac | |
parent | 6e85a1584edbc575a8f69bec8aa4dd4c4f977a04 (diff) | |
download | gcc-aed7d7cfbb865025c86bd4ef0164294ae4679923.zip gcc-aed7d7cfbb865025c86bd4ef0164294ae4679923.tar.gz gcc-aed7d7cfbb865025c86bd4ef0164294ae4679923.tar.bz2 |
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
Diffstat (limited to 'libobjc/configure.ac')
0 files changed, 0 insertions, 0 deletions