# HG changeset patch # User enevill # Date 1433255288 0 # Node ID 76147e5374368c2e0b9712ee84be81c36676c176 # Parent 56166ce66037952fa21e9f680b31bf8eb47312c0 8081669: aarch64: JTreg TestStable tests failing Summary: Fix TestStable failures Reviewed-by: vlivanov Contributed-by: alexander.alexeev@caviumnetworks.com diff -r 56166ce66037 -r 76147e537436 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);