<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 03/14/2017 02:37 PM, Michael
      Kuperstein wrote:<br>
    </div>
    <blockquote
cite="mid:CAL_y90kx38ryrpL_CTUTnBdvc=CwkkhDCiZJj9K=Tpr0n2xJZg@mail.gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div dir="ltr"><br>
        <div class="gmail_extra"><br>
          <div class="gmail_quote">On Tue, Mar 14, 2017 at 11:40 AM, Hal
            Finkel <span dir="ltr"><<a moz-do-not-send="true"
                href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000"><span class="">
                  <p><br>
                  </p>
                  <br>
                  <div class="m_-868374222628263648moz-cite-prefix">On
                    03/14/2017 11:58 AM, Michael Kuperstein wrote:<br>
                  </div>
                  <blockquote type="cite">
                    <div dir="ltr">
                      <div dir="auto">I'm still not sure about this, for
                        a few reasons:
                        <div dir="auto"><br>
                        </div>
                        <div dir="auto">1) I'd like to try to treat
                          epilogue loops the same way regardless of
                          whether the main loop was vectorized by hand
                          or automatically. So if someone hand-wrote an
                          avx-512 16-wide loop, with alias checks, and
                          we decide it's profitable to vectorize the
                          epilogue loop by 4 and re-use the checks, it
                          ought to be done the same way. I realize this
                          may be a pipe-dream, though.</div>
                      </div>
                    </div>
                  </blockquote>
                  <br>
                </span> I agree that sounds ideal. Identifying the
                effective vectorization factor of the hand-vectorized
                loop seems fragile. However, if someone is hand
                vectorizing then it seems like a small price to add a
                pragma to the scalar loop restricting the vectorization
                factor (and/or specifying that it is safe to execute).
                As a result, I'm not sure how much effort we should make
                here.<span class=""><br>
                  <br>
                </span></div>
            </blockquote>
            <div><br>
            </div>
            <div>I semi-agree with you, which is why I don't think it's
              a blocker. :-)</div>
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000"><span class="">
                  <blockquote type="cite">
                    <div dir="ltr">
                      <div dir="auto">
                        <div dir="auto"><br>
                        </div>
                        <div dir="auto">2) I'm still somewhat worried
                          about "tiny loops". As I wrote before, we
                          explicitly refuse to vectorize loops we know
                          have a trip-count less than 16, because our
                          profitability heuristic for such loops is
                          probably bad. IIUC the only reason we don't
                          bail due to the threshold is because we use
                          the same loop for "failed min iters check" and
                          "failed alias check". So, because it's
                          reachable through the alias-check path, the
                          max trip count isn't actually known, even
                          though the typical trip count is probably
                          small. </div>
                        <div dir="auto">It's true that you currently
                          don't try to vectorize the epilogue if the
                          original VF is below 16, but this is a
                          somewhat different condition. <br>
                        </div>
                      </div>
                    </div>
                  </blockquote>
                  <br>
                </span> I think that the reason we have that limit,
                however, is that we don't model the costs of the checks.
                Not that the cost model is otherwise too inaccurate for
                low-trip-count loops. If we modeled the costs of the
                checks, then I don't think this would be a problem.<span
                  class=""><br>
                  <br>
                </span></div>
            </blockquote>
            <div><br>
            </div>
            <div>I don't think it's just the alias checks. There's also
              the min-iteration check,</div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Yes, we'd need to model the cost of all of the checks (trip count,
    aliasing, overflow, etc.).<br>
    <br>
    <blockquote
cite="mid:CAL_y90kx38ryrpL_CTUTnBdvc=CwkkhDCiZJj9K=Tpr0n2xJZg@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div> broadcasts that get hoisted out of the loop, etc.</div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Can you elaborate? Do you mean that we're hoisting broadcasts
    outside of the trip-count check (i.e. speculatively executing them)
    and these are actually expensive operations? Is this is a cost-model
    problem being exposed by SimplifyCFG (which is hoisting these things
    outside of the trip-count check)?<br>
    <br>
     -Hal<br>
    <br>
    <blockquote
cite="mid:CAL_y90kx38ryrpL_CTUTnBdvc=CwkkhDCiZJj9K=Tpr0n2xJZg@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div> </div>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000"><span class="">
                  <blockquote type="cite">
                    <div dir="ltr">
                      <div dir="auto">
                        <div dir="auto"><br>
                        </div>
                        <div dir="auto">3) Technically speaking,
                          constructing a new InnerLoopVectorizer to
                          vectorize this one loop sounds weird. We
                          already have a worklist in the vectorizer
                          that's currently running.</div>
                      </div>
                    </div>
                  </blockquote>
                  <br>
                </span> I agree, although we do want to reuse the cost
                and legality analysis (which I think is a worthwhile
                engineering decision because that analysis involves
                SCEV, AA, and TTI, all of which can get expensive). If
                we can do that and also just add the new loop to the
                work queue, that certainly might be cleaner.<span
                  class="HOEnZb"><font color="#888888"><br>
                    <br>
                     -Hal</font></span>
                <div>
                  <div class="h5"><br>
                    <br>
                    <blockquote type="cite">
                      <div dir="ltr">
                        <div dir="auto">
                          <div dir="auto"><br>
                          </div>
                          <div dir="auto">I don't think (1) is a
                            blocker, and (3) should be easy to fix, but
                            I'm not sure whether the way this is going
                            to handle (2) is sufficient.  If I'm the
                            only one that this bothers, I won't stand in
                            the way, but I'd like to at least make sure
                            we've fully considered this.</div>
                        </div>
                        <div class="gmail_extra"><br>
                          <div class="gmail_quote">On Mar 14, 2017
                            06:00, "Nema, Ashutosh" <<a
                              moz-do-not-send="true"
                              href="mailto:Ashutosh.Nema@amd.com"
                              target="_blank">Ashutosh.Nema@amd.com</a>>
                            wrote:<br type="attribution">
                            <blockquote class="gmail_quote"
                              style="margin:0 0 0 .8ex;border-left:1px
                              #ccc solid;padding-left:1ex">
                              <div link="blue" vlink="purple"
                                lang="EN-US">
                                <div
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712WordSection1">
                                  <p class="MsoNormal">Summarizing the
                                    discussion on the implementation
                                    approaches.</p>
                                  <p class="MsoNormal"> </p>
                                  <p class="MsoNormal">Discussed about
                                    two approaches, first running
                                    ‘InnerLoopVectorizer’ again on the
                                    epilog loop immediately after
                                    vectorizing the original loop within
                                    the same vectorization pass, the
                                    second approach where re-running
                                    vectorization pass and limiting
                                    vectorization factor of epilog loop
                                    by metadata.</p>
                                  <p class="MsoNormal"> </p>
                                  <p class="MsoNormal"><Approach-2></p>
                                  <p class="MsoNormal">Challenges with
                                    re-running the vectorizer pass:</p>
                                  <p
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712MsoListParagraph"><span>1)<span
                                        style="font:7.0pt "Times
                                        New Roman"">      </span></span>Reusing
                                    alias check result: </p>
                                  <p
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712MsoListParagraph">When
                                    vectorizer pass runs again it finds
                                    the epilog loop as a new loop and it
                                    may generates alias check, this new
                                    alias check may overkill the gains
                                    of epilog vectorization.</p>
                                  <p
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712MsoListParagraph">We
                                    should use the already computed
                                    alias check result instead of re
                                    computing again.</p>
                                  <p
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712MsoListParagraph"><span>2)<span
                                        style="font:7.0pt "Times
                                        New Roman"">      </span></span>Rerun
                                    the vectorizer and hoist the new
                                    alias check:</p>
                                  <p
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712MsoListParagraph">It’s
                                    not possible to hoist alias checks
                                    as its not fully redundant (not
                                    dominated by other checks), it’s not
                                    getting execute in all paths.</p>
                                  <p class="MsoNormal"> </p>
                                  <p class="MsoNormal"><img
id="m_-868374222628263648m_-8565914691181255471m_2339803851957541712Picture_x0020_1"
src="cid:part3.D66367B9.CCAD39C0@anl.gov" height="156" width="567"></p>
                                  <p class="MsoNormal"> </p>
                                  <p class="MsoNormal">NOTE: We cannot
                                    prepone alias check as its expensive
                                    compared to other checks.</p>
                                  <p class="MsoNormal"> </p>
                                  <p class="MsoNormal"><Approach-1></p>
                                  <p
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712MsoListParagraph"><span>1)<span
                                        style="font:7.0pt "Times
                                        New Roman"">      </span></span>Current
                                    patch depends on the existing
                                    functionality of LoopVectorizer, it
                                    uses ‘InnerLoopVectorizer’ again to
                                    vectorize the epilog loop, as it
                                    happens in the same vectorization
                                    pass we have flexibility to reuse
                                    already computed alias result check
                                    & limit vectorization factor for
                                    the epilog loop. </p>
                                  <p
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712MsoListParagraph"><span>2)<span
                                        style="font:7.0pt "Times
                                        New Roman"">      </span></span>It
                                    does not generate the blocks for new
                                    block layout explicitly, rather it
                                    depends on
                                    ‘InnerLoopVectorizer::createEm<wbr>ptyLoop’
                                    to generate new block layout. The
                                    new block layout get automatically
                                    generated by calling the
                                    ‘InnerLoopVectorizer:: vectorize’
                                    again.</p>
                                  <p
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712MsoListParagraph"><span>3)<span
                                        style="font:7.0pt "Times
                                        New Roman"">      </span></span>Block
                                    layout description with epilog loop
                                    vectorization is available at</p>
                                  <p
class="m_-868374222628263648m_-8565914691181255471m_2339803851957541712MsoListParagraph"><a
                                      moz-do-not-send="true"
href="https://reviews.llvm.org/file/data/fxg5vx3capyj257rrn5j/PHID-FILE-x6thnbf6ub55ep5yhalu/LayoutDescription.png"
                                      target="_blank">https://reviews.llvm.org/file/<wbr>data/fxg5vx3capyj257rrn5j/PHID<wbr>-FILE-x6thnbf6ub55ep5yhalu/Lay<wbr>outDescription.png</a></p>
                                  <p class="MsoNormal"> </p>
                                  <p class="MsoNormal">Approach-1 looks
                                    feasible, please comment if any
                                    objections.</p>
                                  <p class="MsoNormal"> </p>
                                  <p class="MsoNormal">Regards,</p>
                                  <p class="MsoNormal">Ashutosh</p>
                                  <p class="MsoNormal"> </p>
                                  <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
                                  <div>
                                    <div
                                      style="border:none;border-top:solid
                                      #e1e1e1 1.0pt;padding:3.0pt 0in
                                      0in 0in">
                                      <p class="MsoNormal"
                                        style="margin-left:.5in"><b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif">
                                          Nema, Ashutosh <br>
                                          <b>Sent:</b> Wednesday, March
                                          1, 2017 10:42 AM<br>
                                          <b>To:</b> 'Daniel Berlin'
                                          <<a moz-do-not-send="true"
href="mailto:dberlin@dberlin.org" target="_blank">dberlin@dberlin.org</a>><br>
                                          <b>Cc:</b> <a
                                            moz-do-not-send="true"
                                            href="mailto:anemet@apple.com"
                                            target="_blank">anemet@apple.com</a>;
                                          Hal Finkel <<a
                                            moz-do-not-send="true"
                                            href="mailto:hfinkel@anl.gov"
                                            target="_blank">hfinkel@anl.gov</a>>;
                                          Zaks, Ayal <<a
                                            moz-do-not-send="true"
                                            href="mailto:ayal.zaks@intel.com"
                                            target="_blank">ayal.zaks@intel.com</a>>;
                                          Renato Golin <<a
                                            moz-do-not-send="true"
                                            href="mailto:renato.golin@linaro.org"
                                            target="_blank">renato.golin@linaro.org</a>>;
                                          <a moz-do-not-send="true"
                                            href="mailto:mkuper@google.com"
                                            target="_blank">mkuper@google.com</a>;
                                          Mehdi Amini <<a
                                            moz-do-not-send="true"
                                            href="mailto:mehdi.amini@apple.com"
                                            target="_blank">mehdi.amini@apple.com</a>>;
                                          llvm-dev <<a
                                            moz-do-not-send="true"
                                            href="mailto:llvm-dev@lists.llvm.org"
                                            target="_blank">llvm-dev@lists.llvm.org</a>><br>
                                          <b>Subject:</b> RE: [llvm-dev]
                                          [Proposal][RFC] Epilog loop
                                          vectorization</span></p>
                                    </div>
                                  </div>
                                  <p class="MsoNormal"
                                    style="margin-left:.5in"> </p>
                                  <p class="MsoNormal"
                                    style="margin-left:.5in"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Sorry
                                      I misunderstood,
                                      gvn/newgvn/gvnhoist cannot help
                                      here as these checks are not
                                      dominated by all paths.</span></p>
                                  <p class="MsoNormal"
                                    style="margin-left:.5in"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
                                  <p class="MsoNormal"
                                    style="margin-left:.5in"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Regards,</span></p>
                                  <p class="MsoNormal"
                                    style="margin-left:.5in"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Ashutosh</span></p>
                                  <p class="MsoNormal"
                                    style="margin-left:.5in"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
                                  <p class="MsoNormal"
                                    style="margin-left:1.0in"><b><span
                                        style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif">
                                      Daniel Berlin [<a
                                        moz-do-not-send="true"
                                        href="mailto:dberlin@dberlin.org"
                                        target="_blank">mailto:dberlin@dberlin.org</a>]
                                      <br>
                                      <b>Sent:</b> Tuesday, February 28,
                                      2017 6:58 PM<br>
                                      <b>To:</b> Nema, Ashutosh <<a
                                        moz-do-not-send="true"
                                        href="mailto:Ashutosh.Nema@amd.com"
                                        target="_blank">Ashutosh.Nema@amd.com</a>><br>
                                      <b>Cc:</b> <a
                                        moz-do-not-send="true"
                                        href="mailto:anemet@apple.com"
                                        target="_blank">anemet@apple.com</a>;
                                      Hal Finkel <<a
                                        moz-do-not-send="true"
                                        href="mailto:hfinkel@anl.gov"
                                        target="_blank">hfinkel@anl.gov</a>>;
                                      Zaks, Ayal <<a
                                        moz-do-not-send="true"
                                        href="mailto:ayal.zaks@intel.com"
                                        target="_blank">ayal.zaks@intel.com</a>>;
                                      Renato Golin <<a
                                        moz-do-not-send="true"
                                        href="mailto:renato.golin@linaro.org"
                                        target="_blank">renato.golin@linaro.org</a>>;
                                      <a moz-do-not-send="true"
                                        href="mailto:mkuper@google.com"
                                        target="_blank">mkuper@google.com</a>;
                                      Mehdi Amini <<a
                                        moz-do-not-send="true"
                                        href="mailto:mehdi.amini@apple.com"
                                        target="_blank">mehdi.amini@apple.com</a>>;
                                      llvm-dev <<a
                                        moz-do-not-send="true"
                                        href="mailto:llvm-dev@lists.llvm.org"
                                        target="_blank">llvm-dev@lists.llvm.org</a>><br>
                                      <b>Subject:</b> Re: [llvm-dev]
                                      [Proposal][RFC] Epilog loop
                                      vectorization</span></p>
                                  <p class="MsoNormal"
                                    style="margin-left:1.0in"> </p>
                                  <div>
                                    <p class="MsoNormal"
                                      style="margin-left:1.0in">Hoisting
                                      or removing?<br>
                                      Neither pass does hoisting, you'd
                                      need gvnhoist for that.</p>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in"> </p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in">Even
                                        then:<br>
                                        Staring at your example, none of
                                        the checks are fully redundant
                                         (IE they are not dominated by
                                        other checks) or execute on all
                                        paths.</p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in"> </p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in">Thus,
                                        hoisting them  would be purely
                                        speculative code motion, which
                                        none of our passes do.</p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in"> </p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in">If you
                                        would like these sets of checks
                                        to be removed, you would need to
                                        place them in a place that they
                                        execute unconditionally.</p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in"> </p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in">Otherwise,
                                        this is not a standard code
                                        hoisting/removal transform.</p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in"> </p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in">The
                                        only redundancy i can see here
                                        at all is the repeated
                                        getelementptr computation.</p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in">If you
                                        move it to the preheader, it
                                        will be eliminated.</p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in">Otherwise,
                                        none of the checks are
                                        redundant.</p>
                                    </div>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in"><br>
                                        What would you hope to happen in
                                        this case?</p>
                                    </div>
                                  </div>
                                  <div>
                                    <p class="MsoNormal"
                                      style="margin-left:1.0in"> </p>
                                    <div>
                                      <p class="MsoNormal"
                                        style="margin-left:1.0in">On
                                        Tue, Feb 28, 2017 at 5:09 AM,
                                        Nema, Ashutosh <<a
                                          moz-do-not-send="true"
                                          href="mailto:Ashutosh.Nema@amd.com"
                                          target="_blank">Ashutosh.Nema@amd.com</a>>
                                        wrote:</p>
                                      <blockquote
                                        style="border:none;border-left:solid
                                        #cccccc 1.0pt;padding:0in 0in
                                        0in
6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
                                        <div>
                                          <div>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">I
                                                have tried running both
                                                gvn and newgvn but it
                                                did not helped in
                                                hoisting the alias
                                                checks:</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Please
                                                check, maybe I have
                                                missed something.</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><TestCase></span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">void
                                                foo (char *A, char *B,
                                                char *C, int len) {</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> 
                                                int i = 0;</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> 
                                                for (i=0 ; i< len;
                                                i++)</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">   
                                                A[i] = B[i] + C[i];</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">}</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"><Command></span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> 
                                                $ opt –O3 –gvn test.ll
                                                –o test.opt.ll</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> 
                                                $ opt –O3 –newgvn
                                                test.ll –o test.opt.ll</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">“test.ll”
                                                is attached, it got
                                                already vectorized by
                                                the approach running
                                                vectorizer twice by
                                                annotate the remainder
                                                loop with metadata to
                                                limit the vectorization
                                                factor for epilog vector
                                                loop.</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Regards,</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Ashutosh</span></p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.0in">
                                              <span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
                                            <div>
                                              <div
                                                style="border:none;border-top:solid
                                                #e1e1e1
                                                1.0pt;padding:3.0pt 0in
                                                0in 0in">
                                                <p class="MsoNormal"
                                                  style="margin-left:1.5in">
                                                  <b><span
                                                      style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif"> <a
moz-do-not-send="true" href="mailto:anemet@apple.com" target="_blank">anemet@apple.com</a>
                                                    [mailto:<a
                                                      moz-do-not-send="true"
href="mailto:anemet@apple.com" target="_blank">anemet@apple.com</a>] <br>
                                                    <b>Sent:</b>
                                                    Tuesday, February
                                                    28, 2017 1:33 AM<br>
                                                    <b>To:</b> Hal
                                                    Finkel <<a
                                                      moz-do-not-send="true"
href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>><br>
                                                    <b>Cc:</b> Daniel
                                                    Berlin <<a
                                                      moz-do-not-send="true"
href="mailto:dberlin@dberlin.org" target="_blank">dberlin@dberlin.org</a>>;
                                                    Nema, Ashutosh <<a
moz-do-not-send="true" href="mailto:Ashutosh.Nema@amd.com"
                                                      target="_blank">Ashutosh.Nema@amd.com</a>>;
                                                    Zaks, Ayal <<a
                                                      moz-do-not-send="true"
href="mailto:ayal.zaks@intel.com" target="_blank">ayal.zaks@intel.com</a>>;
                                                    Renato Golin <<a
moz-do-not-send="true" href="mailto:renato.golin@linaro.org"
                                                      target="_blank">renato.golin@linaro.org</a>>;
                                                    <a
                                                      moz-do-not-send="true"
href="mailto:mkuper@google.com" target="_blank">mkuper@google.com</a>;
                                                    Mehdi Amini <<a
                                                      moz-do-not-send="true"
href="mailto:mehdi.amini@apple.com" target="_blank">mehdi.amini@apple.com</a>>;
                                                    llvm-dev <<a
                                                      moz-do-not-send="true"
href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
                                                    <b>Subject:</b> Re:
                                                    [llvm-dev]
                                                    [Proposal][RFC]
                                                    Epilog loop
                                                    vectorization</span></p>
                                              </div>
                                            </div>
                                            <p class="MsoNormal"
                                              style="margin-left:1.5in">
                                               </p>
                                            <p class="MsoNormal"
                                              style="margin-left:1.5in">
                                               </p>
                                            <div>
                                              <blockquote
                                                style="margin-top:5.0pt;margin-bottom:5.0pt">
                                                <div>
                                                  <p class="MsoNormal"
                                                    style="margin-left:1.5in">
                                                    On Feb 27, 2017, at
                                                    12:01 PM, Hal Finkel
                                                    <<a
                                                      moz-do-not-send="true"
href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>>
                                                    wrote:</p>
                                                </div>
                                                <div>
                                                  <div>
                                                    <p class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                    <div>
                                                      <div>
                                                        <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                        <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> On 02/27/2017 01:47 PM, Daniel Berlin wrote:</p>
                                                        </div>
                                                        <blockquote
                                                          style="margin-top:5.0pt;margin-bottom:5.0pt">
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> On Mon, Feb 27, 2017 at 11:29 AM, Adam Nemet
                                                          <<a
                                                          moz-do-not-send="true"
href="mailto:anemet@apple.com" target="_blank">anemet@apple.com</a>>
                                                          wrote:</p>
                                                          <blockquote
                                                          style="border:none;border-left:solid
                                                          #cccccc
                                                          1.0pt;padding:0in
                                                          0in 0in
6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <div>
                                                          <div>
                                                          <blockquote
                                                          style="margin-top:5.0pt;margin-bottom:5.0pt">
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> On Feb 27, 2017, at 10:11 AM, Hal Finkel <<a
moz-do-not-send="true" href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>>
                                                          wrote:</p>
                                                          </div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> On 02/27/2017 11:47 AM, Adam Nemet wrote:</p>
                                                          </div>
                                                          <blockquote
                                                          style="margin-top:5.0pt;margin-bottom:5.0pt">
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <blockquote
                                                          style="margin-top:5.0pt;margin-bottom:5.0pt">
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> On Feb 27, 2017, at 9:39 AM, Daniel Berlin
                                                          <<a
                                                          moz-do-not-send="true"
href="mailto:dberlin@dberlin.org" target="_blank">dberlin@dberlin.org</a>>
                                                          wrote:</p>
                                                          </div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> On Mon, Feb 27, 2017 at 9:29 AM, Adam Nemet
                                                          <<a
                                                          moz-do-not-send="true"
href="mailto:anemet@apple.com" target="_blank">anemet@apple.com</a>>
                                                          wrote:</p>
                                                          <blockquote
                                                          style="border:none;border-left:solid
                                                          #cccccc
                                                          1.0pt;padding:0in
                                                          0in 0in
6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <blockquote
                                                          style="margin-top:5.0pt;margin-bottom:5.0pt">
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> On Feb 27, 2017, at 7:27 AM, Hal Finkel <<a
moz-do-not-send="true" href="mailto:hfinkel@anl.gov" target="_blank">hfinkel@anl.gov</a>>
                                                          wrote:</p>
                                                          </div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          <div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in;background:white"> <span
                                                          style="font-size:7.5pt;font-family:"Helvetica",sans-serif"><br>
                                                          On 02/27/2017
                                                          06:29 AM,
                                                          Nema, Ashutosh
                                                          wrote:</span></p>
                                                          </div>
                                                          <blockquote
style="margin-top:5.0pt;margin-bottom:5.0pt;font-variant-caps:normal;text-align:start;word-spacing:0px">
                                                          <div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in;background:white"> <span
                                                          style="font-size:7.5pt;font-family:"Helvetica",sans-serif">Thanks
                                                          for looking
                                                          into this.</span></p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in;background:white"> <span
                                                          style="font-size:7.5pt;font-family:"Helvetica",sans-serif"> </span></p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in;background:white"> <span
                                                          style="font-size:7.5pt;font-family:"Helvetica",sans-serif">1)
                                                          Issues with re
                                                          running
                                                          vectorizer:</span></p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in;background:white"> <span
                                                          style="font-size:7.5pt;font-family:"Helvetica",sans-serif">Vectorizer
                                                          might generate
                                                          redundant
                                                          alias checks
                                                          while
                                                          vectorizing
                                                          epilog loop.</span></p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in;background:white"> <span
                                                          style="font-size:7.5pt;font-family:"Helvetica",sans-serif">Redundant
                                                          alias checks
                                                          are expensive,
                                                          we like to
                                                          reuse the
                                                          results of
                                                          already
                                                          computed alias
                                                          checks.</span></p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in;background:white"> <span
                                                          style="font-size:7.5pt;font-family:"Helvetica",sans-serif">With
                                                          metadata we
                                                          can limit the
                                                          width of
                                                          epilog loop,
                                                          but not sure
                                                          about reusing
                                                          alias check
                                                          result.</span></p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in;background:white"> <span
                                                          style="font-size:7.5pt;font-family:"Helvetica",sans-serif">Any
                                                          thoughts on
                                                          rerunning
                                                          vectorizer
                                                          with reusing
                                                          the alias
                                                          check result ?</span></p>
                                                          </div>
                                                          </div>
                                                          </blockquote>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> <span
                                                          style="font-size:7.5pt;font-family:"Helvetica",sans-serif"><br>
                                                          <span
                                                          style="background:white">One
                                                          way of looking
                                                          at this is:
                                                          Reusing the
                                                          alias-check
                                                          result is
                                                          really just a
                                                          conditional
                                                          propagation
                                                          problem; if we
                                                          don't already
                                                          have an
                                                          optimization
                                                          that can
                                                          combine these
                                                          after the
                                                          fact, then we
                                                          should.</span></span></p>
                                                          </div>
                                                          </blockquote>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> +Danny</p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> Isn’t Extended SSA supposed to help with
                                                          this?</p>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </blockquote>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> Yes, it will solve this with no issue
                                                          already.  GVN
                                                          probably does
                                                          already too.</p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> even if if you have</p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> if (a == b)</p>
                                                          </div>
                                                          <div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> if (a == c)</p>
                                                          </div>
                                                          </div>
                                                          <div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  if (a == d)</p>
                                                          </div>
                                                          </div>
                                                          <div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  if (a == e)</p>
                                                          </div>
                                                          </div>
                                                          <div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  if (a == g)</p>
                                                          </div>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> and  we can prove a ... g equivalent, newgvn
                                                          will eliminate
                                                          them all and
                                                          set all the
                                                          branches true.</p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> If you need a simpler clean up pass, we could
                                                          run it on
                                                          sub-graphs.</p>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </blockquote>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> Yes we probably don’t want to run a full GVN
                                                          after the
                                                          “loop-scheduling”
                                                          passes.</p>
                                                          </div>
                                                          </div>
                                                          </blockquote>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> <br>
                                                          FWIW, we
                                                          could, just
                                                          without the
                                                          memory-dependence
                                                          analysis
                                                          enabled (i.e.
                                                          set the
                                                          NoLoads
                                                          constructor
                                                          parameter to
                                                          true). GVN is
                                                          pretty fast in
                                                          that mode.</p>
                                                          </div>
                                                          </div>
                                                          </blockquote>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> OK.  Another data point is that I’ve seen
                                                          cases in the
                                                          past where the
                                                          alias checks
                                                          required for
                                                          the loop
                                                          passes could
                                                          enable GVN to
                                                          remove
                                                          redundant
                                                          loads/stores. 
                                                          Currently we
                                                          can only pick
                                                          these up with
                                                          LTO when GVN
                                                          is rerun.</p>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </blockquote>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> This is just GVN brokenness, newgvn should
                                                          not have this
                                                          problem.</p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> If it does, i'd love to see it.</p>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                        </blockquote>
                                                        <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> <br>
                                                          I thought that
                                                          the problem is
                                                          that we just
                                                          don't run GVN
                                                          after that
                                                          point in the
                                                          pipeline.</p>
                                                      </div>
                                                    </div>
                                                  </div>
                                                </div>
                                              </blockquote>
                                              <div>
                                                <div>
                                                  <div>
                                                    <p class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                  </div>
                                                  <div>
                                                    <p class="MsoNormal"
style="margin-left:1.5in"> Yeah, that is the problem but I think Danny
                                                      misunderstood what
                                                      I was trying to
                                                      say.</p>
                                                  </div>
                                                  <div>
                                                    <p class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                  </div>
                                                  <div>
                                                    <p class="MsoNormal"
style="margin-left:1.5in"> This was a datapoint to possibly rerun GVN
                                                      with
                                                      memory-awareness.</p>
                                                  </div>
                                                  <p class="MsoNormal"
                                                    style="margin-bottom:12.0pt;margin-left:1.5in">
                                                     </p>
                                                  <blockquote
                                                    style="margin-top:5.0pt;margin-bottom:5.0pt">
                                                    <div>
                                                      <div>
                                                        <p
                                                          class="MsoNormal"
style="margin-bottom:12.0pt;margin-left:1.5in"> <br>
                                                           -Hal</p>
                                                        <blockquote
                                                          style="margin-top:5.0pt;margin-bottom:5.0pt">
                                                          <div>
                                                          <div>
                                                          <div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in"> (I'm working on the last few parts of turning
                                                          it on by
                                                          default, but
                                                          it requires a
                                                          new
                                                          getModRefInfo
                                                          interface to
                                                          be able to get
                                                          the last few
                                                          testcases)</p>
                                                          </div>
                                                          <div>
                                                          <p
                                                          class="MsoNormal"
style="margin-left:1.5in">  </p>
                                                          </div>
                                                          </div>
                                                          </div>
                                                          </div>
                                                        </blockquote>
                                                        <p
                                                          class="MsoNormal"
style="margin-bottom:12.0pt;margin-left:1.5in">  </p>
                                                        <pre style="margin-left:1.5in">-- </pre>
                                                        <pre style="margin-left:1.5in">Hal Finkel</pre>
                                                        <pre style="margin-left:1.5in">Lead, Compiler Technology and Programming Languages</pre>
                                                        <pre style="margin-left:1.5in">Leadership Computing Facility</pre>
                                                        <pre style="margin-left:1.5in">Argonne National Laboratory</pre>
                                                      </div>
                                                    </div>
                                                  </blockquote>
                                                </div>
                                              </div>
                                            </div>
                                            <p class="MsoNormal"
                                              style="margin-left:1.5in">
                                               </p>
                                          </div>
                                        </div>
                                      </blockquote>
                                    </div>
                                    <p class="MsoNormal"
                                      style="margin-left:1.0in"> </p>
                                  </div>
                                </div>
                              </div>
                            </blockquote>
                          </div>
                        </div>
                      </div>
                    </blockquote>
                    <br>
                    <pre class="m_-868374222628263648moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
                  </div>
                </div>
              </div>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </body>
</html>