[LLVMdev] Dynamic (JIT) type resolution
nicolas.geoffray at lip6.fr
Wed Nov 7 10:03:21 PST 2007
Chris Lattner wrote:
> On Wed, 7 Nov 2007, Nicolas Geoffray wrote:
>> Thanks BGB, but at this point I can handle it ;-). The problem is not
>> how in theory (patch the caller), but how in the LLVM code generation
>> process. There are three steps for that:
>> 1) How to represent the stub in the IR? An intrinsic? An external field
>> with a ghost linkage?
> Probably an intrinsic. The trick is making it general purpose, not
> language specific.
I'm not sure actually how can I do that language specific ;). OK
currently only Java does that (from what I know), but intrinsics like
getElementDouble or setElementDouble do look general purpose. Unless,
I'm too Java-minded?
>> 2) At which point in LLVM do we know we won't have any optimization, so
>> that the field operation is next to the stub call?
> You'll probably want to do this late in the code generator.
Therefore when instructions are lowered to target-specific instructions?
>> 3) Make LLVM think the stub call is not a real call, so that
>> callee-saved registers do not get clobbered.
> LLVM supports calling convetions like "coldcc". The idea of coldcc is
> that the function is compiled to not clobber callee-save registers.
> However, in practice, no current code generators do anything special with
> it, it's compiled like fastcc or ccc.
As long as there is room for it, and obviously coldcc is here for that,
it works fine for me :)
More information about the llvm-dev