<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 01/14/2017 05:21 PM, Daniel Berlin
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAF4BwTXvrfWxiG0QQfPrT5z_E0cF8obWOwK7_2bzeXWWjmYDJw@mail.gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div dir="ltr">
        <div><br>
        </div>
        <div>In any case, if you want to play with it, it's here:</div>
        <div><a moz-do-not-send="true"
href="https://github.com/dberlin/llvm-gvn-rewrite/tree/newgvn-predicateinfo">https://github.com/dberlin/llvm-gvn-rewrite/tree/newgvn-predicateinfo</a><br>
        </div>
        <div><br>
        </div>
        <div>-print-predicateinfo -analyze will give you info.</div>
        <div><br>
        </div>
        <div>-newgvn will process simple equality and inequality right
          now using that info[1]</div>
        <div><br>
        </div>
        <div>This  is pretty much as cheap as you can make it.<br>
        </div>
        <div>We compute it in O(number of uses of comparison operations
          that are used in terminators) worst case time.  </div>
        <div>So it's not even O(number of instructions) unless your
          program is only comparisons and branches :P<br>
        </div>
        <div><br>
        </div>
        <div>This includes pruning - it will not insert predicate info
          copies except where they are actually used on a branch.</div>
        <div><br>
        </div>
        <div>(the same O(uses) algorithm works for general SSA renaming
          as well)</div>
        <div><br>
        </div>
        <div>Adding assume support would just require coming up with a
          copy operation, and doing local numbering in the assume blocks
          only (so we get def vs use order right in that block).</div>
      </div>
    </blockquote>
    <br>
    Looks good, thanks! The code you have in
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    PredicateInfo::buildPredicateInfo looks essentially like the code I
    have in AssumptionCache::updateAffectedValues; we just need to
    update the PredicateInfo version to catch a few more cases that the
    assumptions need.<br>
    <br>
    I don't understand what you mean by "in the assume blocks only." I'd
    think we'd need to treat these just like dominating
    conditional-branch conditions, so we'd need to rename all uses
    dominated by the assumption in all blocks.<br>
    <br>
    Thanks again,<br>
    Hal<br>
    <br>
    <blockquote
cite="mid:CAF4BwTXvrfWxiG0QQfPrT5z_E0cF8obWOwK7_2bzeXWWjmYDJw@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>[1]  There's a little work to be done, but it's actually
          very easy at this point to catch 95% of the cases GVN does. 
          It has some ridiculous cases that we would have to insert more
          predicate info to catch, like this;<br>
          <br>
        </div>
        <div>%tmp1 = load @a</div>
        <div>%tmp2 = icmp eq %tmp1, 0</div>
        <div>
          <div>branch to bb1 if true</div>
          <div><br>
          </div>
          <div>bb1:<br>
            %tmp3 = load @a</div>
          <div>%tmp4 = icmp eq %tmp3, 4</div>
        </div>
        <div><br>
        </div>
        <div>If you run early-cse or newgvn first, so the loads get
          eliminated, it will get it. If this case occurs enough in
          practice, we can also just insert predicateinfo during
          analysis.</div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div class="gmail_extra">
          <div class="gmail_quote">On Tue, Jan 10, 2017 at 6:56 PM, 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:0px 0px 0px
              0.8ex;border-left:1px solid
              rgb(204,204,204);padding-left:1ex">
              <div bgcolor="#FFFFFF"><span class="gmail-">
                  <p><br>
                  </p>
                  <div
                    class="gmail-m_-2269963011766438045moz-cite-prefix">On
                    01/10/2017 08:51 PM, Daniel Berlin wrote:<br>
                  </div>
                  <blockquote type="cite">
                    <div dir="ltr">I think this is fine, because you
                      want it in 4.0.
                      <div><br>
                      </div>
                      <div>We can build the infrastructure for the next
                        thing pretty quickly, and if that means this
                        lives a few months, so be it.</div>
                      <br>
                      <div>I have a working version of e-ssa at this
                        point with no ir changes that i'm testing (it
                        uses one argument phi nodes like lcssa, and a
                        side lookup table).</div>
                    </div>
                  </blockquote>
                  <br>
                </span> Sounds good, thanks! We'll just need to work out
                exactly how this will work with assumes, guards, etc.
                and how far you want to take it (e.g. at some limit,
                this becomes SSI).<br>
                <br>
                 -Hal<span class="gmail-"><br>
                  <br>
                  <blockquote type="cite">
                    <div dir="ltr">
                      <div><br>
                      </div>
                    </div>
                    <div class="gmail_extra"><br>
                      <div class="gmail_quote">On Tue, Jan 10, 2017 at
                        6:39 PM, Hal Finkel via Phabricator <span
                          dir="ltr"><<a moz-do-not-send="true"
                            href="mailto:reviews@reviews.llvm.org"
                            target="_blank">reviews@reviews.llvm.org</a>></span>
                        wrote:<br>
                        <blockquote class="gmail_quote"
                          style="margin:0px 0px 0px
                          0.8ex;border-left:1px solid
                          rgb(204,204,204);padding-left:1ex">hfinkel
                          added a comment.<br>
                          <span><br>
                            In <a moz-do-not-send="true"
                              href="https://reviews.llvm.org/D28459#642239"
                              rel="noreferrer" target="_blank">https://reviews.llvm.org/D2845<wbr>9#642239</a>,
                            @davide wrote:<br>
                            <br>
                            > In <a moz-do-not-send="true"
                              href="https://reviews.llvm.org/D28459#642235"
                              rel="noreferrer" target="_blank">https://reviews.llvm.org/D2845<wbr>9#642235</a>,
                            @davide wrote:<br>
                            ><br>
                            > > Sorry for the delay, Hal.<br>
                            > >  I just checked and this doesn't
                            regress the cases your previous change
                            regressed, so we should be good on that
                            side.<br>
                            > >  I somehow share Dan's feeling
                            that this could be solved with an
                            infrastructural changes rather than caching,
                            but I don't feel to be in a position to
                            hinder progress without a
                            concrete/implemented alternative.<br>
                            ><br>
                            ><br>
                            > For those wondering, I mean <a
                              moz-do-not-send="true"
href="http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20170102/416193.html"
                              rel="noreferrer" target="_blank">http://lists.llvm.org/pipermai<wbr>l/llvm-commits/Week-of-Mon-<wbr>20170102/416193.html</a><br>
                            <br>
                            <br>
                          </span>@dberlin , @chandlerc , et al. does
                          anyone object to me committing this solution
                          at this point? I'm obviously happy to help
                          replace it later with something based on an
                          extended SSA form once we figure out how that
                          should work. In the mean time, this fixes the
                          compile-time problems, which users are
                          certainly hitting, in a fairly transparent
                          way.<br>
                          <br>
                          <br>
                          <a moz-do-not-send="true"
                            href="https://reviews.llvm.org/D28459"
                            rel="noreferrer" target="_blank">https://reviews.llvm.org/D2845<wbr>9</a><br>
                          <br>
                          <br>
                          <br>
                        </blockquote>
                      </div>
                      <br>
                    </div>
                  </blockquote>
                  <br>
                </span><span class="gmail-HOEnZb"><font color="#888888">
                    <pre class="gmail-m_-2269963011766438045moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
                  </font></span></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>