Write relocation sections contiguously.
Linkers normally read all the relocations upfront to compute the references
between sections. Putting them together is a bit more cache friendly.
I benchmarked linking a Release+Asserts clang with gold on a vm. I tried all
4 combinations of --gc-sections/no --gc-section hot and cold cache.
I cleared the cache with
echo 3 > /proc/sys/vm/drop_caches
and warmed it up by running the link once before timing the subsequent ones.
With cold cache and --gc-sections the time goes from
1.
86130781665 +- 0.
01713126697463843 seconds
to
1.
82370735105 +- 0.
014127522318814516 seconds
With cold cache and no --gc-sections the time goes from
1.
6087245435500002 +- 0.
012999066825178644 seconds
to
1.
5687122041500001 +- 0.
013145850126026619 seconds
With hot cache and no --gc-sections the time goes from
0.
926200939 ( +- 0.33% ) seconds
to
0.
907200079 ( +- 0.31% ) seconds
With hot cache and gc sections the time goes from
1.
183038049 ( +- 0.34% ) seconds
to
1.
147355862 ( +- 0.39% ) seconds
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235165
91177308-0d34-0410-b5e6-
96231b3b80d8