<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: arial,helvetica,sans-serif; font-size: 10pt; color: #000000'><br><hr id="zwchr"><blockquote id="DWT7832" style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"><b>From: </b>"Eli via llvm-dev Friedman" <llvm-dev@lists.llvm.org><br><b>To: </b>"Reid Kleckner" <rnk@google.com><br><b>Cc: </b>"llvm-dev" <llvm-dev@lists.llvm.org><br><b>Sent: </b>Friday, December 9, 2016 12:30:34 PM<br><b>Subject: </b>Re: [llvm-dev] RFC: Adding argument allocas<br><br>
<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">
<div dir="ltr">On Thu, Dec 8, 2016 at 5:37 PM, Mehdi Amini <span dir="ltr"><<a 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. </blockquote>I'm not sure this is true. The instruction does write to memory, at least formally, but by definition the address of the alloca cannot yet have been used by anything else, and so no other memory access can alias with it. The write also can't trap. The alloca, as a result, does not even need to be tagged as writing to memory.<br><br> -Hal<br><br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px; color: rgb(0, 0, 0); font-weight: normal; font-style: normal; text-decoration: none; font-family: Helvetica,Arial,sans-serif; font-size: 12pt;"> 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">--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project</pre>
<br>_______________________________________________<br>LLVM Developers mailing list<br>llvm-dev@lists.llvm.org<br>http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br></blockquote><br><br><br>-- <br><div><span name="x"></span>Hal Finkel<br>Lead, Compiler Technology and Programming Languages<br>Leadership Computing Facility<br>Argonne National Laboratory<span name="x"></span><br></div></div></body></html>