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