diff options
author | Fangrui Song <i@maskray.me> | 2021-12-12 20:53:06 -0800 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2021-12-12 20:53:06 -0800 |
commit | 9115d75117b57115fe45153e5f38f2c444c0cd91 (patch) | |
tree | d9d97d4e3a0b09e329ff6d2ce7757cb740815ac3 /lld/ELF/SyntheticSections.cpp | |
parent | 1eaa9b4374f5559a2332b056ae66ddf78ad8bfff (diff) | |
download | llvm-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.cpp | 2 |
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()) < |