Request for reviews (M): 6833129 : specjvm98 fails with NullPointerException in the compiler with -XX:DeoptimizeALot

changpeng fang - Sun Microsystems - Santa Clara United States Changpeng.Fang at Sun.COM
Mon Jul 6 17:21:46 PDT 2009

On 07/06/09 15:49, Vladimir Kozlov wrote:
> I would put "restart" variable at the same scope as
> the call since it is not used in
> src/share/vm/classfile/javaClasses.cpp
> I would add a comment about new decoding/encoding in
> src/share/vm/code/debugInfo.hpp
> The new code in src/share/vm/opto/bytecodeInfo.cpp
> should be an assert (not the flag setting) since
> the restart bytecode should be the top frame.
> assert(!caller_jvms->is_restart(), "there should be no restart 
> bytecode with inlining");

> Also in src/share/vm/opto/callnode.hpp add an assert
> to check that bci is no changed when _restart is set
> void set_bci(int bci) { assert(!_restart, ""); _bci = bci; }
Do you meant the restart bit must be false at the time that we
set up bci?

> We talked about using  PreserveJVMState pjvms(this) instead
> of restoring stack and restart flag in intrinsics?
> Why you did not use it?
 Just as we discussed a moment ago, I added an assert restart false before
we set it to true.

Here is the updated webrev link!



> thanks,
> Vladimir
> changpeng fang - Sun Microsystems - Santa Clara United States wrote:
>> Problem:
>> The problem is in intrinsics Object.clone and Arrays.copyOf. When 
>> de-optimization occurs on the slow path for array/instance
>> allocation, the Interpreter will continue execution in next bc after 
>> the slow allocation calls without actual copying.
>> Solution:
>> Add a restart bit in debuginfo to direct the deopt to restart 
>> execution of the bytecode  that invokes  Object.clone/Arrays.copyOf.
>> The restart bit is set up in Inline Intrinsics of 
>> Object.clone/Arrays.copyOf.
>> Tests:
>> Passed specjvm98, JPRT and the test case of clone in the bug report.
>> Thanks,
>> Changpeng

More information about the hotspot-compiler-dev mailing list