[aarch64-port-dev ] 8u-aarch64: Backport 8171537: aarch64: compiler/c1/Test6849574.java generates guarantee failure in C1

Andrew Dinn adinn at redhat.com
Tue Aug 4 08:26:24 UTC 2020


Hi Felix,

Sure, it's ok to push this now.

regards,


Andrew Dinn
-----------
Red Hat Distinguished Engineer
Red Hat UK Ltd
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham, Michael ("Mike") O'Neill

On 03/08/2020 13:43, Yangfei (Felix) wrote:
> Hi,
> 
> This 8u-aarch64 backport has been discussed and approved by aph before in:
>     https://mail.openjdk.java.net/pipermail/aarch64-port-dev/2019-June/007463.html 
> 
> Bug: https://bugs.openjdk.java.net/browse/JDK-8171537 
> Original jdk9 patch: http://hg.openjdk.java.net/jdk9/jdk9/hotspot/rev/a3bd5804b4be 
> Original review thread: https://mail.openjdk.java.net/pipermail/aarch64-port-dev/2016-December/004036.html 
> 
> This bug is still reproducible with the following test (copied from test/hotspot/jtreg/compiler/c1/Test6849574.java in jdk9+):
> 
> $ cat Test6849574.java
> import java.util.concurrent.atomic.AtomicReferenceArray;
> 
> public class Test6849574 extends Thread {
> 
>     public static void main(String[] args) {
>         AtomicReferenceArray a = new AtomicReferenceArray(10000);
>         for (int i = 0; i < 100000; i++) {
>             a.getAndSet(9999, new Object());
>             if (i > 99990) System.gc();
>         }
>     }
> }
> 
> $ java -XX:TieredStopAtLevel=1 -XX:MaxInlineSize=50 Test6849574
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  Internal Error (assembler_aarch64.hpp:237), pid=2965, tid=0x0000fffebc4dd1e0
> #  guarantee(val < (1U << nbits)) failed: Field too big for insn
> #
> # JRE version: OpenJDK Runtime Environment (8.0) (build 1.8.0-internal-yangfei_2020_08_03_20_20-b00)
> # Java VM: OpenJDK 64-Bit Server VM (25.71-b00 mixed mode linux-aarch64 compressed oops)
> # Core dump written. Default location: /home/yangfei/test/core or core.2965
> ......
> 
> 8u-aarch64 backport is simpile:
> diff -r e385349cb315 src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp
> --- a/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp    Fri Jul 08 17:11:37 2016 +0100
> +++ b/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp    Mon Aug 03 20:36:04 2020 +0800
> @@ -3145,7 +3145,7 @@
>  }
> 
>  void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr dest, LIR_Opr tmp_op) {
> -  Address addr = as_Address(src->as_address_ptr(), noreg);
> +  Address addr = as_Address(src->as_address_ptr());
>    BasicType type = src->type();
>    bool is_oop = type == T_OBJECT || type == T_ARRAY;
> 
> Performed full jtreg test with aarch64 release build.  Please take another look.
> 
> Thanks,
> Felix
> 



More information about the aarch64-port-dev mailing list