<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 02/27/2017 04:19 PM, Zaks, Ayal
      wrote:<br>
    </div>
    <blockquote
cite="mid:F94EFB4222EBC045B95E403612539C824CAA213E@HASMSX106.ger.corp.intel.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.m6905833519341383885gmail-
        {mso-style-name:m_6905833519341383885gmail-;}
span.hoenzb
        {mso-style-name:hoenzb;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
      <div class="WordSection1">
        <p class="MsoNormal" style="margin-left:36.0pt">On 02/27/2017
          12:41 PM, Michael Kuperstein wrote:<o:p></o:p></p>
        <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
          <div>
            <p class="MsoNormal" style="margin-left:36.0pt">There's
              another issue with re-running the vectorizer (which I
              support, btw - I'm just saying there are more problems to
              solve on the way :-) )
              <o:p></o:p></p>
            <div>
              <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
              <div>
                <p class="MsoNormal" style="margin-left:36.0pt">Historically,
                  we haven't even tried to evaluate the cost of the
                  "constant" (not per-iteration) vectorization overhead
                  - things like alias checks. Instead, we have hard
                  bounds - we won't perform alias checks that are "too
                  expensive", and, more importantly, we don't even try
                  to vectorize loops with known low iteration counts.
                  The bound right now is 16, IIRC. That means we don't
                  have a good way to evaluate whether vectorizing a loop
                  with a low iteration count is profitable or not.<o:p></o:p></p>
              </div>
            </div>
          </div>
        </blockquote>
        <p class="MsoNormal" style="margin-left:36.0pt"><br>
          We should really improve this as well.<br>
          <br>
          <span style="color:#1F497D"><o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">@Michael:
            OTOH, we should reach the same decision again (i.e., that of
            performing the alias checks) when encountering the remainder
            loop as we did with the original loop, given that hard
            bounds are used ;-).<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">But
            agreed, it is better to evaluate the cost of these bounds
            along with the overall estimated cost instead.<o:p></o:p></span></p>
        <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
          <div>
            <div>
              <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
            </div>
            <div>
              <p class="MsoNormal" style="margin-left:36.0pt">This also
                makes me wary of the "we can clean up redundant alias
                checks later" approach. When trying to decide whether to
                vectorize by 4 a loop that has no more than 8 iterations
                (because we just vectorized by 8 and it's the remainder
                loop), we really want to know if the alias checks we're
                introducing are going to survive a not.<o:p></o:p></p>
            </div>
          </div>
        </blockquote>
        <p class="MsoNormal" style="margin-left:36.0pt"><br>
          It occurs to me that, if SCEV's known-predicate logic were
          smart enough, it would seem practical to not introduce
          redundant checks in the first place (although it would imply
          some gymnastics when examining the control flow around the
          loop and then restructuring things when we generate the code
          for the loop).<br>
          <br>
          <span style="color:#1F497D"><o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">The
            scalar remainder loop, when reached from the vectorized
            loop, is already known to be vectorizable to a VF larger
            than EpilogVF.</span></p>
      </div>
    </blockquote>
    <br>
    I was not under the impression we had a remainder loop separate from
    the loop used for scalar computation. Don't we use the same loop in
    cases where the vectorization is not legal?<br>
    <br>
     -Hal<br>
    <br>
    <blockquote
cite="mid:F94EFB4222EBC045B95E403612539C824CAA213E@HASMSX106.ger.corp.intel.com"
      type="cite">
      <div class="WordSection1">
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">
            No need to introduce again any potential aliasing, wrapping
            or whatnot checks, even if this redundancy can later be
            eliminated, if instead this vectorizability property could
            be recorded somehow. Similar to having annotated the
            remainder loop with “#pragma clang loop
            vectorize(assume_safety)”, except that this vectorizability
            property does not hold when reaching the remainder loop
            along the other path – that which fails these checks for the
            main loop...<o:p></o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Ayal.<o:p></o:p></span></p>
        <p class="MsoNormal" style="margin-left:36.0pt"><br>
           -Hal<br>
          <br>
          <br>
          <o:p></o:p></p>
        <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
          <div>
            <div>
              <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
            </div>
            <div>
              <p class="MsoNormal" style="margin-left:36.0pt">Michael<o:p></o:p></p>
            </div>
          </div>
          <div>
            <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
            <div>
              <p class="MsoNormal" style="margin-left:36.0pt">On Mon,
                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:<o:p></o:p></p>
              <blockquote style="border:none;border-left:solid #CCCCCC
                1.0pt;padding:0cm 0cm 0cm
                6.0pt;margin-left:4.8pt;margin-right:0cm">
                <div>
                  <p style="margin-left:36.0pt"><o:p> </o:p></p>
                  <div>
                    <p class="MsoNormal" style="margin-left:36.0pt">On
                      02/27/2017 11:47 AM, Adam Nemet wrote:<o:p></o:p></p>
                  </div>
                  <blockquote
                    style="margin-top:5.0pt;margin-bottom:5.0pt">
                    <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
                    <div>
                      <blockquote
                        style="margin-top:5.0pt;margin-bottom:5.0pt">
                        <div>
                          <p class="MsoNormal"
                            style="margin-left:36.0pt">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:<o:p></o:p></p>
                        </div>
                        <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
                        <div>
                          <div>
                            <p class="MsoNormal"
                              style="margin-left:36.0pt"><o:p> </o:p></p>
                            <div>
                              <p class="MsoNormal"
                                style="margin-left:36.0pt"><o:p> </o:p></p>
                              <div>
                                <p class="MsoNormal"
                                  style="margin-left:36.0pt">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:<o:p></o:p></p>
                                <blockquote
                                  style="border:none;border-left:solid
                                  #CCCCCC 1.0pt;padding:0cm 0cm 0cm
                                  6.0pt;margin-left:4.8pt;margin-right:0cm">
                                  <div>
                                    <p class="MsoNormal"
                                      style="margin-left:36.0pt"><o:p> </o:p></p>
                                    <div>
                                      <blockquote
                                        style="margin-top:5.0pt;margin-bottom:5.0pt">
                                        <div>
                                          <p class="MsoNormal"
                                            style="margin-left:36.0pt">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:<o:p></o:p></p>
                                        </div>
                                        <p class="MsoNormal"
                                          style="margin-left:36.0pt"><o:p> </o:p></p>
                                        <div>
                                          <div>
                                            <p class="MsoNormal"
                                              style="margin-left:36.0pt;background:white"><span
style="font-size:7.5pt;font-family:"Helvetica",sans-serif"><br>
                                                On 02/27/2017 06:29 AM,
                                                Nema, Ashutosh wrote:<o:p></o:p></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:36.0pt;background:white"><span
style="font-size:7.5pt;font-family:"Helvetica",sans-serif">Thanks
                                                    for looking into
                                                    this.<o:p></o:p></span></p>
                                              </div>
                                              <div>
                                                <p class="MsoNormal"
                                                  style="margin-left:36.0pt;background:white"><span
style="font-size:7.5pt;font-family:"Helvetica",sans-serif"> <o:p></o:p></span></p>
                                              </div>
                                              <div>
                                                <p class="MsoNormal"
                                                  style="margin-left:36.0pt;background:white"><span
style="font-size:7.5pt;font-family:"Helvetica",sans-serif">1)
                                                    Issues with re
                                                    running vectorizer:<o:p></o:p></span></p>
                                              </div>
                                              <div>
                                                <p class="MsoNormal"
                                                  style="margin-left:36.0pt;background:white"><span
style="font-size:7.5pt;font-family:"Helvetica",sans-serif">Vectorizer
                                                    might generate
                                                    redundant alias
                                                    checks while
                                                    vectorizing epilog
                                                    loop.<o:p></o:p></span></p>
                                              </div>
                                              <div>
                                                <p class="MsoNormal"
                                                  style="margin-left:36.0pt;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.<o:p></o:p></span></p>
                                              </div>
                                              <div>
                                                <p class="MsoNormal"
                                                  style="margin-left:36.0pt;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.<o:p></o:p></span></p>
                                              </div>
                                              <div>
                                                <p class="MsoNormal"
                                                  style="margin-left:36.0pt;background:white"><span
style="font-size:7.5pt;font-family:"Helvetica",sans-serif">Any
                                                    thoughts on
                                                    rerunning vectorizer
                                                    with reusing the
                                                    alias check result ?<o:p></o:p></span></p>
                                              </div>
                                            </div>
                                          </blockquote>
                                          <p class="MsoNormal"
                                            style="margin-left:36.0pt"><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><o:p></o:p></p>
                                        </div>
                                      </blockquote>
                                      <div>
                                        <p class="MsoNormal"
                                          style="margin-left:36.0pt"><o:p> </o:p></p>
                                      </div>
                                      <div>
                                        <p class="MsoNormal"
                                          style="margin-left:36.0pt">+Danny<o:p></o:p></p>
                                      </div>
                                      <div>
                                        <p class="MsoNormal"
                                          style="margin-left:36.0pt"><o:p> </o:p></p>
                                      </div>
                                      <div>
                                        <p class="MsoNormal"
                                          style="margin-left:36.0pt">Isn’t
                                          Extended SSA supposed to help
                                          with this?<o:p></o:p></p>
                                      </div>
                                    </div>
                                  </div>
                                </blockquote>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt"><o:p> </o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt">Yes, it
                                    will solve this with no issue
                                    already.  GVN probably does already
                                    too.<o:p></o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt"><o:p> </o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt">even if
                                    if you have<o:p></o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt"><o:p> </o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt">if (a ==
                                    b)<o:p></o:p></p>
                                </div>
                                <div>
                                  <div>
                                    <p class="MsoNormal"
                                      style="margin-left:36.0pt">if (a
                                      == c)<o:p></o:p></p>
                                  </div>
                                </div>
                                <div>
                                  <div>
                                    <p class="MsoNormal"
                                      style="margin-left:36.0pt"> if (a
                                      == d)<o:p></o:p></p>
                                  </div>
                                </div>
                                <div>
                                  <div>
                                    <p class="MsoNormal"
                                      style="margin-left:36.0pt"> if (a
                                      == e)<o:p></o:p></p>
                                  </div>
                                </div>
                                <div>
                                  <div>
                                    <p class="MsoNormal"
                                      style="margin-left:36.0pt"> if (a
                                      == g)<o:p></o:p></p>
                                  </div>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt"><o:p> </o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt"><o:p> </o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt">and  we
                                    can prove a ... g equivalent, newgvn
                                    will eliminate them all and set all
                                    the branches true.<o:p></o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt"><o:p> </o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt">If you
                                    need a simpler clean up pass, we
                                    could run it on sub-graphs.<o:p></o:p></p>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </blockquote>
                      <div>
                        <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
                      </div>
                      <div>
                        <p class="MsoNormal" style="margin-left:36.0pt">Yes
                          we probably don’t want to run a full GVN after
                          the “loop-scheduling” passes.<o:p></o:p></p>
                      </div>
                    </div>
                  </blockquote>
                  <p class="MsoNormal" style="margin-left:36.0pt"><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.<span
                      style="color:#888888"><br>
                      <br>
                      <span class="hoenzb"> -Hal</span></span><br>
                    <br>
                    <br>
                    <o:p></o:p></p>
                  <blockquote
                    style="margin-top:5.0pt;margin-bottom:5.0pt">
                    <div>
                      <div>
                        <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
                      </div>
                      <div>
                        <p class="MsoNormal" style="margin-left:36.0pt">I
                          guess the pipeline to experiment with for now
                          is opt -loop-vectorize -loop-vectorize
                          -newgvn.<o:p></o:p></p>
                      </div>
                      <div>
                        <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
                      </div>
                      <div>
                        <p class="MsoNormal" style="margin-left:36.0pt">Adam<o:p></o:p></p>
                      </div>
                      <p class="MsoNormal" style="margin-left:36.0pt"><br>
                        <br>
                        <o:p></o:p></p>
                      <blockquote
                        style="margin-top:5.0pt;margin-bottom:5.0pt">
                        <div>
                          <div>
                            <div>
                              <div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt">The only
                                    thing you'd have to do is write some
                                    code to set "live on entry" subgraph
                                    variables in their own congruence
                                    classes.<o:p></o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt">We
                                    already do this for incoming
                                    arguments.<o:p></o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt"><o:p> </o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt">Otherwise,
                                    it's trivial to make it only walk
                                    things in the subgraph.<o:p></o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt"><o:p> </o:p></p>
                                </div>
                                <div>
                                  <p class="MsoNormal"
                                    style="margin-left:36.0pt"><o:p> </o:p></p>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </blockquote>
                    </div>
                    <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
                  </blockquote>
                  <p class="MsoNormal" style="margin-left:36.0pt"><br>
                    <br>
                    <o:p></o:p></p>
                  <pre style="margin-left:36.0pt">-- <o:p></o:p></pre>
                  <pre style="margin-left:36.0pt">Hal Finkel<o:p></o:p></pre>
                  <pre style="margin-left:36.0pt">Lead, Compiler Technology and Programming Languages<o:p></o:p></pre>
                  <pre style="margin-left:36.0pt">Leadership Computing Facility<o:p></o:p></pre>
                  <pre style="margin-left:36.0pt">Argonne National Laboratory<o:p></o:p></pre>
                </div>
              </blockquote>
            </div>
            <p class="MsoNormal" style="margin-left:36.0pt"><o:p> </o:p></p>
          </div>
        </blockquote>
        <p class="MsoNormal" style="margin-left:36.0pt"><br>
          <br>
          <o:p></o:p></p>
        <pre style="margin-left:36.0pt">-- <o:p></o:p></pre>
        <pre style="margin-left:36.0pt">Hal Finkel<o:p></o:p></pre>
        <pre style="margin-left:36.0pt">Lead, Compiler Technology and Programming Languages<o:p></o:p></pre>
        <pre style="margin-left:36.0pt">Leadership Computing Facility<o:p></o:p></pre>
        <pre style="margin-left:36.0pt">Argonne National Laboratory<o:p></o:p></pre>
      </div>
      <p>---------------------------------------------------------------------<br>
        Intel Israel (74) Limited</p>
      <p>This e-mail and any attachments may contain confidential
        material for<br>
        the sole use of the intended recipient(s). Any review or
        distribution<br>
        by others is strictly prohibited. If you are not the intended<br>
        recipient, please contact the sender and delete all copies.</p>
    </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>