[llvm-dev] Move InlineCost.cpp out of Analysis?

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Mon Apr 18 16:32:04 PDT 2016

On 04/18/2016 03:00 PM, Chandler Carruth via llvm-dev wrote:
> On Mon, Apr 18, 2016 at 2:48 PM Hal Finkel <hfinkel at anl.gov 
> <mailto:hfinkel at anl.gov>> wrote:
>     ------------------------------------------------------------------------
>         *From: *"Xinliang David Li" <davidxl at google.com
>         <mailto:davidxl at google.com>>
>         On Mon, Apr 18, 2016 at 2:33 PM, Mehdi Amini
>         <mehdi.amini at apple.com <mailto:mehdi.amini at apple.com>> wrote:
>             In the current case at stake: the issue is that we can't
>             make the Analysis library using anything from the
>             ProfileData library. Conceptually there is a problem IMO.
>         Yes -- this is a very good point.
>     Independent of anything else, +1.
> The design of ProfileData and reading profile information in the 
> entire middle end had a really fundamental invariant that folks seem 
> to have lost track of:
> a) There is exactly *one* way to get at profile information from 
> general analyses and transforms: a dedicated analysis pass that 
> manages access to the profile info.
> b) There is exactly *one* way for this analysis to compute this 
> information from an *external* profile source: profile metadata 
> attached to the IR.
> c) There could be many external profile sources, but all of them 
> should be read and then translated into metadata annotations on the IR 
> so that serialization / deserialization preserve them in a common 
> format and we can reason about how they work.
> This layering is why it is only a transform that accesses ProfileData 
> -- it is responsible for annotating the IR and nothing else. Then the 
> analysis uses these annotations and never reads the data directly.
> I think this is a really important separation of concerns as it 
> ensures that we don't get an explosion of different analyses 
> supporting various different subsets of profile sources.
> Now, the original design only accounted for profile information 
> *within* a function body, clearly it needs to be extended to support 
> intraprocedural information. But I would still expect that to follow a 
> similar layering where we first read the data into IR annotations, 
> then have an analysis pass (this time a module analysis pass in all 
> likelihood) that brokers access to these annotations through an API 
> that can do intelligent things like synthesizing it from the "cold" 
> attribute or whatever when missing.
> -Chandler
+1 to this.

p.s. I have my own source of profiling information which I translate 
into metadata.  The fact that "just works" is valuable and is definitely 
a design goal we should retain.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160418/2c496521/attachment.html>

More information about the llvm-dev mailing list