# HG changeset patch # User Lukas Stadler # Date 1389953990 -3600 # Node ID 0e8c22aa6ec3ae1388661fab573cd56be30213df # Parent 4efb3399a36e9325c296cd145038f8569aa8d735 adapt tests for new IfNode and MergeNode simplifications diff -r 4efb3399a36e -r 0e8c22aa6ec3 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CompareCanonicalizerTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CompareCanonicalizerTest.java Fri Jan 17 09:38:39 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/CompareCanonicalizerTest.java Fri Jan 17 11:19:50 2014 +0100 @@ -46,11 +46,6 @@ return ret.result(); } - private static IfNode getIfNode(StructuredGraph graph) { - assertTrue(graph.start().next() instanceof IfNode); - return (IfNode) graph.start().next(); - } - @Test public void testCanonicalComparison() { StructuredGraph referenceGraph = parse("referenceCanonicalComparison"); @@ -103,9 +98,9 @@ for (int i = 1; i <= 4; i++) { StructuredGraph graph = getCanonicalizedGraph("integerTest" + i); - IfNode ifNode = getIfNode(graph); - assertTrue(ifNode.condition() instanceof IntegerTestNode); - IntegerTestNode test = (IntegerTestNode) ifNode.condition(); + ReturnNode returnNode = (ReturnNode) graph.start().next(); + ConditionalNode conditional = (ConditionalNode) returnNode.result(); + IntegerTestNode test = (IntegerTestNode) conditional.condition(); ParameterNode param0 = graph.getParameter(0); ParameterNode param1 = graph.getParameter(1); assertTrue((test.x() == param0 && test.y() == param1) || (test.x() == param1 && test.y() == param0)); @@ -137,7 +132,8 @@ result = getResult(getCanonicalizedGraph("integerTestCanonicalization2")); assertTrue(result.isConstant() && result.asConstant().asLong() == 1); StructuredGraph graph = getCanonicalizedGraph("integerTestCanonicalization3"); - assertEquals(2, graph.getNodes(ReturnNode.class).count()); + assertEquals(1, graph.getNodes(ReturnNode.class).count()); + assertTrue(graph.getNodes(ReturnNode.class).first().result() instanceof ConditionalNode); } public static int integerTestCanonicalization1(boolean b) { diff -r 4efb3399a36e -r 0e8c22aa6ec3 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest.java Fri Jan 17 09:38:39 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ConditionalEliminationTest.java Fri Jan 17 11:19:50 2014 +0100 @@ -154,14 +154,18 @@ @SuppressWarnings("unused") public static int testDisjunctionSnippet(Object a) { - if (a instanceof Integer) { - if (a == null) { - return -1; + try { + if (a instanceof Integer) { + if (a == null) { + return -1; + } else { + return 2; + } } else { - return 2; + return 3; } - } else { - return 3; + } finally { + field = null; } } diff -r 4efb3399a36e -r 0e8c22aa6ec3 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Fri Jan 17 09:38:39 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MemoryScheduleTest.java Fri Jan 17 11:19:50 2014 +0100 @@ -131,6 +131,7 @@ } else { container.b = 15; } + container.obj = null; } } @@ -208,7 +209,7 @@ @Test public void testLoop3() { SchedulePhase schedule = getFinalSchedule("testLoop3Snippet", TestMode.WITHOUT_FRAMESTATES); - assertEquals(7, schedule.getCFG().getBlocks().length); + assertEquals(6, schedule.getCFG().getBlocks().length); assertReadWithinStartBlock(schedule, true); assertReadWithinAllReturnBlocks(schedule, false); } @@ -282,7 +283,7 @@ @Test public void testIfRead1() { SchedulePhase schedule = getFinalSchedule("testIfRead1Snippet", TestMode.WITHOUT_FRAMESTATES); - assertEquals(4, schedule.getCFG().getBlocks().length); + assertEquals(3, schedule.getCFG().getBlocks().length); assertReadWithinStartBlock(schedule, true); assertReadAndWriteInSameBlock(schedule, false); } @@ -303,7 +304,7 @@ @Test public void testIfRead2() { SchedulePhase schedule = getFinalSchedule("testIfRead2Snippet", TestMode.WITHOUT_FRAMESTATES); - assertEquals(4, schedule.getCFG().getBlocks().length); + assertEquals(3, schedule.getCFG().getBlocks().length); assertEquals(1, schedule.getCFG().graph.getNodes().filter(FloatingReadNode.class).count()); assertReadWithinStartBlock(schedule, false); assertReadWithinAllReturnBlocks(schedule, false); diff -r 4efb3399a36e -r 0e8c22aa6ec3 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MergeCanonicalizerTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/MergeCanonicalizerTest.java Fri Jan 17 11:19:50 2014 +0100 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.compiler.test; + +import org.junit.*; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.debug.*; +import com.oracle.graal.nodes.*; +import com.oracle.graal.phases.common.*; +import com.oracle.graal.phases.tiers.*; + +public class MergeCanonicalizerTest extends GraalCompilerTest { + + public static int staticField; + + private int field; + + @Test + public void testSplitReturn() { + test("testSplitReturnSnippet", 2); + testReturnCount("testSplitReturnSnippet", 2); + } + + public int testSplitReturnSnippet(int b) { + int v; + if (b < 0) { + staticField = 1; + v = 10; + } else { + staticField = 2; + v = 20; + } + int i = field; + i = field + i; + return v; + } + + private void testReturnCount(String snippet, int returnCount) { + StructuredGraph graph = parse(snippet); + new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false))); + new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), new Assumptions(false))); + Debug.dump(graph, "Graph"); + assertEquals(returnCount, graph.getNodes(ReturnNode.class).count()); + } +} diff -r 4efb3399a36e -r 0e8c22aa6ec3 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ScalarTypeSystemTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ScalarTypeSystemTest.java Fri Jan 17 09:38:39 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ScalarTypeSystemTest.java Fri Jan 17 11:19:50 2014 +0100 @@ -167,7 +167,6 @@ StructuredGraph graph = parse(snippet); Debug.dump(graph, "Graph"); Assumptions assumptions = new Assumptions(false); - new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions)); new ConditionalEliminationPhase(getMetaAccess()).apply(graph); new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions)); StructuredGraph referenceGraph = parse(referenceSnippet); diff -r 4efb3399a36e -r 0e8c22aa6ec3 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/TypeSystemTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/TypeSystemTest.java Fri Jan 17 09:38:39 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/TypeSystemTest.java Fri Jan 17 11:19:50 2014 +0100 @@ -98,13 +98,11 @@ test("test4Snippet", "referenceSnippet3"); } - public static final Object constantObject1 = "1"; - public static final Object constantObject2 = "2"; - public static final Object constantObject3 = "3"; - + @SuppressWarnings("unused") public static int test4Snippet(Object o) { if (o == null) { - if (o == constantObject1) { + Object o2 = Integer.class; + if (o == o2) { return 3; } else { return 1; @@ -121,40 +119,41 @@ public static int referenceSnippet5(Object o, Object a) { if (o == null) { - if (a == constantObject1 || a == constantObject2) { + if (a == Integer.class || a == Double.class) { return 1; } } else { - if (a == constantObject2 || a == constantObject3) { + if (a == Double.class || a == Long.class) { return 11; } } - if (a == constantObject1) { + if (a == Integer.class) { return 3; } return 5; } + @SuppressWarnings("unused") public static int test5Snippet(Object o, Object a) { if (o == null) { - if (a == constantObject1 || a == constantObject2) { + if (a == Integer.class || a == Double.class) { if (a == null) { return 10; } return 1; } } else { - if (a == constantObject2 || a == constantObject3) { + if (a == Double.class || a == Long.class) { if (a != null) { return 11; } return 2; } } - if (a == constantObject1) { + if (a == Integer.class) { return 3; } - if (a == constantObject2) { + if (a == Double.class) { return 4; } return 5; @@ -185,7 +184,6 @@ StructuredGraph graph = parse(snippet); Debug.dump(graph, "Graph"); Assumptions assumptions = new Assumptions(false); - new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions)); new ConditionalEliminationPhase(getMetaAccess()).apply(graph); new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions)); // a second canonicalizer is needed to process nested MaterializeNodes @@ -198,8 +196,8 @@ @Override protected void assertEquals(StructuredGraph expected, StructuredGraph graph) { if (getNodeCountExcludingUnusedConstants(expected) != getNodeCountExcludingUnusedConstants(graph)) { - outputGraph(expected, "expected"); - outputGraph(graph, "actual"); + Debug.dump(expected, "expected (node count)"); + Debug.dump(graph, "graph (node count)"); Assert.fail("Graphs do not have the same number of nodes: " + expected.getNodeCount() + " vs. " + graph.getNodeCount()); } } @@ -239,12 +237,11 @@ private void testHelper(String snippet, Class clazz) { StructuredGraph graph = parse(snippet); - Debug.dump(graph, "Graph"); Assumptions assumptions = new Assumptions(false); new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions)); new ConditionalEliminationPhase(getMetaAccess()).apply(graph); new CanonicalizerPhase(true).apply(graph, new PhaseContext(getProviders(), assumptions)); - Debug.dump(graph, "Graph"); + Debug.dump(graph, "Graph " + snippet); Assert.assertFalse("shouldn't have nodes of type " + clazz, graph.getNodes().filter(clazz).iterator().hasNext()); } } diff -r 4efb3399a36e -r 0e8c22aa6ec3 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java Fri Jan 17 09:38:39 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ea/PEAReadEliminationTest.java Fri Jan 17 11:19:50 2014 +0100 @@ -24,6 +24,8 @@ import static org.junit.Assert.*; +import java.util.*; + import org.junit.*; import com.oracle.graal.api.code.*; @@ -194,14 +196,14 @@ @Test public void testPhi() { - ValueNode result = getReturn("testPhiSnippet").result(); + processMethod("testPhiSnippet"); assertTrue(graph.getNodes().filter(LoadFieldNode.class).isEmpty()); - assertTrue(result instanceof PhiNode); - PhiNode phi = (PhiNode) result; - assertTrue(phi.valueAt(0).isConstant()); - assertTrue(phi.valueAt(1).isConstant()); - assertEquals(1, phi.valueAt(0).asConstant().asInt()); - assertEquals(2, phi.valueAt(1).asConstant().asInt()); + List returnNodes = graph.getNodes(ReturnNode.class).snapshot(); + assertEquals(2, returnNodes.size()); + assertTrue(returnNodes.get(0).predecessor() instanceof StoreFieldNode); + assertTrue(returnNodes.get(1).predecessor() instanceof StoreFieldNode); + assertTrue(returnNodes.get(0).result().isConstant()); + assertTrue(returnNodes.get(1).result().isConstant()); } @SuppressWarnings("all") diff -r 4efb3399a36e -r 0e8c22aa6ec3 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassSubstitutions.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassSubstitutions.java Fri Jan 17 09:38:39 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ClassSubstitutions.java Fri Jan 17 11:19:50 2014 +0100 @@ -31,7 +31,6 @@ import com.oracle.graal.api.replacements.*; import com.oracle.graal.hotspot.nodes.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.word.*;