RFR 8226465 [lworld][c1] javac fails if C1 is enabled
Ioi Lam
ioi.lam at oracle.com
Sat Jun 22 00:51:25 UTC 2019
https://bugs.openjdk.java.net/browse/JDK-8226465
http://cr.openjdk.java.net/~iklam/valhalla/8226465-javac-fails-with-EnableValhallaC1.v01/
The bug is similar to some of my previous bugs :-(
The problem is in the implementation of acmp substitutability. The code in
c1_LIRGenerator.cpp has complex branches, where some registers are not
written in
some of the branches. C1's register allocation doesn't allow this.
The fix is to move the branches into a low-level IR operation
(OpNullFreeArrayCheck).
This makes the register allocator happy.
I also took this chance to optimize the x64 code a bit. Now the check for
markOopDesc::always_locked_pattern is down to 5 instructions (from 9
before), with one
fewer temp register.
mov $0x405, %r10d
and (%left), %r10d /* if need to check left */
and (%right), %r10d /* if need to check right */
cmp $0x405, $r10d
jne L_oops_not_equal
Thanks
- Ioi
More information about the valhalla-dev
mailing list