Mercurial > hg > graal-compiler
changeset 22500:4b4d7e7706eb
added test that VM deoptimization handles debug info containing VirtualObjects
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 24 Aug 2015 11:24:41 +0200 |
parents | 0e912e7580f9 |
children | d656166c77c7 |
files | graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java |
diffstat | 1 files changed, 31 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java Mon Aug 24 11:13:01 2015 +0200 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PartialEscapeAnalysisTest.java Mon Aug 24 11:24:41 2015 +0200 @@ -26,6 +26,7 @@ import org.junit.*; +import com.oracle.graal.api.directives.*; import com.oracle.graal.compiler.test.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; @@ -210,6 +211,36 @@ testPartialEscapeAnalysis("testBoxLoopSnippet", 0, 0, BoxNode.class, UnboxNode.class); } + static volatile int staticField; + static boolean executedDeoptimizeDirective; + + static class A { + String field; + } + + public static Object deoptWithVirtualObjectsSnippet() { + A a = new A(); + a.field = "field"; + + staticField = 5; + if (staticField == 5) { + GraalDirectives.deoptimize(); + executedDeoptimizeDirective = true; + } + + return a.field; + } + + /** + * Tests deoptimizing with virtual objects in debug info. + */ + @Test + public void testDeoptWithVirtualObjects() { + assertFalse(executedDeoptimizeDirective); + test("deoptWithVirtualObjectsSnippet"); + assertTrue(executedDeoptimizeDirective); + } + @SafeVarargs protected final void testPartialEscapeAnalysis(String snippet, double expectedProbability, int expectedCount, Class<? extends Node>... invalidNodeClasses) { prepareGraph(snippet, false);