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

Vladimir Kozlov Vladimir.Kozlov at Sun.COM
Mon Jul 6 15:49:19 PDT 2009


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; }

We talked about using  PreserveJVMState pjvms(this) instead
of restoring stack and restart flag in intrinsics?
Why you did not use it?

thanks,
Vladimir

changpeng fang - Sun Microsystems - Santa Clara United States wrote:
> http://cr.openjdk.java.net/~cfang/6833129/webrev.00/
> 
> 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