[LLVMdev] Capabilities of Clang's PGO (e.g. improving code density)
Duncan P. N. Exon Smith
dexonsmith at apple.com
Thu May 28 11:05:17 PDT 2015
> On 2015-May-28, at 09:56, Philip Reames <listmail at philipreames.com> wrote:
>
>
>
> On 05/27/2015 11:13 AM, Duncan P. N. Exon Smith wrote:
>>> On 2015 May 27, at 07:42, Diego Novillo <dnovillo at google.com> wrote:
>>>
>>> On Tue, May 26, 2015 at 11:47 PM, Lee Hunt <leehu at exchange.microsoft.com> wrote:
>>>
>>>> For example, from reading different pages on how Clang PGO, it’s unclear if
>>>> it does “block reordering” (i.e. moving unexecuted code blocks to a distant
>>>> code page, leaving only ‘hot’ executed code packed together for greater code
>>>> density). I find mention of “hot arc” optimization (-fprofile-arcs) , but
>>>> I’m unclear if this is the same thing. Does Clang PGO do block reordering?
>>> A small clarification. Clang itself does not implement any
>>> optimizations. Clang limits itself to generate LLVM IR. The
>>> annotated IR is then used by some LLVM optimizers to guide decisions.
>>> At this time, there are few optimization passes that use the profile
>>> information: block reordering and register allocation (to avoid
>>> spilling on cold paths).
>>>
>>> There are no other significant transformations that use profiling
>>> information. We are working on that. Notably, we'd like to add
>>> profiling-based decisions to the inliner
>> Just a quick note about the inliner. Although the inliner itself
>> doesn't know how to use the profile, clang's IRGen has been modified
>> to add an 'inlinehint' attribute to hot functions and the 'cold'
>> attribute to cold functions. Indirectly, PGO does affect the
>> inliner. (We'll remove this once the inliner does the right thing on
>> its own.)
> OT: Can you give me a pointer to the clang code involved? I wasn't aware of this.
Have a look at `CodeGenPGO::applyFunctionAttributes()` around line
760 of lib/CodeGen/CodeGenPGO.cpp.
More information about the llvm-dev
mailing list