# HG changeset patch # User Christian Humer # Date 1395062985 -3600 # Node ID 9c01fabfb167e73882a80643f23fd5ef19769646 # Parent 5d1308c78ddcd7601a2ee62d159484276a07e56f Truffle: Removed deprecated API; Added NodeFilter to customize filter when counting nodes. diff -r 5d1308c78ddc -r 9c01fabfb167 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallNode.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallNode.java Mon Mar 17 14:29:45 2014 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallNode.java Mon Mar 17 14:29:45 2014 +0100 @@ -28,6 +28,7 @@ import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.impl.*; import com.oracle.truffle.api.nodes.*; +import com.oracle.truffle.api.nodes.NodeUtil.NodeFilter; /** * Call target that is optimized by Graal upon surpassing a specific invocation threshold. @@ -134,7 +135,7 @@ if (isMaxSingleCall()) { return true; } - return countPolymorphic() >= 1 || countGeneric() > 0; + return countPolymorphic() >= 1; } @Override @@ -162,11 +163,12 @@ } private int countPolymorphic() { - return NodeUtil.countNodes(getCallTarget().getRootNode(), null, NodeCost.POLYMORPHIC, false); - } - - private int countGeneric() { - return NodeUtil.countNodes(getCallTarget().getRootNode(), null, NodeCost.MEGAMORPHIC, false); + return NodeUtil.countNodes(getCallTarget().getRootNode(), new NodeFilter() { + public boolean isFiltered(Node node) { + NodeCost cost = node.getCost(); + return cost == NodeCost.POLYMORPHIC || cost == NodeCost.MEGAMORPHIC; + } + }); } @Override diff -r 5d1308c78ddc -r 9c01fabfb167 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Mon Mar 17 14:29:45 2014 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Mon Mar 17 14:29:45 2014 +0100 @@ -34,6 +34,7 @@ import com.oracle.truffle.api.frame.*; import com.oracle.truffle.api.impl.*; import com.oracle.truffle.api.nodes.*; +import com.oracle.truffle.api.nodes.NodeUtil.NodeFilter; /** * Call target that is optimized by Graal upon surpassing a specific invocation threshold. @@ -460,8 +461,20 @@ } static void addASTSizeProperty(RootNode target, Map properties) { + int polymorphicCount = NodeUtil.countNodes(target.getRootNode(), new NodeFilter() { + public boolean isFiltered(Node node) { + return node.getCost() == NodeCost.POLYMORPHIC; + } + }, true); + + int megamorphicCount = NodeUtil.countNodes(target.getRootNode(), new NodeFilter() { + public boolean isFiltered(Node node) { + return node.getCost() == NodeCost.MEGAMORPHIC; + } + }, true); + String value = String.format("%4d (%d/%d)", NodeUtil.countNodes(target.getRootNode(), null, true), // - NodeUtil.countNodes(target.getRootNode(), null, NodeCost.POLYMORPHIC, true), NodeUtil.countNodes(target.getRootNode(), null, NodeCost.MEGAMORPHIC, true)); // + polymorphicCount, megamorphicCount); // properties.put("ASTSize", value); } diff -r 5d1308c78ddc -r 9c01fabfb167 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/CallNode.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/CallNode.java Mon Mar 17 14:29:45 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/CallNode.java Mon Mar 17 14:29:45 2014 +0100 @@ -140,32 +140,4 @@ return null; } - /** - * @deprecated always returns true now. - */ - @Deprecated - public boolean isInlinable() { - return true; - } - - /** - * @deprecated instead use {@link #getCurrentRootNode()} and check for {@link #isInlined()} for - * true. - */ - @Deprecated - public RootNode getInlinedRoot() { - if (!isInlined()) { - return null; - } - return getCurrentRootNode(); - } - - /** - * @deprecated use {@link TruffleRuntime#createCallNode(CallTarget)} instead - */ - @Deprecated - public static CallNode create(CallTarget target) { - return Truffle.getRuntime().createCallNode(target); - } - } diff -r 5d1308c78ddc -r 9c01fabfb167 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Mon Mar 17 14:29:45 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/NodeUtil.java Mon Mar 17 14:29:45 2014 +0100 @@ -451,48 +451,6 @@ return null; } - /** - * @deprecated will be removed, exposed Truffle runtime specific functionality. - */ - @Deprecated - public static List findOutermostCallTargets(Node node) { - RootNode root = node.getRootNode(); - if (root == null) { - return Collections.emptyList(); - } - List roots = new ArrayList<>(); - roots.add(root.getCallTarget()); - for (CallNode callNode : root.getCachedCallNodes()) { - if (callNode.isInlined()) { - roots.addAll(findOutermostCallTargets(callNode)); - } - } - return roots; - } - - /** - * @deprecated will be removed, exposed Truffle runtime specific functionality. - */ - @Deprecated - public static RootNode findOutermostRootNode(Node node) { - Node parent = node; - while (parent != null) { - if (parent instanceof RootNode) { - RootNode root = (RootNode) parent; - @SuppressWarnings("deprecation") - Node next = root.getParentInlinedCall(); - if (next != null) { - parent = next; - } else { - return root; - } - } else { - parent = parent.getParent(); - } - } - return null; - } - public static T findParent(Node start, Class clazz) { Node parent = start.getParent(); if (parent == null) { @@ -613,39 +571,43 @@ } public static int countNodes(Node root) { - return countNodes(root, null, null, false); + return countNodes(root, null, false); } - public static int countNodes(Node root, Class clazz, NodeCost nodeKind, boolean countInlinedCallNodes) { - NodeCountVisitor nodeCount = new NodeCountVisitor(clazz, nodeKind, countInlinedCallNodes); + public static int countNodes(Node root, NodeFilter filter) { + return countNodes(root, filter, false); + } + + public static int countNodes(Node root, NodeFilter filter, boolean visitInlinedCallNodes) { + NodeCountVisitor nodeCount = new NodeCountVisitor(filter, visitInlinedCallNodes); root.accept(nodeCount); return nodeCount.nodeCount; } - public static int countNodes(Node root, Class clazz, boolean countInlinedCallNodes) { - return countNodes(root, clazz, null, countInlinedCallNodes); + public interface NodeFilter { + + boolean isFiltered(Node node); + } private static final class NodeCountVisitor implements NodeVisitor { - private final boolean inspectInlinedCalls; + private final boolean visitInlinedCallNodes; int nodeCount; - private final NodeCost cost; - private final Class clazz; + private final NodeFilter filter; - private NodeCountVisitor(Class clazz, NodeCost cost, boolean inspectInlinedCalls) { - this.clazz = clazz; - this.cost = cost; - this.inspectInlinedCalls = inspectInlinedCalls; + private NodeCountVisitor(NodeFilter filter, boolean visitInlinedCallNodes) { + this.filter = filter; + this.visitInlinedCallNodes = visitInlinedCallNodes; } @Override public boolean visit(Node node) { - if ((clazz == null || clazz.isInstance(node)) && (cost == null || isKind(node))) { + if (filter == null || !filter.isFiltered(node)) { nodeCount++; } - if (inspectInlinedCalls && node instanceof CallNode) { + if (visitInlinedCallNodes && node instanceof CallNode) { CallNode call = (CallNode) node; if (call.isInlined()) { Node target = ((RootCallTarget) call.getCurrentCallTarget()).getRootNode(); @@ -658,9 +620,6 @@ return true; } - private boolean isKind(Node n) { - return cost == n.getCost(); - } } public static void printInliningTree(final PrintStream stream, RootNode root) { diff -r 5d1308c78ddc -r 9c01fabfb167 graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java --- a/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java Mon Mar 17 14:29:45 2014 +0100 +++ b/graal/com.oracle.truffle.api/src/com/oracle/truffle/api/nodes/RootNode.java Mon Mar 17 14:29:45 2014 +0100 @@ -61,33 +61,6 @@ } } - /** - * @deprecated Not required anymore. Do not use. - */ - @Deprecated - public RootNode inline() { - if (!isInlinable()) { - throw new UnsupportedOperationException("Inlining is not enabled."); - } - return split(); - } - - /** - * @deprecated Not required anymore. Do not use. - */ - @Deprecated - public int getInlineNodeCount() { - return 0; - } - - /** - * @deprecated Not required anymore. Do not use. - */ - @Deprecated - public boolean isInlinable() { - return true; - } - public RootNode split() { return NodeUtil.cloneNode(this); } @@ -148,11 +121,4 @@ return Collections.unmodifiableSet(cachedCallNodes); } - /** - * @deprecated use {@link #getCachedCallNodes()} instead. - */ - @Deprecated - public final CallNode getParentInlinedCall() { - return cachedCallNodes.isEmpty() ? null : cachedCallNodes.iterator().next(); - } }