<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 09/08/2014 04:22 PM, Dan Gohman
wrote:<br>
</div>
<blockquote
cite="mid:CAF4K+2iAZqn6Vh=Dg2z_-NgY03cN5D9Th4NDL=1_1eEpCnYwZg@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>An object can be allocated at virtual address 5 through
extra-VM means (eg. mmap), and then one can (creatively)
interpret the return value of @f as being associated with
whatever %A was associated with *and* 5. The return value of
@g can only be associated with exactly the same set that %A
was associated with. Consequently, it's not always safe to
replace @f with @g.<br>
</div>
</div>
</blockquote>
Dan, I'm trying to follow your logic here and am not arriving at the
same conclusion. Can you point out the flaw in my reasoning here?<br>
<br>
define i8* @f(i8* %A) { <br>
%pti = ptrtoint i8* %A to i64 <-- %pti is not a pointer and is
thus not based on anything<br>
%add = add i64 %pti, 5 <-- %add is not a pointer and is thus not
based on anything, it is "associated with" the memory pointed to by
%A<br>
--- In particular, "5" is NOT a "an integer constant ... returned
from
a function not defined within LLVM". It is not returned by a
function. As a result the pointer value of 5 is not associated with
any address range. <br>
%itp = inttoptr i64 %add to i8* %itp is based on %pti only<br>
ret i8* %itp}<br>
<br>
I'm guessing the key difference in our reasoning is about the
constant 5. :) I'm also guessing that you have an example in mind
which motivates the need for 5 to be considered associated with the
address range. Could you expand on why?<br>
<br>
<br>
<blockquote
cite="mid:CAF4K+2iAZqn6Vh=Dg2z_-NgY03cN5D9Th4NDL=1_1eEpCnYwZg@mail.gmail.com"
type="cite">
<div dir="ltr">
<div><br>
It looks a little silly to say this in the case of the integer
constant 5, and there are some semantic gray areas around
extra-VM allocation, but the same thing happens if the add
were adding a dynamic integer value, and then it's difficult
to find a way to separate that case from the constant 5 case.</div>
<div><br>
</div>
<div>In any case, the general advice is that people should
prefer to use getelementptr to begin with. LLVM's own
optimizers were converted to use getelementptr instead of
ptrtoint+add+inttoptr even when they have to do raw byte
arithmetic.<br>
</div>
</div>
</blockquote>
It would be nice to be able to canoncalize ptrtoint+add+inttoptr to
geps. Having seemingly reasonable-looking legal IR that simply
doesn't optimize is not the best introduction for new frontend
authors. :) <br>
<blockquote
cite="mid:CAF4K+2iAZqn6Vh=Dg2z_-NgY03cN5D9Th4NDL=1_1eEpCnYwZg@mail.gmail.com"
type="cite">
<div dir="ltr">
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On Sat, Aug 30, 2014 at 6:01 PM, David
Majnemer <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Consider the two functions bellow:
<div><br>
define i8* @f(i8* %A) { %pti = ptrtoint i8* %A to i64
%add = add i64 %pti, 5 %itp = inttoptr i64 %add to i8*
ret i8* %itp}<br>
define i8* @g(i8* %A) {<br>
%gep = getelementptr i8* %A, i64 5 ret i8* %gep}<br>
What, if anything, prevents us from canonicalizing @f to
@g?I've heard that this might be in violation of <a
moz-do-not-send="true"
href="http://llvm.org/docs/LangRef.html#pointeraliasing"
target="_blank">http://llvm.org/docs/LangRef.html#pointeraliasing</a>
but I don't see how.</div>
</div>
</blockquote>
</div>
<br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a> <a class="moz-txt-link-freetext" href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
</blockquote>
<br>
</body>
</html>