[llvm-dev] RFC: alloca -- specify address space for allocation
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Thu Aug 27 13:31:23 PDT 2015
As a bit of background, the reason we originally went with addrspaces to
mark GC pointers was that the managed and non-managed heaps for us are
semantically non-overlapping. It's not entirely clear to me that the
notion of two non-overlapping stacks is the right mental model for
approaching the stack allocated object portion.
Philip
On 08/26/2015 09:40 PM, Marcello Maggioni wrote:
> It is not clear to me if these GC pointers are actually living in a
> different address space when allocated on the stack (aka. you have two
> different stacks) or if the address space is just a way to mark that
> that pointer is a GC-pointer , but all the stack allocation actually
> lives in the same address space (presumably 0).
>
> Marcello
>> On 26 Aug 2015, at 20:39, Swaroop Sridhar via llvm-dev
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>> Please see inline.
>> *From:*Chandler Carruth [mailto:chandlerc at google.com]
>> *Sent:*Wednesday, August 26, 2015 7:03 PM
>> *To:*Swaroop Sridhar <Swaroop.Sridhar at microsoft.com
>> <mailto:Swaroop.Sridhar at microsoft.com>>; llvm-dev
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>>; Philip
>> Reames <listmail at philipreames.com
>> <mailto:listmail at philipreames.com>>; Sanjoy Das
>> <sanjoy at playingwithpointers.com <mailto:sanjoy at playingwithpointers.com>>
>> *Subject:*Re: [llvm-dev] RFC: alloca -- specify address space for
>> allocation
>> On Wed, Aug 26, 2015 at 6:46 PM Swaroop Sridhar via llvm-dev
>> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>> Currently, theallocainstruction always allocates in the generic
>> address space (0).
>> This proposal is to extend the semantics ofallocainstruction to
>> allow allocation in any specified address space.
>> *Proposed Syntax*
>> <result> = alloca [inalloca] <type> [, <ty> <NumElements>] [,
>> align <alignment>]*[,addrspace<num>]*; yields type
>> addrspace(num)*:result
>> *Motivation*
>> Managed language clients typically use address space 1 to
>> represent GC-pointers.
>> Some managed clients (CLR, in particular) allow construction of
>> GC pointers to stack locations.
>> For example, MSIL instruction ldloca (ECMA 335, p 370) creates a
>> GC pointer to a stack local.
>> Creating anaddrespace(1)*pointer to a stack location currently
>> involves two steps: thealloca, and anaddrspacecast.
>> Managed code transformations (ex:RewriteStatepointsForGC) do not
>> handle arbitrary address space casting.
>> So, it is desirable to obtain theaddrespace(1)*pointer by
>> construction.
>>
>> I don't have a particular or specific objection here necessarily, but
>> I have to admit I don't understand the use case (yet). I'm hoping you
>> can explain it to me more thoroughly.
>> What semantics do you expect for GC pointer to a stack location?
>> That's what I don't really understand. Some questions that leap to
>> mind, but may be the wrong questions (so feel free to point me in the
>> right direction here)...
>> CLR defines the a kind of GC pointer called “managed pointer” , which
>> can point to a local variable, heap object, parameter, field of a
>> compound type, or element of an array.The semantics of managed
>> pointer is liberally defined to support by-reference passing. For
>> example, in this C# example:
>> publicclassObj{ publicint i; }
>> publicstaticint Test() {
>> Obj obj = newObj();
>> inti=0;
>> …
>> if(cond) {
>> Fn(ref i); // managed pointer to a stack location
>> }
>> else {
>> Fn(ref obj.i); // managed pointer to a heap location
>> }
>> }
>> - Can I promote such a location to an SSA register?
>> The rules for the stack location is the same as any address-taken
>> location.
>> I don’t think the fact that the generated address is a managed
>> pointer should make a difference.
>> - What does it mean to collect a stack location?
>> The stack location is not GCed or relocated.
>> For a reported managed pointer, if the referenced location is outside
>> the bounds of the GC-heap, the runtime leaves it alone.
>> - Can I merge stack allocations that are GC pointers? Can I re-use
>> them? What semantics do I get?
>> - Do GC pointers to stack locations have any different aliasing
>> properties?
>> - When the optimizer needs to create a new stack allocation, what
>> address space should it be in?
>> I’ll answer these questions in my next email.
>> Ultimately, to make this change, you'll also need to change a decent
>> amount of code in the optimizer that will blindly create stack
>> allocations in address space zero.
>> Without a better understanding of both the motivation and the
>> resulting consequences such as what I've outlined in my questions
>> above, it is very hard for me to feel comfortable with this kind of
>> change.
>>
>> Thanks,
>> Swaroop.
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__na01.safelinks.protection.outlook.com_-3Furl-3Dhttp-253a-252f-252flists.llvm.org-252fcgi-2Dbin-252fmailman-252flistinfo-252fllvm-2Ddev-26data-3D01-257c01-257cSwaroop.Sridhar-2540microsoft.com-257c58ded8bf3e5141b4884c08d2ae839898-257c72f988bf86f141af91ab2d7cd011db47-257c1-26sdata-3DxY2wWEhcEGdjQtcEqzSAXstTDgFW-252fxPl4RhJIDYQCCY-253d&d=BQMGaQ&c=eEvniauFctOgLOKGJOplqw&r=THu9ANfN9LYlQTYNQdmA7D-MsdMl2OioTAKXjMfn7i4&m=rPG5Brg7MCC-dk2NfmVIUdydnG-sBY4i5vxuuhfMjn4&s=JKA46T4ShURRYPiglJdaLfv4njMVPeb-zf_i0CiLfbw&e=>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>> https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Ddev&d=BQIGaQ&c=eEvniauFctOgLOKGJOplqw&r=THu9ANfN9LYlQTYNQdmA7D-MsdMl2OioTAKXjMfn7i4&m=rPG5Brg7MCC-dk2NfmVIUdydnG-sBY4i5vxuuhfMjn4&s=GWkPE5c8T8RLUaT_ef53yhM_NZqIhsE2Kyze3P8Rf3s&e=
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150827/15911a43/attachment.html>
More information about the llvm-dev
mailing list