RFR 8226465 [lworld][c1] javac fails if C1 is enabled

Tobias Hartmann tobias.hartmann at oracle.com
Tue Jun 25 10:58:47 UTC 2019

Hi Ioi,

the string in c1_LIR.cpp:1884 is wrong (should be "substitutability_check").

Otherwise this looks good to me!

Best regards,

On 22.06.19 02:51, Ioi Lam wrote:
> 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