<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 12/9/2016 8:45 AM, Reid Kleckner
      wrote:<br>
    </div>
    <blockquote
cite="mid:CACs=tyJYjJuV8W1jyvp7BjYBT0+PSKzxcxgnnfB+VACXktodyQ@mail.gmail.com"
      type="cite">
      <div dir="ltr">On Thu, Dec 8, 2016 at 5:37 PM, Mehdi Amini <span
          dir="ltr"><<a moz-do-not-send="true"
            href="mailto:mehdi.amini@apple.com" target="_blank">mehdi.amini@apple.com</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 style="word-wrap:break-word">
            <div>So IIUC basically the *only* reason for this IR change
              is that we don’t want to pattern match in debug build?</div>
            <div>I don't understand right now why we wouldn’t want to do
              this?</div>
          </div>
        </blockquote>
        <div><br>
        </div>
        <div>If we need to pattern match such a basic construct, it
          suggests to me that we have the wrong representation, and we
          should instead make our representation more accurately model
          reality. To me, it feels like this representation allows
          several good things to just "fall out" without any additional
          work, and that suggests it's a good representation.</div>
      </div>
    </blockquote>
    <br>
    Mmm... maybe.  The part I really don't like is the implied store:
    there are a lot of transformations which specifically reason about
    store instructions, and they would all need to be fixed to
    specifically deal with "alloca with an argument" so it doesn't block
    optimizations.  Every feature we add to the IR makes it more
    difficult to write IR transformations, and this really doesn't seem
    to carry its own weight.<br>
    <br>
    A couple of other thoughts I had:<br>
    1. We could use metadata, e.g. "%px = alloca i32, align 4 !argument
    !i32 %x", followed by a store.  There's still a little
    pattern-matching involved because the metadata is only a hint, but
    the intent in the IR is more explicit.<br>
    2. We could change the way clang generates function definitions:
    instead of "define void @f(i32 %x)", generate "define void @f(i32*
    byval %px)" if the value is going to end up on the stack.  This
    should work without any changes to the IR.  This is a bad idea if
    we're trying to run optimizations because it obscures data flow, but
    it seems reasonable at -O0.<br>
    <br>
    -Eli<br>
    <pre class="moz-signature" cols="72">-- 
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project</pre>
  </body>
</html>