RFR 8214689 [lworld][c1] aaload cannot handle unloaded class
Ioi Lam
ioi.lam at oracle.com
Tue Dec 11 05:34:25 UTC 2018
https://bugs.openjdk.java.net/browse/JDK-8214689
http://cr.openjdk.java.net/~iklam/valhalla/8214898-c1-aaload-on-unloaded-class.v01/
I added support for unloaded value klasses for the aaload/aastore
bytecodes in C1. As suggested by Tobias, when C1 compiles an aaload on
an array that has a "Q" signature, it emits code to check if the array
is a flattened array. If so, we deoptimize. When the deopt happens, the
target array type would be loaded already, so we can recompile(*1) the
method to emit correct code with flattened array access.
The guard code looks like this:
0x00007f9afceff283: mov 0x8(%rsi),%eax
0x00007f9afceff286: mov $0x800000000,%r12
0x00007f9afceff290: add %r12,%rax
0x00007f9afceff293: xor %r12,%r12
0x00007f9afceff296: mov 0xc(%rax),%eax
0x00007f9afceff299: sar $0x1d,%eax
0x00007f9afceff29c: cmp $0xfffffffffffffffd,%eax
;; 30 branch [EQ] [DeoptimizeStub: 0x00007f9aac031e90] [bci:6]
0x00007f9afceff29f: je 0x00007f9afceff4ef
0x00007f9afceff2a5: mov 0x14(%rsi),%eax //<< non-flattened load
I'll add a couple of test cases before pushing.
(*1)
My next step is to fix https://bugs.openjdk.java.net/browse/JDK-8215201,
so we can actually recompile on deoptimization.
Thanks
- Ioi
More information about the valhalla-dev
mailing list