[aarch64-port-dev ] RFR: JDK8: Fix failing jtreg tests

Edward Nevill ed at camswl.com
Wed Sep 24 12:06:40 UTC 2014


Hi,

The following jtreg hotspot tests currently fail

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

The reason for the failure is that the method 'StableConfiguration.get()' is incorrectly returning true (indicating 'server compiled') when the test is invoked with -XX:+TieredCompilation -XX:TieredStopAtLevel=1.

Patch below fixes the test.

OK to push to JDK8 only? I have added a comment to explain the change so it can be merged into JDK9 at a later stage.

All the best,
Ed.

--- CUT HERE ---
# HG changeset patch
# User Edward Nevill edward.nevill at linaro.org
# Date 1411559770 -3600
#      Wed Sep 24 12:56:10 2014 +0100
# Node ID 68cf8e406ce5fefb353901c8bb52882703ab649f
# Parent  3fd0a587111eeebb9826fd7e433bc89548da0eff
Fix failing TestStable tests

diff -r 3fd0a587111e -r 68cf8e406ce5 test/compiler/stable/StableConfiguration.java
--- a/test/compiler/stable/StableConfiguration.java	Tue Sep 23 18:34:47 2014 +0100
+++ b/test/compiler/stable/StableConfiguration.java	Wed Sep 24 12:56:10 2014 +0100
@@ -41,10 +41,30 @@
         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);
--- CUT HERE ---




More information about the aarch64-port-dev mailing list