<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<br>
<br>
<div class="moz-cite-prefix">On 01/04/2016 12:54 PM, Mehdi Amini via
llvm-dev wrote:<br>
</div>
<blockquote
cite="mid:394F484F-0E7A-4163-BC51-8FC129EC590D@apple.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Jan 4, 2016, at 12:53 PM, Mehdi Amini via
llvm-dev <<a moz-do-not-send="true"
href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div style="font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant: normal; font-weight:
normal; letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-stroke-width: 0px;" class="">
<blockquote type="cite" class="">
<div class=""><br class="Apple-interchange-newline">
On Jan 4, 2016, at 9:55 AM, Amaury SECHET via llvm-dev
<<a moz-do-not-send="true"
href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="ltr" class=""><br class="">
<div class="gmail_extra"><br class="">
<div class="gmail_quote">2016-01-04 18:21
GMT+01:00 Philip Reames<span
class="Apple-converted-space"> </span><span
dir="ltr" class=""><<a
moz-do-not-send="true"
href="mailto:listmail@philipreames.com"
target="_blank" class=""><a class="moz-txt-link-abbreviated" href="mailto:listmail@philipreames.com">listmail@philipreames.com</a></a>></span>:<br
class="">
<blockquote class="gmail_quote" style="margin:
0px 0px 0px 0.8ex; border-left-width: 1px;
border-left-style: solid; border-left-color:
rgb(204, 204, 204); padding-left: 1ex;">
<div text="#000000" bgcolor="#FFFFFF" class=""><span
class="">
<div class="">On 01/04/2016 07:32 AM,
Amaury SECHET wrote:<br class="">
</div>
<blockquote type="cite" class="">
<div dir="ltr" class="">
<div class="">
<div class="">After a bit more
investigation, it turns out that
because %0 is stored into %1
(after bitcast) and so %3 may have
access to it and clobber it.<br
class="">
</div>
</div>
</div>
</blockquote>
</span>Can you give a bit more context? I'm
not sure which of the examples you're
talking about.<br class="">
<br class="">
</div>
</blockquote>
<div class=""><br class="">
</div>
<div class="">Sure. Let's look at<span
class="Apple-converted-space"> </span><a
moz-do-not-send="true"
href="http://pastebin.com/K0J9yGq1" class=""><a class="moz-txt-link-freetext" href="http://pastebin.com/K0J9yGq1">http://pastebin.com/K0J9yGq1</a></a><br
class="">
<br class="">
</div>
<div class="">Because of the store line 7, it is
assumed that the call line 8 may see %0 and
even modify the memory it points to. As a
result, it is assumed that the load line 11
may not be eliminated.<br class="">
<br class="">
</div>
<div class="">Which seems actually correct in
the general case.<br class="">
<br class="">
</div>
<blockquote class="gmail_quote" style="margin:
0px 0px 0px 0.8ex; border-left-width: 1px;
border-left-style: solid; border-left-color:
rgb(204, 204, 204); padding-left: 1ex;">
<div text="#000000" bgcolor="#FFFFFF" class=""><span
class=""><br class="">
<blockquote type="cite" class="">
<div dir="ltr" class="">
<div class="">
<div class=""><br class="">
</div>
After a bit of thought, it is
correct in the general case, but
definitively something stricter is
needed here. Looking at<span
class="Apple-converted-space"> </span><tt
class=""><span class="">inaccessiblememonly</span></tt><span
class="Apple-converted-space"> </span>I'm
not sure this is what is needed.
What if the memory allocator is
defined is the current module ?<br
class="">
</div>
</div>
</blockquote>
</span>At the moment, inaccessiblememonly
would require separate compilation of the
allocation function. <span
class="Apple-converted-space"> </span><br
class="">
<span class="">
<blockquote type="cite" class="">
<div dir="ltr" class="">
<div class=""><br class="">
</div>
This leads me to conclude this is way
more linked to the memory allocation
pass than I expected it to be in the
first place. Can I ask what you plan
to use<span
class="Apple-converted-space"> </span><tt
class=""><span class="">inaccessiblememonly</span></tt><span
class="Apple-converted-space"> </span>for
? Should the semantic be refined to
fit the bill better ?<br class="">
</div>
</blockquote>
</span>Well, I didn't introduce the
attribute, so I can't speak for the original
intent. For me, I plan on applying it to
some of our out of line allocation functions
and other helper routines which modify
runtime state, but not java visible state. <span
class="Apple-converted-space"> </span><br
class="">
<br class="">
If you have specific suggestions for how to
refine the semantics, please make them.
Getting the details right is always the hard
part. :)<br class="">
<br class="">
You might also consider using a variant of
your allocation function which takes a
pointer to the global state it needs to
modify. Doing this would allow you to use
argmemonly to restrict the aliasing while
still allowing whole program optimization.
I haven't tried this in practice, but it
seems like it would probably work...<span
class=""><br class="">
</span></div>
</blockquote>
<div class=""><br class="">
</div>
<div class="">I do not wish to make suggestion
before I understand where this is coming from.
So far, from what I've collected, use cases
are:<br class="">
</div>
<div class=""> - Memory allocation<br class="">
</div>
<div class=""> - Runtime isolation for managed
languages.<br class="">
</div>
<div class=""><br class="">
</div>
<div class="">I have some more though to put
into this, but to boot, would that be possible
to only use this attribute on method that are
declared, but not defined and remove it when
merging modules ? It doesn't look like it is
necessary to have it when the function may be
exposed depending on the way the software is
built.<br class="">
</div>
</div>
</div>
</div>
</div>
</blockquote>
<div class=""><br class="">
</div>
</div>
<span style="font-family: Helvetica; font-size: 12px;
font-style: normal; font-variant: normal; font-weight:
normal; letter-spacing: normal; orphans: auto; text-align:
start; text-indent: 0px; text-transform: none;
white-space: normal; widows: auto; word-spacing: 0px;
-webkit-text-stroke-width: 0px; float: none; display:
inline !important;" class="">We can imagine a function
defined in the current module, that does not modify any
global, but calls malloc. Could it be inferred the
argmemonly?</span></div>
</blockquote>
<br class="">
</div>
<div>I meant inaccessiblememonly instead of argmemonly…</div>
</blockquote>
I believe that it should be yes. (If we had malloc marked as
inaccessiblememonly which we don't currently.)<br>
<blockquote
cite="mid:394F484F-0E7A-4163-BC51-8FC129EC590D@apple.com"
type="cite">
<div><br class="">
</div>
<div>— </div>
<div>Mehdi</div>
<div><br class="">
</div>
<br class="">
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote>
<br>
</body>
</html>