<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>