[lld] r292042 - Simplify string output. NFC.

Sean Silva via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 18 22:34:58 PST 2017


On Mon, Jan 16, 2017 at 10:20 PM, Rui Ueyama <ruiu at google.com> wrote:

> On Mon, Jan 16, 2017 at 1:14 PM, Sean Silva <chisophugis at gmail.com> wrote:
>
>> One note is that generally printf-like formatting ends up being much
>> slower than custom formatting that doesn't have to go through a varargs
>> call etc. Not sure if it is slower/faster in this case though.
>>
>> The reason I mention this is that there are users at PlayStation that
>> have this feature on *for all links* and it actually consumes a pretty
>> significant amount of time IIRC (something like 25% of the link maybe?).
>>
>> Not sure if this is worth worrying about, but just an FYI for a
>> surprising fact!
>>
>
> When linking clang, this feature actually takes 80% of the link time, so
> it is extremely slow. That's not because of the use of printf though. I
> think that's because (1) string-nizing objects are generally slow, (2)
> demangling symbols is particularly time consuming, and (3) other parts of
> LLD are pretty fast (so the ratio of the time spent for this feature is
> larger than for slower linkers). I haven't tried to optimize it, but I
> wouldn't be surprised if we can't make this significantly faster.
>

FWIW, in the test case I remember at PlayStation, the alternative linker
(the proprietary linker there) was not significantly slower than LLD. I
guess Clang uses C++-heavy constructs more, so symbol names are larger,
take longer to demangle, etc. than the codebase I was testing (80% is
definitely very high compared to what I was seeing).


>
> If this needs to be much faster, maybe we should parallelize it to improve
> latency.
>
>
Yeah. I think we can wait though :) Let's let the PlayStation folks push on
this if/when it comes up.

-- Sean Silva


>
>>
>> -- Sean Silva
>>
>> On Sat, Jan 14, 2017 at 5:11 PM, Rui Ueyama via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: ruiu
>>> Date: Sat Jan 14 19:11:47 2017
>>> New Revision: 292042
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=292042&view=rev
>>> Log:
>>> Simplify string output. NFC.
>>>
>>> Modified:
>>>     lld/trunk/COFF/MapFile.cpp
>>>     lld/trunk/ELF/MapFile.cpp
>>>
>>> Modified: lld/trunk/COFF/MapFile.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/MapFile.c
>>> pp?rev=292042&r1=292041&r2=292042&view=diff
>>> ============================================================
>>> ==================
>>> --- lld/trunk/COFF/MapFile.cpp (original)
>>> +++ lld/trunk/COFF/MapFile.cpp Sat Jan 14 19:11:47 2017
>>> @@ -36,9 +36,7 @@ using namespace lld::coff;
>>>
>>>  static void writeOutSecLine(raw_fd_ostream &OS, uint64_t Address,
>>> uint64_t Size,
>>>                              uint64_t Align, StringRef Name) {
>>> -  OS << format_hex_no_prefix(Address, 8) << ' '
>>> -     << format_hex_no_prefix(Size, 8) << ' ' << format("%5x ", Align)
>>> -     << left_justify(Name, 7);
>>> +  OS << format("%08x %08x %5x ", Address, Size, Align) <<
>>> left_justify(Name, 7);
>>>  }
>>>
>>>  static void writeInSecLine(raw_fd_ostream &OS, uint64_t Address,
>>> uint64_t Size,
>>> @@ -89,9 +87,7 @@ static void writeSectionChunk(raw_fd_ost
>>>
>>>  static void writeMapFile2(raw_fd_ostream &OS,
>>>                            ArrayRef<OutputSection *> OutputSections) {
>>> -  OS << left_justify("Address", 8) << ' ' << left_justify("Size", 8)
>>> -     << ' ' << left_justify("Align", 5) << ' ' << left_justify("Out",
>>> 7) << ' '
>>> -     << left_justify("In", 7) << ' ' << left_justify("File", 7) << "
>>> Symbol\n";
>>> +  OS << "Address  Size     Align Out     In      File    Symbol\n";
>>>
>>>    for (OutputSection *Sec : OutputSections) {
>>>      uint32_t VA = Sec->getRVA();
>>>
>>> Modified: lld/trunk/ELF/MapFile.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/MapFile.cp
>>> p?rev=292042&r1=292041&r2=292042&view=diff
>>> ============================================================
>>> ==================
>>> --- lld/trunk/ELF/MapFile.cpp (original)
>>> +++ lld/trunk/ELF/MapFile.cpp Sat Jan 14 19:11:47 2017
>>> @@ -35,8 +35,7 @@ using namespace lld::elf;
>>>
>>>  static void writeOutSecLine(raw_fd_ostream &OS, int Width, uint64_t
>>> Address,
>>>                              uint64_t Size, uint64_t Align, StringRef
>>> Name) {
>>> -  OS << format_hex_no_prefix(Address, Width) << ' '
>>> -     << format_hex_no_prefix(Size, Width) << ' ' << format("%5x ",
>>> Align)
>>> +  OS << format("%0*x %0*x %5x ", Width, Address, Width, Size, Align)
>>>       << left_justify(Name, 7);
>>>  }
>>>
>>> @@ -100,8 +99,7 @@ static void writeMapFile2(raw_fd_ostream
>>>    int Width = ELFT::Is64Bits ? 16 : 8;
>>>
>>>    OS << left_justify("Address", Width) << ' ' << left_justify("Size",
>>> Width)
>>> -     << ' ' << left_justify("Align", 5) << ' ' << left_justify("Out",
>>> 7) << ' '
>>> -     << left_justify("In", 7) << ' ' << left_justify("File", 7) << "
>>> Symbol\n";
>>> +     << " Align Out     In      File    Symbol\n";
>>>
>>>    for (OutputSectionBase *Sec : OutputSections) {
>>>      writeOutSecLine(OS, Width, Sec->Addr, Sec->Size, Sec->Addralign,
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170118/7388270c/attachment.html>


More information about the llvm-commits mailing list