aboutsummaryrefslogtreecommitdiff
path: root/libobjc/configure.ac
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2012-09-07 02:56:17 +0000
committerAndi Kleen <ak@gcc.gnu.org>2012-09-07 02:56:17 +0000
commitaed7d7cfbb865025c86bd4ef0164294ae4679923 (patch)
tree60912414a472f915fe20ebfab483665067066d2a /libobjc/configure.ac
parent6e85a1584edbc575a8f69bec8aa4dd4c4f977a04 (diff)
downloadgcc-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