[LLVMdev] Re: Garbage collection questions

Sandro Magi naasking at gmail.com
Thu Mar 9 13:18:39 PST 2006


I've written a reference-counting garbage collector for LLVM, but I'm
still unclear on a few things.

The following piece of code that appears on
http://llvm.cs.uiuc.edu/docs/GarbageCollection.html is unclear:

   ;; As the pointer goes out of scope, store a null value into
   ;; it, to indicate that the value is no longer live.
   store %Object* null, %Object** %X
   ...

How exactly does this indicate X is no longer live? Is this internal
code-generator logic/magic?

The problem I'm currently unsure of, is how roots would affect
refcounts. Should the gcread/gcwrite not be used with stack refs, etc?

1. If root refs are NOT included in the count, then objects of
refcount 0 must be tracked in a list of scheduled deletions, but will
be continually deferred until the root goes out of scope (the deletion
list is filtered during a collection by the roots callback).

2. If root refs ARE included in the count, then this deferral overhead
is avoided, at the expense of more refcount increment/decrement costs
(on entry and exit from each function).

I'm wondering which would be preferable. The collector is currently
written assuming #1 is the case, as this is what the docs seemed to
imply. Shall I just post the code?

Sandro




More information about the llvm-dev mailing list