<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>