[LLVMdev] Pointer vs Integer classification (was Re: make DataLayout a mandatory part of Module)

Philip Reames listmail at philipreames.com
Fri Feb 21 10:37:52 PST 2014


On 02/14/2014 05:55 PM, Philip Reames wrote:
> Splitting out a conversation which started in "make DataLayout a 
> mandatory part of Module" since the topic has decidedly changed. This 
> also relates to the email "RFC: GEP as canonical form for pointer 
> addressing" I just sent.
>
> On 02/10/2014 05:25 PM, Nick Lewycky wrote:
>> ...
>>
>> We're supposed to have the llvm.gcroots intrinsic for this purpose, 
>> but you note that it prevents gc roots from being in registers (they 
>> must be in memory somewhere, usually on the stack), and that fixing 
>> it is more work than is reasonable.
> This is slightly off, but probably close to what I actually said even 
> if not quite what I meant.  :)
>
> I'm going to skip this and respond with a fuller explanation Monday.  
> I'd written an explanation once, realized it was wrong, and decided I 
> should probably revisit when fully awake.
>
> Fundamentally, I believe that gc.roots could be made to work, even 
> with decent (but not optimal) performance in the end.  We may even 
> contribute some patches towards fixing issues with the gc.root 
> mechanism just to make a fair comparison.  I just don't believe it's 
> the right approach or the best way to reach the end goal.
So, not quite on Monday, but I did get around to writing up an 
explanation of what's wrong with using gcroot.  It turned out to be much 
longer than I expected, so I turned it into a blog post:
http://www.philipreames.com/Blog/2014/02/21/why-not-use-gcroot/

The very short version: gcroot loses roots (for any GC) due to bad 
interaction with the optimizer, and gcroot doesn't capture all copies of 
a pointer root which fundamentally breaks collectors which relocate 
roots.  The only way I know to make gcroot (in its current form) work 
reliably for all collectors is to insert safepoints very early, which 
has highly negative performance impacts.  There are some (potentially) 
cheaper but ugly hacks available if you don't need to relocate roots.

There's also going to be a follow up post on implementation problems, 
but that's completely separate from the fundamental problems.

Philip

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140221/6d4dbd25/attachment.html>


More information about the llvm-dev mailing list