[llvm-dev] Non-relocating GC with liveness tracking
Philip Reames via llvm-dev
llvm-dev at lists.llvm.org
Sun Nov 25 18:57:32 PST 2018
Actually, are you possibly using "bundle" to refer to a set of arguments
to the statepoint? We've since introduced "operand bundles" which is
what I assumed you meant.
On 11/25/18 6:56 PM, Philip Reames wrote:
>
> This sounds like an incomplete description since codegen would have no
> knowledge of the new bundle type and discard them. Would you be
> willing to share your patches? I'd be curious to see there approach
> you took, maybe there's something analogous we can do upstream.
>
> Philip
>
> On 11/19/18 12:01 AM, Chuan Qiu wrote:
>> Thanks for reviving this.
>> I completely forgot the details but I resolved this problem. Looking
>> though the code, seems I forked RewriteStatepointsForGC pass, and
>> change it to adding 'gc-livevars' bundle to the call/invoke inst
>> after finding the livevars, instead of changing it to StatepointCall
>> intrinsic.
>>
>> On Wed, Nov 14, 2018 at 11:48 AM Philip Reames
>> <listmail at philipreames.com <mailto:listmail at philipreames.com>> wrote:
>>
>> Returning to an ancient thread. Sorry for the prolonged lack of
>> response.
>>
>> gc.statepoint is supported and actively developed. The only
>> production usage of LLVM's GC support I'm aware of is using
>> gc.statepoint. I recommend you use gc.statepoint, not gcroot.
>>
>> I recently made a set of documentation edits which may provide
>> some useful guidance for your non-relocating collector design.
>> I'd be curious to know what you've settled on and what progress
>> you've made.
>>
>> Philip
>>
>>
>> On 12/8/17 1:29 PM, Chuan Qiu via llvm-dev wrote:
>>> Hi Team,
>>> I'm working on a new pure functional language and I'm trying to
>>> add GC support for that.
>>>
>>> Because all vars are immutable, the IR that my frontend
>>> generates are all register based, i.e. no alloca, and no
>>> readmem, writemem unless accessing/constructing structs.
>>>
>>> If I use the traditional GC with gcroot intrinsic, it will need
>>> to emit more code for liveness tracking, storing the IR values
>>> into the gcroot, which seems convoluted.
>>>
>>> I found using stack map / statepoints very plausible here,
>>> because it only needs all live vars without saving it to a
>>> corresponding gcroot, and can track liveness at every call point.
>>>
>>> However, this seems still marked as experimental, and doesn't
>>> support exception handling (which is a requirement for my
>>> language). And because my language uses return barriar
>>> (http://lists.llvm.org/pipermail/llvm-dev/2017-August/116291.html),
>>> I'm already using a new intrinsic that returns a token type for
>>> calls so I can have multiple return paths that retrieves the
>>> actual result, and currently it doesn't work with gc.statepoint.
>>>
>>> I wanna check the status of statepoint GC: Is it still actively
>>> developed? is there any plan to fix the exception handling path?
>>> Or should I continue to use the gcroot intrinsic? Change my new
>>> multi-return intrinsic to support statepoint?
>>>
>>> I'm also thinking using a non-relocating GC with stackmap
>>> because relocating is currently optional for me: all live roots
>>> are passed to call site as operand bundle, so codegen can emit
>>> the stack map, and my new intrinsic for multiple return paths
>>> can also work with that.
>>>
>>> Any advise will be welcome.
>>>
>>> Thanks
>>>
>>> _______________________________________________
>>> 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
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181125/d39471e5/attachment.html>
More information about the llvm-dev
mailing list