[llvm-dev] How to make LLVM go faster?

Bruce Hoult via llvm-dev llvm-dev at lists.llvm.org
Tue Sep 11 23:41:11 PDT 2018


It might be interesting to know whether the percentages are basically the
same for non-x86.

On Tue, Sep 11, 2018 at 6:54 PM, Craig Topper via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> The X86 assembly printer is badly named. I think its a leftover from
> before LLVM had an integrated assembler. It's where the assembly would have
> been printed. Now it is where MachineInstrs are converted to MCInsts and
> either printed or turned into binary.
>
> ~Craig
>
>
> On Tue, Sep 11, 2018 at 6:49 PM Andrew Kelley via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> Thanks, that was a really helpful suggestion. If you're curious- here are
>> some of the high cost areas:
>>
>> ===---------------------------------------------------------
>> ----------------===
>>                                  DWARF Emission
>> ===---------------------------------------------------------
>> ----------------===
>>   Total Execution Time: 2.0117 seconds (2.0185 wall clock)
>>
>>    ---User Time---   --System Time--   --User+System--   ---Wall Time---
>> --- Name ---
>>    0.7977 ( 64.4%)   0.4517 ( 58.4%)   1.2494 ( 62.1%)   1.2557 ( 62.2%)
>> Debug Info Emission
>>    0.4383 ( 35.4%)   0.3221 ( 41.6%)   0.7603 ( 37.8%)   0.7608 ( 37.7%)
>> DWARF Exception Writer
>>    0.0019 (  0.2%)   0.0000 (  0.0%)   0.0019 (  0.1%)   0.0019 (  0.1%)
>> DWARF Debug Writer
>>    1.2379 (100.0%)   0.7738 (100.0%)   2.0117 (100.0%)   2.0185 (100.0%)
>> Total
>> ===---------------------------------------------------------
>> ----------------===
>>                       ... Pass execution timing report ...
>> ===---------------------------------------------------------
>> ----------------===
>>   Total Execution Time: 10.3340 seconds (10.3289 wall clock)
>>
>>    ---User Time---   --System Time--   --User+System--   ---Wall Time---
>> --- Name ---
>>    2.4747 ( 31.5%)   1.6998 ( 68.5%)   4.1744 ( 40.4%)   4.1745 ( 40.4%)
>> X86 Assembly Printer
>>    2.3159 ( 29.5%)   0.0103 (  0.4%)   2.3262 ( 22.5%)   2.3262 ( 22.5%)
>> Coroutine Splitting
>>    1.4348 ( 18.3%)   0.4092 ( 16.5%)   1.8440 ( 17.8%)   1.8428 ( 17.8%)
>> X86 DAG->DAG Instruction Selection
>>    0.1875 (  2.4%)   0.0384 (  1.5%)   0.2259 (  2.2%)   0.2252 (  2.2%)
>> Fast Register Allocator
>>
>>
>> I'm curious about the X86 Assembly Printer. What is it doing? The module
>> in question has some inline assembly in it. So I would think that LLVM
>> would parse it and then render it as machine code - at what point does it
>> get printed?
>>
>> As for Coroutine Splitting - is this about as fast as it will get? If not
>> then what's the point of LLVM having coroutines? Frontends would be better
>> off implementing coroutines on top of structs, like Rust does.
>>
>>
>> On Tue, Sep 11, 2018 at 9:01 PM Friedman, Eli <efriedma at codeaurora.org>
>> wrote:
>>
>>> On 9/11/2018 5:48 PM, Andrew Kelley via llvm-dev wrote:
>>>
>>> Here is some timing information from running the Zig standard library
>>> tests:
>>>
>>> $ ./zig test ../std/index.zig --enable-timing-info
>>>                 Name       Start         End    Duration     Percent
>>>           Initialize      0.0000      0.0010      0.0010      0.0001
>>>    Semantic Analysis      0.0010      0.9968      0.9958      0.1192
>>>      Code Generation      0.9968      1.4000      0.4032      0.0483
>>>     LLVM Emit Output      1.4000      8.1759      6.7760      0.8112
>>>   Build Dependencies      8.1759      8.3341      0.1581      0.0189
>>>            LLVM Link      8.3341      8.3530      0.0189      0.0023
>>>                Total      0.0000      8.3530      8.3530      1.0000
>>>
>>> 81% of the time was spent waiting for LLVM to turn a Module into an
>>> object file. This is with optimizations off, FastISel, no module
>>> verification, etc.
>>>
>>> How can I speed this up? Any tips or things to look into?
>>>
>>>
>>> First step is probably setting TimePassesIsEnabled to true and looking
>>> at the output.  It's hard to say where the time is going without any
>>> numbers.
>>>
>>> -Eli
>>>
>>> --
>>> Employee of Qualcomm Innovation Center, Inc.
>>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
>>>
>>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180911/0b730f22/attachment-0001.html>


More information about the llvm-dev mailing list