RFR(S): 8237483: AArch64 C1 OopMap inserted twice fatal error

Nick Gasson nick.gasson at arm.com
Mon Jul 27 08:50:56 UTC 2020


Hi,

Bug: https://bugs.openjdk.java.net/browse/JDK-8237483
Webrev: http://cr.openjdk.java.net/~ngasson/8237483/webrev.0/

In the method java.util.zip.Inflater::inflate C1 generates these two LIR
instructions:

 724 move [c_rarg3|I] [Base:[c_rarg1|L] Disp: 2147483647|I] [patch_normal] [bci:95]
 728 throw [c_rarg3|I] [c_rarg0|L]  [bci:100]

The move instruction at 724 generates a runtime call to deoptimise the
method since this patching is not implemented on AArch64. An oop map is
inserted for the return PC of the runtime call
(LIR_Assembler::deoptimize_trap()). The following throw LIR instruction
then inserts another oop map at the same PC, triggering an assertion
failure.

To reproduce:

  make test TEST="compiler/c1/CanonicalizeArrayLength.java" \
     JTREG="VM_OPTIONS=-Xcomp"

This patch just adds a NOP in this situation to ensure the PCs are
unique. Not sure if there's a better way to do it?

Tested hotspot_all_no_apps, jdk_core.

--
Thanks,
Nick


More information about the hotspot-compiler-dev mailing list