--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalEliminationTest10.java 2017-03-20 17:37:20.000000000 -0700 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.test/src/org/graalvm/compiler/core/test/ConditionalEliminationTest10.java 2017-03-20 17:37:20.000000000 -0700 @@ -44,14 +44,17 @@ */ public class ConditionalEliminationTest10 extends ConditionalEliminationTestBase { + private static boolean condition1; + private static boolean condition2; + private static class TestClass { int x; } @SuppressWarnings("all") - public static int testSnippet(int a, TestClass t) { + public static int testSnippet1(TestClass t) { int result = 0; - if (a == 0) { + if (condition1) { GraalDirectives.controlFlowAnchor(); result = t.x; } @@ -61,11 +64,38 @@ @Test public void test1() { - StructuredGraph graph = parseEager("testSnippet", AllowAssumptions.YES); + test("testSnippet1", 1); + } + + @SuppressWarnings("all") + public static int testSnippet2(TestClass t) { + int result = 0; + if (condition1) { + GraalDirectives.controlFlowAnchor(); + result = t.x; + } else { + GraalDirectives.controlFlowAnchor(); + result = t.x; + } + + if (condition2) { + result = t.x; + GraalDirectives.controlFlowAnchor(); + } + + return result; + } + + @Test + public void test2() { + test("testSnippet2", 1); + } + + private void test(String snippet, int guardCount) { + StructuredGraph graph = parseEager(snippet, AllowAssumptions.YES); PhaseContext context = new PhaseContext(getProviders()); new LoweringPhase(new CanonicalizerPhase(), LoweringTool.StandardLoweringStage.HIGH_TIER).apply(graph, context); - Assert.assertEquals(2, graph.getNodes().filter(GuardNode.class).count()); - new DominatorConditionalEliminationPhase(true).apply(graph, context); - Assert.assertEquals(1, graph.getNodes().filter(GuardNode.class).count()); + DominatorConditionalEliminationPhase.create(true).apply(graph, context); + Assert.assertEquals(guardCount, graph.getNodes().filter(GuardNode.class).count()); } }