<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<br>
<br>
<div class="moz-cite-prefix">On 04/18/2016 03:00 PM, Chandler
Carruth via llvm-dev wrote:<br>
</div>
<blockquote
cite="mid:CAAwGriEj8fqm268KFnCZQy=a6asmk+PYcUK5pTZpSChvE7Cnpw@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_quote">
<div dir="ltr">On Mon, Apr 18, 2016 at 2:48 PM Hal Finkel <<a
moz-do-not-send="true" href="mailto:hfinkel@anl.gov"><a class="moz-txt-link-abbreviated" href="mailto:hfinkel@anl.gov">hfinkel@anl.gov</a></a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div
style="font-family:arial,helvetica,sans-serif;font-size:10pt;color:#000000"><br>
<br>
<hr>
<blockquote style="border-left:2px solid
rgb(16,16,255);margin-left:5px;padding-left:5px;color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt"><b>From:
</b>"Xinliang David Li" <<a moz-do-not-send="true"
href="mailto:davidxl@google.com" target="_blank">davidxl@google.com</a>><br>
</blockquote>
</div>
</div>
<div>
<div
style="font-family:arial,helvetica,sans-serif;font-size:10pt;color:#000000">
<blockquote style="border-left:2px solid
rgb(16,16,255);margin-left:5px;padding-left:5px;color:rgb(0,0,0);font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Mon, Apr 18, 2016 at
2:33 PM, Mehdi Amini <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:mehdi.amini@apple.com"
target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:mehdi.amini@apple.com">mehdi.amini@apple.com</a></a>></span>
wrote:
<blockquote class="gmail_quote"
style="margin:0pt 0pt 0pt
0.8ex;border-left:1px solid
rgb(204,204,204);padding-left:1ex">
<div style="word-wrap:break-word">
<div>
<div>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.</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div><br>
</div>
<div>Yes -- this is a very good point.</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
<div>
<div
style="font-family:arial,helvetica,sans-serif;font-size:10pt;color:#000000">Independent
of anything else, +1.<br>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>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:</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>b) There is exactly *one* way for this analysis to
compute this information from an *external* profile source:
profile metadata attached to the IR.</div>
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div><br>
</div>
<div>This layering is why it is only a transform that accesses
ProfileData -- it is responsible for annotating the IR and
nothing else. <span style="line-height:1.5">Then the
analysis uses these annotations and never reads the data
directly.</span></div>
<div><span style="line-height:1.5"><br>
</span></div>
<div><span style="line-height:1.5">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.</span></div>
<div><span style="line-height:1.5"><br>
</span></div>
<div><span style="line-height:1.5"><br>
</span></div>
<div><span style="line-height:1.5">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.</span></div>
<div><span style="line-height:1.5"><br>
</span></div>
<div><span style="line-height:1.5">-Chandler</span></div>
</div>
</div>
</blockquote>
+1 to this. <br>
<br>
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. <br>
</body>
</html>