<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<br>
<div class="moz-cite-prefix">On 01/07/2015 12:22 PM, Matt Arsenault
wrote:<br>
</div>
<blockquote
cite="mid:97E6C63E-F924-421E-B34F-572F470EF160@gmail.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 7, 2015, at 3:10 PM, Philip Reames <<a
moz-do-not-send="true"
href="mailto:listmail@philipreames.com" class="">listmail@philipreames.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta content="text/html; charset=utf-8"
http-equiv="Content-Type" class="">
<div bgcolor="#FFFFFF" text="#000000" class=""> <br
class="">
<div class="moz-cite-prefix">On 01/07/2015 12:05 PM, Matt
Arsenault wrote:<br class="">
</div>
<blockquote
cite="mid:8C98EC88-B695-4AB0-94DB-1E3BC62E76AB@gmail.com"
type="cite" class="">
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" class="">
<br class="">
<div class="">
<blockquote type="cite" class="">
<div class="">On Jan 7, 2015, at 2:55 PM, Philip
Reames <<a moz-do-not-send="true"
href="mailto:listmail@philipreames.com" class="">listmail@philipreames.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta content="text/html; charset=utf-8"
http-equiv="Content-Type" class="">
<div bgcolor="#FFFFFF" text="#000000" class=""> <br
class="">
<div class="moz-cite-prefix">On 01/07/2015 11:52
AM, Matt Arsenault wrote:<br class="">
</div>
<blockquote
cite="mid:AB31CCB0-C2EB-47DB-8C12-E657F97527ED@gmail.com"
type="cite" class="">
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8" class="">
<br class="">
<div class="">
<blockquote type="cite" class="">
<div class="">On Jan 7, 2015, at 2:25 PM,
Owen Anderson <<a
moz-do-not-send="true"
href="mailto:resistor@mac.com"
class="">resistor@mac.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="content-type"
content="text/html; charset=utf-8"
class="">
<div dir="auto" class="">
<div class="">I'm not aware of any
such restriction, and I know of
several LLVM based systems that use
address space 1 for something other
than that.<br class="">
<br class="">
-Owen</div>
</div>
</div>
</blockquote>
<div class=""><br class="">
</div>
<div class="">Yes, this would be a problem
for us. We use 1 for a normal address
space where 0 is invalid. However, we also
have a problem where some other address
spaces do want 0 to be a valid address,
which just sort of don’t work correctly
now.</div>
</div>
</blockquote>
If you have an example with a null in a non-0
address space being mishandled, please file a
bug. We'll fix them as we find them. <br
class="">
</div>
</div>
</blockquote>
<div class=""><br class="">
</div>
<div class="">I think the problems aren’t so much that
accessing 0 doesn’t work (although I imagine there
are problems with that), but expectations of
comparison with null. The main problem I’m aware of
is comparisons with null pointers. The first global
object in addrspace(3) will have the address of 0,
so if a user does if (x != NULL), it will not behave
as expected. For C I think this is supposed to be
fixed by changing the value of NULL to -1, but I
don’t think that is currently supported. That is
also complicated because the null value is different
for different address spaces, and I think the actual
null pointer value must be 0 for C++. It doesn’t
really turn up often in real code so I don’t think
anybody has really spent time thinking about how to
properly solve this.</div>
</div>
</blockquote>
Just to make sure I'm interpreting this right: the problem
is essentially that we hard code "null" to mean address 0
in all address spaces? If we allowed the numeric value of
null to be configurable per address space, would that
resolve the issue at the LLVM IR level?<br class="">
</div>
</div>
</blockquote>
<div><br class="">
</div>
<div>Yes, it would. I’ve always imagined this to a be a large
undertaking though</div>
</div>
</blockquote>
I'd agree on the scope, but it also seems fairly straight forward.
If this becomes a serious issue, this seems like a workable
approach. <br>
<blockquote
cite="mid:97E6C63E-F924-421E-B34F-572F470EF160@gmail.com"
type="cite">
<div><br class="">
<blockquote type="cite" class="">
<div class="">
<div bgcolor="#FFFFFF" text="#000000" class=""> <br
class="">
Solving the frontend/language spec problem seems out of
scope for LLVM, though probably not for clang. Can you
point me to a usage of C++ with non-zero address spaces?
I'd be curious to know what's happening in this space. <br
class="">
</div>
</div>
</blockquote>
<div><br class="">
</div>
<div>There’s an AMD static C++ extension language, and a khronos
draft for an OpenCL C++ kernel language which applies the same
sort of restrictions and address spaces to C++ as OpenCL C
has. Last time I looked at this I remember that C allows a
non-zero null pointer value, but 0 must be implicitly
converted to the correct null pointer value and the NULL macro
will expand to this integer value. I don’t think the OpenCL C
spec touches the issue of different NULL values for different
address spaces, but does explicitly allow different sized
pointers for each. I am less clear on what C++ requires, but
C++11 4.10 says "A null pointer constant is an integral
constant expression (5.19) prvalue of integer type that
evaluates to zero or a prvalue of type std::nullptr_t."</div>
<div><br class="">
</div>
<br class="">
<blockquote type="cite" class="">
<div class="">
<div bgcolor="#FFFFFF" text="#000000" class=""> <br
class="">
<blockquote
cite="mid:8C98EC88-B695-4AB0-94DB-1E3BC62E76AB@gmail.com"
type="cite" class="">
<div class="">
<div class=""><br class="">
</div>
<div class="">-Matt</div>
<div class=""><br class="">
</div>
<br class="">
<blockquote type="cite" class="">
<div class="">
<div bgcolor="#FFFFFF" text="#000000" class="">
<blockquote
cite="mid:AB31CCB0-C2EB-47DB-8C12-E657F97527ED@gmail.com"
type="cite" class="">
<div class="">
<div class=""><br class="">
</div>
<div class="">-Matt</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<br class="">
<blockquote type="cite" class="">
<div class="">
<div dir="auto" class="">
<div class=""><br class="">
On Jan 7, 2015, at 1:18 PM, Philip
Reames <<a moz-do-not-send="true"
href="mailto:listmail@philipreames.com" class="">listmail@philipreames.com</a>>
wrote:<br class="">
<br class="">
</div>
<blockquote type="cite" class="">
<div class="">
<meta http-equiv="content-type"
content="text/html;
charset=utf-8" class="">
On the review for <a
moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://reviews.llvm.org/D6808">http://reviews.llvm.org/D6808</a>,
<a moz-do-not-send="true"
href="http://reviews.llvm.org/p/majnemer/"
class=" phui-handle
phui-link-person">majnemer</a>
commented that:<br class="">
<span class="transaction-comment"
data-sigil="transaction-comment"
data-meta="14_7">"Address space
1 has a special meaning in LLVM,
it's identical to address space
0 except for the fact that
"null" may be dereferenced. You
might want to consider a
different address space."<br
class="">
<br class="">
This is the first I've heard of
this and I can't find any
documentation about it being
reserved, either in general, or
specifically for x86. Can
anyone clarify?<br class="">
<br class="">
The only address spaces with
special meanings I know of are:<br
class="">
- 0 (the normal address space,
null is not dereferencable)<br
class="">
- 256 - TLS, GS relative
addressing<br class="">
- 257 - FS relative addressing<br
class="">
<br class="">
Philip<br class="">
</span> </div>
</blockquote>
<blockquote type="cite" class="">
<div class=""><span class="">_______________________________________________</span><br
class="">
<span class="">LLVM Developers
mailing list</span><br class="">
<span class=""><a
moz-do-not-send="true"
href="mailto:LLVMdev@cs.uiuc.edu"
class="">LLVMdev@cs.uiuc.edu</a>
<a
moz-do-not-send="true"
href="http://llvm.cs.uiuc.edu/"
class="">http://llvm.cs.uiuc.edu</a></span><br
class="">
<span class=""><a
moz-do-not-send="true"
href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev"
class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a></span><br
class="">
</div>
</blockquote>
</div>
_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a moz-do-not-send="true"
href="mailto:LLVMdev@cs.uiuc.edu"
class="">LLVMdev@cs.uiuc.edu</a>
<a moz-do-not-send="true"
href="http://llvm.cs.uiuc.edu/"
class="">http://llvm.cs.uiuc.edu</a><br
class="">
<a moz-do-not-send="true"
href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev"
class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br
class="">
</div>
</blockquote>
</div>
<br class="">
</blockquote>
<br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</blockquote>
<br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</blockquote>
<br>
</body>
</html>