<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 24, 2015 at 5:28 PM, Philip Reames <span dir="ltr"><<a href="mailto:listmail@philipreames.com" target="_blank">listmail@philipreames.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><span class="">
    <br>
    <div>On 03/24/2015 05:07 PM, Daniel Berlin
      wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr"><br>
        <div class="gmail_extra"><br>
          <div class="gmail_quote">On Tue, Mar 24, 2015 at 4:55 PM,
            Philip Reames <span dir="ltr"><<a href="mailto:listmail@philipreames.com" target="_blank">listmail@philipreames.com</a>></span>
            wrote:<br>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">This is
              looking reasonable complete.  Any chance we could land it
              in it's current form and evolve it in tree?  Tracking
              changes is becoming quite hard.<br>
              <br>
            </blockquote>
            <div>Yes, let me add some more comments, update it once
              more, and declare victory for the moment until someone
              looks at it again.</div>
            <div><br>
            </div>
            <div>The one thing blocking it from being used for say,
              memcpyoptimizer is that it's not  *quite* lazy enough.</div>
          </div>
        </div>
      </div>
    </blockquote></span>
    Do you think this would this actually be a performance problem? 
    Particularly once we start using this is multiple passes and
    preserving it across them, it's not clear to me how expensive the
    current form will actually be.  <br></div></blockquote><div><br></div><div>If it's preserved, probably not.</div><div>Something is going to pay the cost of looking at all the blocks. Right now, memcpyoptimizer does *not* look at all loads, but it looks at all stores and calls.</div><div><br></div><div>If we assume that is most blocks, the cost will not increase.</div><div>:)</div><div><br></div><div>Eventually, you end up looking at all blocks, and if you get to GVN, it looks at *all* stores and loads in the program, so at that point, there is no additional cost.</div><div><br></div><div>So we may take a temporary hit.</div><div><br></div><div>The algorithms  to update it in the presence of CFG changes are identical to our current SSA update algorithms, they just need to be done (and an API to inform memoryssa that you removed something is needed)<br><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000"><span class=""><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br>
            </div>
            <div>I wanted to make it pass in the list of defining
              blocks, and then it only computes memory ssa on the
              parents of this block in the dominator tree (since that is
              all a walk would ever return).<br>
            </div>
            <div><br>
            </div>
            <div>It could be made completely lazy by doing per-variable
              phi computation, as it hits the last use in a
              multiple-predecessor block  non-local use, as long as it
              gets a promise you won't modify the CFG :)</div>
            <div><br>
            </div>
            <div>Then we'd just have the walker do something like
              Def->ensureUseComputed or something to trigger it to do
              insertion.</div>
            <div><br>
            </div>
            <div><br>
            </div>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
              Using this to implement a simple cross block DSE might be
              an interesting proof of concept.  I'm not set on that
              idea, but it would be nice to have something in tree to
              show this actually working.  </blockquote>
            <div><br>
            </div>
            <div>My original goal was to rewrite memcpyoptimizer, rather
              than write a new pass.</div>
            <div>But i'm happy to do either :)</div>
          </div>
        </div>
      </div>
    </blockquote></span>
    Either works for me.  I have no strong preference.  <br><span class="">
    <blockquote type="cite">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <div> </div>
            <div>I could also rewrite MergedLoadStoreMotion to use it.
              It would simplify the code pretty greatly, i think, since
              it would no longer have to look at/walk successor blocks</div>
            <div><br>
            </div>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Once we
              have that, we can migrate other passes to it one by one.<br>
              <div>
                <div><br>
                  <br>
                  <a href="http://reviews.llvm.org/D7864" target="_blank">http://reviews.llvm.org/D7864</a><br>
                  <br>
                  EMAIL PREFERENCES<br>
                    <a href="http://reviews.llvm.org/settings/panel/emailpreferences/" target="_blank">http://reviews.llvm.org/settings/panel/emailpreferences/</a><br>
                  <br>
                  <br>
                </div>
              </div>
            </blockquote>
          </div>
          <br>
        </div>
      </div>
    </blockquote>
    <br>
  </span></div>

</blockquote></div><br></div></div>