< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ea/PartialEscapeAnalysisTest.java

Print this page
rev 52509 : [mq]: graal2


 276     @Test
 277     public void testDeoptWithVirtualObjects() {
 278         assertFalse(executedDeoptimizeDirective);
 279         test("deoptWithVirtualObjectsSnippet");
 280         assertTrue(executedDeoptimizeDirective);
 281     }
 282 
 283     @SafeVarargs
 284     protected final void testPartialEscapeAnalysis(String snippet, double expectedProbability, int expectedCount, Class<? extends Node>... invalidNodeClasses) {
 285         prepareGraph(snippet, false);
 286         for (AbstractMergeNode merge : graph.getNodes(AbstractMergeNode.TYPE)) {
 287             merge.setStateAfter(null);
 288         }
 289         new DeadCodeEliminationPhase().apply(graph);
 290         new CanonicalizerPhase().apply(graph, context);
 291         try {
 292             Assert.assertTrue("partial escape analysis should have removed all NewInstanceNode allocations", graph.getNodes().filter(NewInstanceNode.class).isEmpty());
 293             Assert.assertTrue("partial escape analysis should have removed all NewArrayNode allocations", graph.getNodes().filter(NewArrayNode.class).isEmpty());
 294 
 295             ControlFlowGraph cfg = ControlFlowGraph.compute(graph, true, true, false, false);
 296             double probabilitySum = 0;
 297             int materializeCount = 0;
 298             for (CommitAllocationNode materialize : graph.getNodes().filter(CommitAllocationNode.class)) {
 299                 probabilitySum += cfg.blockFor(materialize).probability() * materialize.getVirtualObjects().size();
 300                 materializeCount += materialize.getVirtualObjects().size();
 301             }
 302             Assert.assertEquals("unexpected number of MaterializeObjectNodes", expectedCount, materializeCount);
 303             Assert.assertEquals("unexpected probability of MaterializeObjectNodes", expectedProbability, probabilitySum, 0.01);
 304             for (Node node : graph.getNodes()) {
 305                 for (Class<? extends Node> clazz : invalidNodeClasses) {
 306                     Assert.assertFalse("instance of invalid class: " + clazz.getSimpleName(), clazz.isInstance(node) && node.usages().isNotEmpty());
 307                 }
 308             }
 309         } catch (AssertionError e) {
 310             TypeSystemTest.outputGraph(graph, snippet + ": " + e.getMessage());
 311             throw e;
 312         }
 313     }
 314 }


 276     @Test
 277     public void testDeoptWithVirtualObjects() {
 278         assertFalse(executedDeoptimizeDirective);
 279         test("deoptWithVirtualObjectsSnippet");
 280         assertTrue(executedDeoptimizeDirective);
 281     }
 282 
 283     @SafeVarargs
 284     protected final void testPartialEscapeAnalysis(String snippet, double expectedProbability, int expectedCount, Class<? extends Node>... invalidNodeClasses) {
 285         prepareGraph(snippet, false);
 286         for (AbstractMergeNode merge : graph.getNodes(AbstractMergeNode.TYPE)) {
 287             merge.setStateAfter(null);
 288         }
 289         new DeadCodeEliminationPhase().apply(graph);
 290         new CanonicalizerPhase().apply(graph, context);
 291         try {
 292             Assert.assertTrue("partial escape analysis should have removed all NewInstanceNode allocations", graph.getNodes().filter(NewInstanceNode.class).isEmpty());
 293             Assert.assertTrue("partial escape analysis should have removed all NewArrayNode allocations", graph.getNodes().filter(NewArrayNode.class).isEmpty());
 294 
 295             ControlFlowGraph cfg = ControlFlowGraph.compute(graph, true, true, false, false);
 296             double frequencySum = 0;
 297             int materializeCount = 0;
 298             for (CommitAllocationNode materialize : graph.getNodes().filter(CommitAllocationNode.class)) {
 299                 frequencySum += cfg.blockFor(materialize).getRelativeFrequency() * materialize.getVirtualObjects().size();
 300                 materializeCount += materialize.getVirtualObjects().size();
 301             }
 302             Assert.assertEquals("unexpected number of MaterializeObjectNodes", expectedCount, materializeCount);
 303             Assert.assertEquals("unexpected frequency of MaterializeObjectNodes", expectedProbability, frequencySum, 0.01);
 304             for (Node node : graph.getNodes()) {
 305                 for (Class<? extends Node> clazz : invalidNodeClasses) {
 306                     Assert.assertFalse("instance of invalid class: " + clazz.getSimpleName(), clazz.isInstance(node) && node.usages().isNotEmpty());
 307                 }
 308             }
 309         } catch (AssertionError e) {
 310             TypeSystemTest.outputGraph(graph, snippet + ": " + e.getMessage());
 311             throw e;
 312         }
 313     }
 314 }
< prev index next >