[LLVMdev] Dynamic (JIT) type resolution

Chris Lattner sabre at nondot.org
Tue Nov 6 10:44:30 PST 2007


On Tue, 6 Nov 2007, Nicolas Geoffray wrote:
> Field operations in Java (getfield, putfield, getstatic, putstatic) do
> _not_ need what I'm proposing. What I'm proposing is just performance
> related (just like method patching in callbacks is an optimization in
> order to not call the callback everytime).
>
> Here's a simple example: consider class One:
>
> public class One {
>  double a;
> }
>
> and class Two:
> public class Two {
>   static double getDoubleFromOne(One arg) {
>        return One.a;
>   }
> }
> What happens in Java is that types are created lazily. Which means you
> can compile getDoubleFromOne without knowing the layout of the class
> One. Therefore, if you compile getDoubleFromOne without the layout
> information, the compiler will generate the code:

I'm missing something here.  If you lazily compile getDoubleFromOne the 
first time it is called, it seems like you are guaranteed to have layout 
information, as an instance of "One" is required to be passed in for this 
to run.

I guess a better example would be:

static double x() {
   (new One).a = 4;
}

or something like that.  The best way (I think) to handle this is to 
either:

1. interpret the first time through the code, then jit compile after the 
class is loaded, or:
2. jit compile code that is slower than need be (using function calls to 
cause the lazy stuff to happen) and then replace it when the class is 
loaded.

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/



More information about the llvm-dev mailing list