Mercurial > hg > truffle
changeset 13705:ac5b0f31f7a2
Truffle API-change: FrameDescriptors are now stored in the RootNode in a final field instead of the CallTarget.
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/AssumptionPartialEvaluationTest.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/AssumptionPartialEvaluationTest.java Fri Jan 17 17:06:08 2014 +0100 @@ -42,8 +42,8 @@ FrameDescriptor fd = new FrameDescriptor(); Assumption assumption = Truffle.getRuntime().createAssumption(); AbstractTestNode result = new ConstantWithAssumptionTestNode(assumption, 42); - RootTestNode rootNode = new RootTestNode("constantValue", result); - InstalledCode installedCode = assertPartialEvalEquals("constant42", rootNode, fd); + RootTestNode rootNode = new RootTestNode(fd, "constantValue", result); + InstalledCode installedCode = assertPartialEvalEquals("constant42", rootNode); Assert.assertTrue(installedCode.isValid()); try { assertEquals(42, installedCode.execute(null, null, null));
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/PartialEvaluationTest.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/PartialEvaluationTest.java Fri Jan 17 17:06:08 2014 +0100 @@ -45,7 +45,6 @@ import com.oracle.graal.truffle.*; import com.oracle.graal.virtual.phases.ea.*; import com.oracle.truffle.api.*; -import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.nodes.*; public class PartialEvaluationTest extends GraalCompilerTest { @@ -64,13 +63,13 @@ DebugEnvironment.initialize(System.out); } - protected InstalledCode assertPartialEvalEquals(String methodName, RootNode root, FrameDescriptor descriptor) { - return assertPartialEvalEquals(methodName, root, descriptor, Arguments.EMPTY_ARGUMENTS); + protected InstalledCode assertPartialEvalEquals(String methodName, RootNode root) { + return assertPartialEvalEquals(methodName, root, Arguments.EMPTY_ARGUMENTS); } - protected InstalledCode assertPartialEvalEquals(String methodName, RootNode root, FrameDescriptor descriptor, Arguments arguments) { + protected InstalledCode assertPartialEvalEquals(String methodName, RootNode root, Arguments arguments) { Assumptions assumptions = new Assumptions(true); - StructuredGraph actual = partialEval(root, descriptor, arguments, assumptions, true); + StructuredGraph actual = partialEval(root, arguments, assumptions, true); InstalledCode result = new TruffleCompilerImpl().compileMethodHelper(actual, GraphBuilderConfiguration.getDefault(), assumptions); StructuredGraph expected = parseForComparison(methodName); removeFrameStates(actual); @@ -78,21 +77,21 @@ return result; } - protected void assertPartialEvalNoInvokes(RootNode root, FrameDescriptor descriptor) { - assertPartialEvalNoInvokes(root, descriptor, Arguments.EMPTY_ARGUMENTS); + protected void assertPartialEvalNoInvokes(RootNode root) { + assertPartialEvalNoInvokes(root, Arguments.EMPTY_ARGUMENTS); } - protected void assertPartialEvalNoInvokes(RootNode root, FrameDescriptor descriptor, Arguments arguments) { + protected void assertPartialEvalNoInvokes(RootNode root, Arguments arguments) { Assumptions assumptions = new Assumptions(true); - StructuredGraph actual = partialEval(root, descriptor, arguments, assumptions, true); + StructuredGraph actual = partialEval(root, arguments, assumptions, true); removeFrameStates(actual); for (MethodCallTargetNode node : actual.getNodes(MethodCallTargetNode.class)) { Assert.fail("Found invalid method call target node: " + node); } } - protected StructuredGraph partialEval(RootNode root, FrameDescriptor descriptor, Arguments arguments, final Assumptions assumptions, final boolean canonicalizeReads) { - final OptimizedCallTarget compilable = (OptimizedCallTarget) Truffle.getRuntime().createCallTarget(root, descriptor); + protected StructuredGraph partialEval(RootNode root, Arguments arguments, final Assumptions assumptions, final boolean canonicalizeReads) { + final OptimizedCallTarget compilable = (OptimizedCallTarget) Truffle.getRuntime().createCallTarget(root); // Executed AST so that all classes are loaded and initialized. do {
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/SimplePartialEvaluationTest.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/SimplePartialEvaluationTest.java Fri Jan 17 17:06:08 2014 +0100 @@ -38,28 +38,28 @@ public void constantValue() { FrameDescriptor fd = new FrameDescriptor(); AbstractTestNode result = new ConstantTestNode(42); - assertPartialEvalEquals("constant42", new RootTestNode("constantValue", result), fd); + assertPartialEvalEquals("constant42", new RootTestNode(fd, "constantValue", result)); } @Test public void addConstants() { FrameDescriptor fd = new FrameDescriptor(); AbstractTestNode result = new AddTestNode(new ConstantTestNode(40), new ConstantTestNode(2)); - assertPartialEvalEquals("constant42", new RootTestNode("addConstants", result), fd); + assertPartialEvalEquals("constant42", new RootTestNode(fd, "addConstants", result)); } @Test public void sequenceConstants() { FrameDescriptor fd = new FrameDescriptor(); AbstractTestNode result = new BlockTestNode(new AbstractTestNode[]{new ConstantTestNode(40), new ConstantTestNode(42)}); - assertPartialEvalEquals("constant42", new RootTestNode("sequenceConstants", result), fd); + assertPartialEvalEquals("constant42", new RootTestNode(fd, "sequenceConstants", result)); } @Test public void localVariable() { FrameDescriptor fd = new FrameDescriptor(); AbstractTestNode result = new BlockTestNode(new AbstractTestNode[]{new StoreLocalTestNode("x", fd, new ConstantTestNode(42)), new LoadLocalTestNode("x", fd)}); - assertPartialEvalEquals("constant42", new RootTestNode("localVariable", result), fd); + assertPartialEvalEquals("constant42", new RootTestNode(fd, "localVariable", result)); } @Test @@ -72,7 +72,7 @@ } AbstractTestNode result = new BlockTestNode(children); - assertPartialEvalEquals("constant42", new RootTestNode("longSequenceConstants", result), fd); + assertPartialEvalEquals("constant42", new RootTestNode(fd, "longSequenceConstants", result)); } @Test @@ -82,7 +82,7 @@ for (int i = 0; i < 20; ++i) { result = new AddTestNode(result, new ConstantTestNode(2)); } - assertPartialEvalEquals("constant42", new RootTestNode("longAddConstants", result), fd); + assertPartialEvalEquals("constant42", new RootTestNode(fd, "longAddConstants", result)); } @Test @@ -90,7 +90,7 @@ FrameDescriptor fd = new FrameDescriptor(); AbstractTestNode result = new BlockTestNode(new AbstractTestNode[]{new StoreLocalTestNode("x", fd, new ConstantTestNode(40)), new StoreLocalTestNode("x", fd, new AddTestNode(new LoadLocalTestNode("x", fd), new ConstantTestNode(2))), new LoadLocalTestNode("x", fd)}); - assertPartialEvalEquals("constant42", new RootTestNode("mixLocalAndAdd", result), fd); + assertPartialEvalEquals("constant42", new RootTestNode(fd, "mixLocalAndAdd", result)); } @Test @@ -98,7 +98,7 @@ FrameDescriptor fd = new FrameDescriptor(); AbstractTestNode result = new BlockTestNode(new AbstractTestNode[]{new StoreLocalTestNode("x", fd, new ConstantTestNode(0)), new LoopTestNode(21, new StoreLocalTestNode("x", fd, new AddTestNode(new LoadLocalTestNode("x", fd), new ConstantTestNode(2))))}); - assertPartialEvalEquals("constant42", new RootTestNode("loop", result), fd); + assertPartialEvalEquals("constant42", new RootTestNode(fd, "loop", result)); } @Test @@ -106,6 +106,6 @@ FrameDescriptor fd = new FrameDescriptor(); AbstractTestNode result = new BlockTestNode(new AbstractTestNode[]{new StoreLocalTestNode("x", fd, new ConstantTestNode(0)), new LoopTestNode(42, new StoreLocalTestNode("x", fd, new AddTestNode(new LoadLocalTestNode("x", fd), new ConstantTestNode(1))))}); - assertPartialEvalNoInvokes(new RootTestNode("loop", result), fd); + assertPartialEvalNoInvokes(new RootTestNode(fd, "loop", result)); } }
--- a/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/nodes/RootTestNode.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.graal.truffle.test/src/com/oracle/graal/truffle/test/nodes/RootTestNode.java Fri Jan 17 17:06:08 2014 +0100 @@ -30,8 +30,8 @@ private final String name; @Child AbstractTestNode node; - public RootTestNode(String name, AbstractTestNode node) { - super(null); + public RootTestNode(FrameDescriptor descriptor, String name, AbstractTestNode node) { + super(null, descriptor); this.name = name; this.node = node; }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/GraalTruffleRuntime.java Fri Jan 17 17:06:08 2014 +0100 @@ -74,18 +74,13 @@ } public CallTarget createCallTarget(RootNode rootNode) { - return createCallTarget(rootNode, new FrameDescriptor()); - } - - @Override - public CallTarget createCallTarget(RootNode rootNode, FrameDescriptor frameDescriptor) { if (!acceptForCompilation(rootNode)) { - return new DefaultCallTarget(rootNode, frameDescriptor); + return new DefaultCallTarget(rootNode); } if (truffleCompiler == null) { truffleCompiler = new TruffleCompilerImpl(); } - return new OptimizedCallTarget(rootNode, frameDescriptor, truffleCompiler, TruffleMinInvokeThreshold.getValue(), TruffleCompilationThreshold.getValue()); + return new OptimizedCallTarget(rootNode, truffleCompiler, TruffleMinInvokeThreshold.getValue(), TruffleCompilationThreshold.getValue()); } @Override
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Fri Jan 17 17:06:08 2014 +0100 @@ -51,8 +51,8 @@ private boolean compilationEnabled; private int callCount; - protected OptimizedCallTarget(RootNode rootNode, FrameDescriptor descriptor, TruffleCompiler compiler, int invokeCounter, int compilationThreshold) { - super(rootNode, descriptor); + protected OptimizedCallTarget(RootNode rootNode, TruffleCompiler compiler, int invokeCounter, int compilationThreshold) { + super(rootNode); this.compiler = compiler; this.compilationProfile = new CompilationProfile(compilationThreshold, invokeCounter, rootNode.toString()); this.rootNode.setCallTarget(this); @@ -211,7 +211,7 @@ } public Object executeHelper(PackedFrame caller, Arguments args) { - VirtualFrame frame = createFrame(frameDescriptor, caller, args); + VirtualFrame frame = createFrame(rootNode.getFrameDescriptor(), caller, args); return rootNode.execute(frame); }
--- a/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameSlotTypeSpecializationTest.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameSlotTypeSpecializationTest.java Fri Jan 17 17:06:08 2014 +0100 @@ -49,8 +49,8 @@ TruffleRuntime runtime = Truffle.getRuntime(); FrameDescriptor frameDescriptor = new FrameDescriptor(); FrameSlot slot = frameDescriptor.addFrameSlot("localVar", FrameSlotKind.Int); - TestRootNode rootNode = new TestRootNode(new IntAssignLocal(slot, new StringTestChildNode()), new IntReadLocal(slot)); - CallTarget target = runtime.createCallTarget(rootNode, frameDescriptor); + TestRootNode rootNode = new TestRootNode(frameDescriptor, new IntAssignLocal(slot, new StringTestChildNode()), new IntReadLocal(slot)); + CallTarget target = runtime.createCallTarget(rootNode); Assert.assertEquals(FrameSlotKind.Int, slot.getKind()); Object result = target.call(); Assert.assertEquals("42", result); @@ -62,8 +62,8 @@ @Child TestChildNode left; @Child TestChildNode right; - public TestRootNode(TestChildNode left, TestChildNode right) { - super(null); + public TestRootNode(FrameDescriptor descriptor, TestChildNode left, TestChildNode right) { + super(null, descriptor); this.left = adoptChild(left); this.right = adoptChild(right); }
--- a/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameTest.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/FrameTest.java Fri Jan 17 17:06:08 2014 +0100 @@ -66,7 +66,7 @@ FrameDescriptor frameDescriptor = new FrameDescriptor(); FrameSlot slot = frameDescriptor.addFrameSlot("localVar", FrameSlotKind.Int); TestRootNode rootNode = new TestRootNode(new AssignLocal(slot), new ReadLocal(slot)); - CallTarget target = runtime.createCallTarget(rootNode, frameDescriptor); + CallTarget target = runtime.createCallTarget(rootNode); Object result = target.call(); Assert.assertEquals(42, result); }
--- a/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ReturnTypeSpecializationTest.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/ReturnTypeSpecializationTest.java Fri Jan 17 17:06:08 2014 +0100 @@ -48,8 +48,8 @@ TruffleRuntime runtime = Truffle.getRuntime(); FrameDescriptor frameDescriptor = new FrameDescriptor(); FrameSlot slot = frameDescriptor.addFrameSlot("localVar", FrameSlotKind.Int); - TestRootNode rootNode = new TestRootNode(new IntAssignLocal(slot, new StringTestChildNode()), new IntReadLocal(slot)); - CallTarget target = runtime.createCallTarget(rootNode, frameDescriptor); + TestRootNode rootNode = new TestRootNode(frameDescriptor, new IntAssignLocal(slot, new StringTestChildNode()), new IntReadLocal(slot)); + CallTarget target = runtime.createCallTarget(rootNode); Assert.assertEquals(FrameSlotKind.Int, slot.getKind()); Object result = target.call(); Assert.assertEquals("42", result); @@ -61,8 +61,8 @@ @Child TestChildNode left; @Child TestChildNode right; - public TestRootNode(TestChildNode left, TestChildNode right) { - super(null); + public TestRootNode(FrameDescriptor descriptor, TestChildNode left, TestChildNode right) { + super(null, descriptor); this.left = adoptChild(left); this.right = adoptChild(right); }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CallTarget.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/CallTarget.java Fri Jan 17 17:06:08 2014 +0100 @@ -28,8 +28,7 @@ /** * Represents the target of a call. Instances of this interface can be created using the - * {@link TruffleRuntime#createCallTarget(com.oracle.truffle.api.nodes.RootNode, FrameDescriptor)} - * method. + * {@link TruffleRuntime#createCallTarget(com.oracle.truffle.api.nodes.RootNode)} method. */ public abstract class CallTarget {
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleRuntime.java Fri Jan 17 17:06:08 2014 +0100 @@ -51,17 +51,6 @@ CallTarget createCallTarget(RootNode rootNode); /** - * Creates a new call target for a given root node and a given frame descriptor. - * - * @param rootNode the root node whose - * {@link RootNode#execute(com.oracle.truffle.api.frame.VirtualFrame)} method - * represents the entry point - * @param frameDescriptor the descriptor used for creating a new frame at each invocation - * @return the new call target object - */ - CallTarget createCallTarget(RootNode rootNode, FrameDescriptor frameDescriptor); - - /** * Creates a new assumption object that can be checked and invalidated. * * @return the newly created assumption object
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultCallTarget.java Fri Jan 17 17:06:08 2014 +0100 @@ -31,11 +31,9 @@ public class DefaultCallTarget extends CallTarget { protected final RootNode rootNode; - protected final FrameDescriptor frameDescriptor; - public DefaultCallTarget(RootNode function, FrameDescriptor frameDescriptor) { + public DefaultCallTarget(RootNode function) { this.rootNode = function; - this.frameDescriptor = frameDescriptor; this.rootNode.setCallTarget(this); } @@ -46,14 +44,10 @@ @Override public Object call(PackedFrame caller, Arguments args) { - VirtualFrame frame = new DefaultVirtualFrame(frameDescriptor, caller, args); + VirtualFrame frame = new DefaultVirtualFrame(rootNode.getFrameDescriptor(), caller, args); return rootNode.execute(frame); } - public FrameDescriptor getFrameDescriptor() { - return frameDescriptor; - } - public RootNode getRootNode() { return rootNode; }
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/impl/DefaultTruffleRuntime.java Fri Jan 17 17:06:08 2014 +0100 @@ -41,12 +41,7 @@ @Override public CallTarget createCallTarget(RootNode rootNode) { - return createCallTarget(rootNode, new FrameDescriptor()); - } - - @Override - public CallTarget createCallTarget(RootNode rootNode, FrameDescriptor frameDescriptor) { - return new DefaultCallTarget(rootNode, frameDescriptor); + return new DefaultCallTarget(rootNode); } @Override
--- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java Fri Jan 17 16:55:59 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java Fri Jan 17 17:06:08 2014 +0100 @@ -30,15 +30,28 @@ /** * A root node is a node with a method to execute it given only a frame as a parameter. Therefore, a * root node can be used to create a call target using - * {@link TruffleRuntime#createCallTarget(RootNode, FrameDescriptor)}. + * {@link TruffleRuntime#createCallTarget(RootNode)}. */ public abstract class RootNode extends Node { + private CallTarget callTarget; + private final FrameDescriptor frameDescriptor; + protected RootNode() { + this(null, null); } protected RootNode(SourceSection sourceSection) { + this(sourceSection, null); + } + + protected RootNode(SourceSection sourceSection, FrameDescriptor frameDescriptor) { super(sourceSection); + if (frameDescriptor == null) { + this.frameDescriptor = new FrameDescriptor(); + } else { + this.frameDescriptor = frameDescriptor; + } } /** @@ -49,12 +62,14 @@ */ public abstract Object execute(VirtualFrame frame); - private CallTarget callTarget; - public CallTarget getCallTarget() { return callTarget; } + public FrameDescriptor getFrameDescriptor() { + return frameDescriptor; + } + public void setCallTarget(CallTarget callTarget) { this.callTarget = callTarget; }