aboutsummaryrefslogtreecommitdiff
path: root/lld/ELF/SyntheticSections.cpp
diff options
context:
space:
mode:
authorFangrui Song <i@maskray.me>2021-12-12 20:53:06 -0800
committerFangrui Song <i@maskray.me>2021-12-12 20:53:06 -0800
commit9115d75117b57115fe45153e5f38f2c444c0cd91 (patch)
treed9d97d4e3a0b09e329ff6d2ce7757cb740815ac3 /lld/ELF/SyntheticSections.cpp
parent1eaa9b4374f5559a2332b056ae66ddf78ad8bfff (diff)
downloadllvm-9115d75117b57115fe45153e5f38f2c444c0cd91.zip
llvm-9115d75117b57115fe45153e5f38f2c444c0cd91.tar.gz
llvm-9115d75117b57115fe45153e5f38f2c444c0cd91.tar.bz2
[ELF] Use parallelSort for .rela.dyn
An unstable sort suffices. In a large link (11.06s), this decreases .rela.dyn writeTo time from 1.52s to 0.81s, resulting in 6% total time speedup (the benefit will greatly dilute if --pack-dyn-relocs=relr becomes prevailing). Encoding the dynamic relocations then sorting raw Elf_Rel/Elf_Rela doesn't seem to improve much (doing that would require code duplicate because of Elf_Rel/Elf_Rela plus unfortunate mips64le), so don't do that.
Diffstat (limited to 'lld/ELF/SyntheticSections.cpp')
-rw-r--r--lld/ELF/SyntheticSections.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp
index 4078f7e..bcb521a4 100644
--- a/lld/ELF/SyntheticSections.cpp
+++ b/lld/ELF/SyntheticSections.cpp
@@ -1678,7 +1678,7 @@ template <class ELFT> void RelocationSection<ELFT>::writeTo(uint8_t *buf) {
// place R_*_RELATIVE first. SymIndex is to improve locality, while r_offset
// is to make results easier to read.
if (sort)
- llvm::stable_sort(
+ parallelSort(
relocs, [&](const DynamicReloc &a, const DynamicReloc &b) {
return std::make_tuple(a.type != target->relativeRel,
a.getSymIndex(symTab), a.getOffset()) <