[lld] r309652 - Binary search to find a relocation.
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 1 10:02:56 PDT 2017
This is awesome. It takes a link of clang with gdb index from about 21
seconds to 13.5 seconds for me!
Cheers,
Rafael
Rui Ueyama via llvm-commits <llvm-commits at lists.llvm.org> writes:
> Author: ruiu
> Date: Mon Jul 31 21:11:03 2017
> New Revision: 309652
>
> URL: http://llvm.org/viewvc/llvm-project?rev=309652&view=rev
> Log:
> Binary search to find a relocation.
>
> This change makes -gdb-index 40% faster. My test case is self-linking lld.
>
> Differential Revision: https://reviews.llvm.org/D36079
>
> Modified:
> lld/trunk/ELF/GdbIndex.cpp
>
> Modified: lld/trunk/ELF/GdbIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/GdbIndex.cpp?rev=309652&r1=309651&r2=309652&view=diff
> ==============================================================================
> --- lld/trunk/ELF/GdbIndex.cpp (original)
> +++ lld/trunk/ELF/GdbIndex.cpp Mon Jul 31 21:11:03 2017
> @@ -79,11 +79,13 @@ template <class RelTy>
> Optional<RelocAddrEntry>
> LLDDwarfObj<ELFT>::findAux(const InputSectionBase &Sec, uint64_t Pos,
> ArrayRef<RelTy> Rels) const {
> - auto I = llvm::find_if(Rels,
> - [=](const RelTy &Rel) { return Rel.r_offset == Pos; });
> - if (I == Rels.end())
> + auto It = std::lower_bound(
> + Rels.begin(), Rels.end(), Pos,
> + [](const RelTy &A, uint64_t B) { return A.r_offset < B; });
> + if (It == Rels.end() || It->r_offset != Pos)
> return None;
> - const RelTy &Rel = *I;
> + const RelTy &Rel = *It;
> +
> const ObjFile<ELFT> *File = Sec.getFile<ELFT>();
> uint32_t SymIndex = Rel.getSymbol(Config->IsMips64EL);
> const typename ELFT::Sym &Sym = File->getELFSymbols()[SymIndex];
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list