[LLVMdev] GC interface suggestions
Burke, Max
mburke at ea.com
Fri Mar 20 12:42:20 PDT 2009
Hello,
I have a few suggestions for the GC interface. First, initialization of roots fails if the root isn't just a pointer. Some implementations require more data than just the pointer for handling references to the interior of an aggregate. On my end it just required changing ConstantPointerNull::get() to Constant::GetNullValue() to support fat pointers. The roots that were being initialized also weren't added to the InitedRoots set so the generated code would be multiply-initializing the same roots if they were rooted more than once.
@@ -178,10 +180,10 @@
for (AllocaInst **I = Roots, **E = Roots + Count; I != E; ++I)
if (!InitedRoots.count(*I)) {
- new StoreInst(ConstantPointerNull::get(cast<PointerType>(
- cast<PointerType>((*I)->getType())->getElementType())),
- *I, IP);
+ const PointerType *PT = cast<PointerType>((*I)->getType());
+ new StoreInst(Constant::getNullValue(PT->getElementType()), *I, IP);
MadeChange = true;
+ InitedRoots.insert(*I);
}
Secondly, it would be great to have the ability to add custom safe points similarly to how the GC interface can specify custom read/write barriers and custom roots. Being able to specify safe points at the IR level is hugely preferable to doing it at the machine instruction level.
Cheers,
-Max
More information about the llvm-dev
mailing list