8081669: aarch64: JTreg TestStable tests failing
authorenevill
Tue, 02 Jun 2015 14:28:08 +0000
changeset 30859 76147e537436
parent 30850 56166ce66037
child 30888 2a5a2426cee0
8081669: aarch64: JTreg TestStable tests failing Summary: Fix TestStable failures Reviewed-by: vlivanov Contributed-by: alexander.alexeev@caviumnetworks.com
hotspot/test/compiler/stable/StableConfiguration.java
--- a/hotspot/test/compiler/stable/StableConfiguration.java	Wed Jul 05 20:36:16 2017 +0200
+++ b/hotspot/test/compiler/stable/StableConfiguration.java	Tue Jun 02 14:28:08 2015 +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 immediately.
+    // 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);