[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.
This commit is contained in:
Fangrui Song 2021-12-12 20:53:06 -08:00
parent 1eaa9b4374
commit 9115d75117
1 changed files with 1 additions and 1 deletions

View File

@ -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()) <