< prev index next >

test/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java

Print this page

        

*** 31,61 **** * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission * jdk.vm.ci.hotspot.CompilerToVMHelper * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+WhiteBoxAPI -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI ! * -XX:CompileCommand=exclude,*::check -XX:+DoEscapeAnalysis * compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest */ package compiler.jvmci.compilerToVM; import compiler.jvmci.common.CTVMUtilities; import jdk.vm.ci.hotspot.CompilerToVMHelper; import jdk.test.lib.Asserts; - import jdk.test.lib.Utils; import sun.hotspot.WhiteBox; import java.lang.reflect.Method; import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethodImpl; import jdk.vm.ci.hotspot.HotSpotStackFrameReference; public class MaterializeVirtualObjectTest { private static final WhiteBox WB = WhiteBox.getWhiteBox(); - private static final int INVOCATIONS = 100_000; private static final Method METHOD; private static final HotSpotResolvedJavaMethodImpl RESOLVED_METHOD; ! private final boolean invalidate; static { try { METHOD = MaterializeVirtualObjectTest.class.getDeclaredMethod( "testFrame", String.class, Integer.class); --- 31,67 ---- * @run main ClassFileInstaller sun.hotspot.WhiteBox * sun.hotspot.WhiteBox$WhiteBoxPermission * jdk.vm.ci.hotspot.CompilerToVMHelper * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:+WhiteBoxAPI -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI ! * -XX:CompileCommand=exclude,*::check -XX:+DoEscapeAnalysis -Xbatch ! * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.invalidate=false ! * compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest ! * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions ! * -XX:+WhiteBoxAPI -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI ! * -XX:CompileCommand=exclude,*::check -XX:+DoEscapeAnalysis -Xbatch ! * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.invalidate=true * compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest */ package compiler.jvmci.compilerToVM; import compiler.jvmci.common.CTVMUtilities; + import compiler.testlibrary.CompilerUtils; import jdk.vm.ci.hotspot.CompilerToVMHelper; import jdk.test.lib.Asserts; import sun.hotspot.WhiteBox; import java.lang.reflect.Method; import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethodImpl; import jdk.vm.ci.hotspot.HotSpotStackFrameReference; public class MaterializeVirtualObjectTest { private static final WhiteBox WB = WhiteBox.getWhiteBox(); private static final Method METHOD; private static final HotSpotResolvedJavaMethodImpl RESOLVED_METHOD; ! private static final boolean INVALIDATE = Boolean.getBoolean( ! "compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.invalidate"); static { try { METHOD = MaterializeVirtualObjectTest.class.getDeclaredMethod( "testFrame", String.class, Integer.class);
*** 63,115 **** throw new Error("Can't get executable for test method", e); } RESOLVED_METHOD = CTVMUtilities.getResolvedMethod(METHOD); } ! public MaterializeVirtualObjectTest(boolean invalidate) { ! this.invalidate = invalidate; } ! public static void main(String[] args) { ! new MaterializeVirtualObjectTest(true).test(); ! new MaterializeVirtualObjectTest(false).test(); } private void test() { ! System.out.printf("CASE: invalidate=%b%n", invalidate); ! for (int i = 0; i < INVOCATIONS; i++) { ! testFrame("someString", i); ! } ! Utils.waitForCondition(() -> WB.isMethodCompiled(METHOD), 100L); ! Asserts.assertTrue(WB.isMethodCompiled(METHOD)); ! testFrame("someString", INVOCATIONS); } ! private void testFrame(String str, Integer iteration) { Helper helper = new Helper(str); ! check(iteration); Asserts.assertTrue((helper.string != null) && (this != null) ! && (helper != null), "Some locals are null"); } ! private void check(int iteration) { // Materialize virtual objects on last invocation ! if (iteration == INVOCATIONS) { HotSpotStackFrameReference hsFrame = CompilerToVMHelper .getNextStackFrame(/* topmost frame */ null, new HotSpotResolvedJavaMethodImpl[]{ RESOLVED_METHOD}, /* don't skip any */ 0); ! Asserts.assertNotNull(hsFrame, "Got null frame"); ! Asserts.assertTrue(WB.isMethodCompiled(METHOD), ! "Expected test method to be compiled"); ! Asserts.assertTrue(hsFrame.hasVirtualObjects(), ! "Has no virtual object before materialization"); ! CompilerToVMHelper.materializeVirtualObjects(hsFrame, invalidate); ! Asserts.assertFalse(hsFrame.hasVirtualObjects(), ! "Has virtual object after materialization"); ! Asserts.assertEQ(WB.isMethodCompiled(METHOD), !invalidate, ! "Unexpected compiled status"); } } private class Helper { public String string; --- 69,131 ---- throw new Error("Can't get executable for test method", e); } RESOLVED_METHOD = CTVMUtilities.getResolvedMethod(METHOD); } ! public static void main(String[] args) { ! int levels[] = CompilerUtils.getAvailableCompilationLevels(); ! // we need compilation level 4 to use EscapeAnalysis ! if (levels.length < 1 || levels[levels.length - 1] != 4) { ! System.out.println("INFO: Test needs compilation level 4 to" ! + " be available. Skipping."); ! } else { ! new MaterializeVirtualObjectTest().test(); ! } } ! private static String getName() { ! return "CASE: invalidate=" + INVALIDATE; } private void test() { ! System.out.println(getName()); ! Asserts.assertFalse(WB.isMethodCompiled(METHOD), getName() ! + " : method unexpectedly compiled"); ! /* need to call testFrame at least once to be able to compile it, so ! calling with materialize=false, because testFrame is not compiled */ ! testFrame("someString", /* materialize= */ false); ! WB.enqueueMethodForCompilation(METHOD, 4); ! Asserts.assertTrue(WB.isMethodCompiled(METHOD), getName() ! + "Method unexpectedly not compiled"); ! // calling with materialize=true to materialize compiled testFrame ! testFrame("someString", /* materialize= */ true); } ! private void testFrame(String str, boolean materialize) { Helper helper = new Helper(str); ! check(materialize); Asserts.assertTrue((helper.string != null) && (this != null) ! && (helper != null), getName() + " : some locals are null"); } ! private void check(boolean materialize) { // Materialize virtual objects on last invocation ! if (materialize) { HotSpotStackFrameReference hsFrame = CompilerToVMHelper .getNextStackFrame(/* topmost frame */ null, new HotSpotResolvedJavaMethodImpl[]{ RESOLVED_METHOD}, /* don't skip any */ 0); ! Asserts.assertNotNull(hsFrame, getName() + " : got null frame"); ! Asserts.assertTrue(WB.isMethodCompiled(METHOD), getName() ! + " : test method should be compiled"); ! Asserts.assertTrue(hsFrame.hasVirtualObjects(), getName() ! + " : has no virtual object before materialization"); ! CompilerToVMHelper.materializeVirtualObjects(hsFrame, INVALIDATE); ! Asserts.assertFalse(hsFrame.hasVirtualObjects(), getName() ! + " : has virtual object after materialization"); ! Asserts.assertEQ(WB.isMethodCompiled(METHOD), !INVALIDATE, getName() ! + " : unexpected compiled status"); } } private class Helper { public String string;
< prev index next >