test/compiler/stable/StableConfiguration.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/test/compiler/stable/StableConfiguration.java	Mon Feb 29 15:42:34 2016
--- new/test/compiler/stable/StableConfiguration.java	Mon Feb 29 15:42:34 2016

*** 29,84 **** --- 29,40 ---- import sun.hotspot.WhiteBox; public class StableConfiguration { static final WhiteBox WB = WhiteBox.getWhiteBox(); static final boolean isStableEnabled; static final boolean isServerWithStable; static { Boolean value = WB.getBooleanVMFlag("FoldStableValues"); isStableEnabled = (value == null ? false : value); isServerWithStable = isStableEnabled && get(); System.out.println("@Stable: " + (isStableEnabled ? "enabled" : "disabled")); 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 { get1(); Method m = StableConfiguration.class.getDeclaredMethod("get1"); int level = WB.getMethodCompilationLevel(m); if (level > 0) { return (level == 4); } else { String javaVM = System.getProperty("java.vm.name", ""); if (javaVM.contains("Server")) return true; if (javaVM.contains("Client")) return false; throw new Error("Unknown VM type: "+javaVM); } } catch (NoSuchMethodException e) { throw new Error(e); } } }

test/compiler/stable/StableConfiguration.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File