[LLVMdev] CollectorRegistry

Gordon Henriksen gordonhenriksen at me.com
Sat Jul 26 09:37:45 PDT 2008


On Jul 26, 2008, at 12:14, Simon Ask Ulsnes wrote:

> 2008/7/26 Gordon Henriksen <gordonhenriksen at me.com>:
>> I'm not sure the purpose of doing so—llvm::Collector (poorly named;  
>> I'm open to suggestions) exists only in the compiler, not at  
>> runtime in the compiled program. You should need access to it at  
>> runtime no more than you might need access to an instance of  
>> llvm::TargetMachine.
>
> Maybe I don't understand the architecture correctly.
>
> This means that the implementation of my collector's data structures  
> (in this case, a few heaps) is supposed to be independent on the  
> subclassed llvm::Collector?

That's correct. llvm::Collector exists to coordinate the compiler and  
generate code compatible with your GC runtime library. It is not  
itself part of your GC runtime library.

> I had initially implemented it as
>
> class SimonCollector : public llvm::Collector
> {
>    public:
>        // ... virtual methods from llvm::Collector
>
>        void* allocate(...) { /* my allocator */ }
>        void collect() { /* ... */ }
>        // etc.
> };
>
> but actually allocate, collect, etc. aren't supposed to be there,  
> but in some separate structure that is accessed by both my  
> llvm::Collector subclass (or rather, the assembly generated in the  
> lowering passes) and llvm_gc_*?

Yes.

> If that is the case, then I agree, it's a poor name -- at least it  
> got me confused. :-P It's hard to come up with good alternatives,  
> though. Hmm.
>
> I looked a bit at the ShadowStackCollector class, and suddenly it  
> makes much more sense. But I fail to find any implementations of  
> llvm_gc_allocate and friends?


llvm_gc_* are optional interfaces. If you want your allocation  
routines to look different, then you're free to do so. I consider that  
section of the document deprecated to obsolete.

That said, they're not implemented by the Collector class, so you  
shouldn't expect to find them anywhere under llvm/lib. I believe the  
semispace example in llvm/runtime provides implementations of these  
interfaces, however.

— Gordon

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080726/2e4cb174/attachment.html>


More information about the llvm-dev mailing list