[llvm-dev] (no subject)

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Mon Oct 21 15:27:08 PDT 2019


The general assumption is that you use RS4GC to lower the abstract 
machine model.

I think there's IRBuilder support.  If not, patches welcome!

Philip

On 10/21/19 12:06 AM, Yafei Liu wrote:
> Hi Philip, are there any C++ APIs to generate the llvm 
> statepoint instructions? I didn't found APIs similar to how to 
> generate gcroot instructions.
>
> On Mon, Oct 21, 2019 at 2:03 PM Yafei Liu <yfliu at mobvoi.com 
> <mailto:yfliu at mobvoi.com>> wrote:
>
>     Thanks Philip,  I'll keep investigating.
>
>     On Mon, Oct 21, 2019 at 9:52 AM Philip Reames
>     <listmail at philipreames.com <mailto:listmail at philipreames.com>> wrote:
>
>         Correct, with a couple of nit picks.
>
>         Relocation isn't an optimization the collector performs.  It's
>         a key primitive the collector is built upon.  Being unable to
>         relocate is not an allowed state.  (i.e. pinning can't be
>         required by the compiler)
>
>         When you talk about variables, that's true for the *source*
>         language and for the *abstract* machine before lowering. 
>         After lowering from the abstract machine, relocations are
>         represented in the IR explicitly as an entirely new set of defs.
>
>         Philip
>
>         On 10/20/19 6:40 PM, Yafei Liu wrote:
>>         Correct me if I'm wrong:
>>         Relocation in this conversation "relocation" means GC trying
>>         to move objects in the heap for optimization (make the data
>>         more impact for bigger room for example), this move is
>>         invisible to a programmer, and if a compiler support to
>>         " relocate objects directly reachable from running code", a
>>         variable (Foo foo) may points to a different address after a
>>         GC happens, while a programmer could still use the name foo
>>         in the code as if nothing happened.
>>
>>         On Sun, Oct 20, 2019 at 4:35 AM Philip Reames via llvm-dev
>>         <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>>
>>             Exactly this.  (As the person who wrote the line in
>>             question.)
>>
>>             On 10/18/19 8:50 AM, Hiroshi Yamauchi via llvm-dev wrote:
>>>             I think it's referring to a "moving" garbage collector
>>>             (as opposed to a "non-moving" garbage collector that
>>>             never moves/relocates objects.) The difference is that
>>>             for a moving one, all pointers need to be tracked and
>>>             potentially updated, whereas for a non-moving one, it's
>>>             sufficient that at least one pointer to a live object is
>>>             seen (when there may be other pointers to the same
>>>             object elsewhere) for correctness.
>>>
>>>             On Fri, Oct 18, 2019 at 2:12 AM Yafei Liu via llvm-dev
>>>             <llvm-dev at lists.llvm.org
>>>             <mailto:llvm-dev at lists.llvm.org>> wrote:
>>>
>>>                 Hi all,
>>>
>>>                 I'm investigating on integrating a gc to my llvm
>>>                 project, and when I read this document
>>>                 <http://llvm.org/docs/Statepoints.html>, one
>>>                 sentence confused me:
>>>
>>>                     However, for a collector which wishes to
>>>                     relocate objects directly reachable from running
>>>                     code, a higher standard is required.
>>>
>>>                 I don't understand what the move "relocate objects
>>>                 directly reachable from running code" trying to do.
>>>
>>>                 For my information, the concept "relocate" means the
>>>                 gc pointer refereed to a new location of an object,
>>>                 for example:
>>>
>>>                 in Java:
>>>
>>>                 |Foo foo = new Foo(); foo = new Foo(); // ---> a
>>>                 relocation happens |
>>>
>>>                 So can anyone explain what the "relocate objects
>>>                 directly reachable from running code" trying to do?
>>>
>>>                 _______________________________________________
>>>                 LLVM Developers mailing list
>>>                 llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>>                 https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>>
>>>             _______________________________________________
>>>             LLVM Developers mailing list
>>>             llvm-dev at lists.llvm.org  <mailto:llvm-dev at lists.llvm.org>
>>>             https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>             _______________________________________________
>>             LLVM Developers mailing list
>>             llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
>>             https://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/20191021/f52242ac/attachment.html>


More information about the llvm-dev mailing list