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

aarch64: JTreg TestStable tests failing

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: P4
    • Resolution: Fixed
    • Affects Version/s: 8, 9
    • Fix Version/s: 9
    • Component/s: hotspot
    • Labels:
      None
    • Environment:

      aarch64 development board

    • Subcomponent:
    • Resolved In Build:
      b68
    • CPU:
      arm
    • OS:
      linux

      Backports

        Description

        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);

          Attachments

            Issue Links

              Activity

                People

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

                  Dates

                  Due:
                  Created:
                  Updated:
                  Resolved:

                    Time Tracking

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