Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8081669

aarch64: JTreg TestStable tests failing

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 9
    • 8, 9
    • hotspot
    • None
    • aarch64 development board

    • b68
    • arm
    • linux

        The following hotspot JTreg tests all currently fail.

        compiler/stable/TestStableByte.java
        compiler/stable/TestStableBoolean.java
        compiler/stable/TestStableChar.java
        compiler/stable/TestStableFloat.java
        compiler/stable/TestStableObject.java
        compiler/stable/TestStableDouble.java
        compiler/stable/TestStableInt.java
        compiler/stable/TestStableLong.java
        compiler/stable/TestStableShort.java

        This is due to the way the aarch64 port performs deoptimisation. This is best explained by the inline comment in the following patch.

        --- old/test/compiler/stable/StableConfiguration.java 2015-05-29 10:46:33.464027000 +0000
        +++ new/test/compiler/stable/StableConfiguration.java 2015-05-29 10:46:33.264027000 +0000
        @@ -41,10 +41,32 @@
                 System.out.println("Server Compiler: " + get());
             }
         
        + // The method 'get' below returns true if the method is server compiled
        + // and is used by the Stable tests to determine whether methods in
        + // general are being server compiled or not as the -XX:+FoldStableValues
        + // option is only applicable to -server.
        + //
        + // On aarch64 we DeOptimize when patching. This means that when the
        + // method is compiled as a result of -Xcomp it DeOptimizes immiediately.
        + // The result is that getMethodCompilationLevel returns 0. This means
        + // the method returns true based on java.vm.name.
        + //
        + // However when the tests are run with -XX:+TieredCompilation and
        + // -XX:TieredStopAtLevel=1 this fails because methods will always
        + // be client compiled.
        + //
        + // Solution is to add a simple method 'get1' which should never be
        + // DeOpted and use that to determine the compilation level instead.
        + static void get1() {
        + }
        +
        +
        +
             // ::get() is among immediately compiled methods.
             static boolean get() {
                 try {
        - Method m = StableConfiguration.class.getDeclaredMethod("get");
        + get1();
        + Method m = StableConfiguration.class.getDeclaredMethod("get1");
                     int level = WB.getMethodCompilationLevel(m);
                     if (level > 0) {
                       return (level == 4);

              enevill Ed Nevill
              enevill Ed Nevill
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved:

                  Estimated:
                  Original Estimate - 1 day
                  1d
                  Remaining:
                  Remaining Estimate - 1 day
                  1d
                  Logged:
                  Time Spent - Not Specified
                  Not Specified