Mercurial > hg > truffle
changeset 14076:61bc19c3dcdc
Truffle: implemented new tracing flag TraceTruffleCompilationPolymorphism.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Wed, 05 Mar 2014 23:33:25 +0100 |
parents | 3cee899bad8a |
children | 3ea5f337cc0d |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallNode.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java |
diffstat | 3 files changed, 38 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallNode.java Wed Mar 05 23:33:25 2014 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallNode.java Wed Mar 05 23:33:25 2014 +0100 @@ -64,6 +64,11 @@ return new OptimizedCallNodeProfile(target, this); } + @SuppressWarnings("unused") + public void nodeReplaced(Node oldNode, Node newNode, String reason) { + + } + @Override public final OptimizedCallTarget getCurrentCallTarget() { return (OptimizedCallTarget) super.getCurrentCallTarget(); @@ -105,6 +110,11 @@ return callTarget.call(caller, arguments); } + @Override + public void nodeReplaced(Node oldNode, Node newNode, String reason) { + + } + private Object trySplit(PackedFrame caller, Arguments arguments) { int effectiveCallCount = callCount; // we try splitting for the first two invocations
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Wed Mar 05 23:33:25 2014 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java Wed Mar 05 23:33:25 2014 +0100 @@ -188,7 +188,7 @@ PriorityQueue<TruffleInliningProfile> queue = new PriorityQueue<>(); // Used to avoid running in cycles or inline nodes in Truffle trees - // which do not suffice the tree property twice. + // which do not suffice the tree property. Set<CallNode> visitedCallNodes = new HashSet<>(); queueCallSitesForInlining(this, getRootNode(), visitedCallNodes, queue); @@ -310,6 +310,9 @@ ((ReplaceObserver) target).nodeReplaced(oldNode, newNode, reason); } } + if (callNode instanceof OptimizedCallNode) { + ((OptimizedCallNode) callNode).nodeReplaced(oldNode, newNode, reason); + } } } @@ -421,6 +424,28 @@ if (TraceTruffleCompilationDetails.getValue() || TraceTruffleCompilation.getValue()) { log(0, "opt done", target.toString(), properties); } + if (TraceTruffleCompilationPolymorphism.getValue()) { + + target.getRootNode().accept(new NodeVisitor() { + public boolean visit(Node node) { + Kind kind = node.getKind(); + if (kind == Kind.POLYMORPHIC || kind == Kind.GENERIC) { + Map<String, Object> props = new LinkedHashMap<>(); + props.put("simpleName", node.getClass().getSimpleName()); + String msg = kind == Kind.GENERIC ? "generic" : "polymorphic"; + log(0, msg, node.toString(), props); + } + if (node instanceof CallNode) { + CallNode callNode = (CallNode) node; + if (callNode.isInlined()) { + callNode.getCurrentRootNode().accept(this); + } + } + return true; + } + }); + + } } private static int splitCount = 0;
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java Wed Mar 05 23:33:25 2014 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCompilerOptions.java Wed Mar 05 23:33:25 2014 +0100 @@ -85,6 +85,8 @@ public static final OptionValue<Boolean> TraceTruffleCompilationDetails = new OptionValue<>(false); @Option(help = "") public static final OptionValue<Boolean> TraceTruffleCompilationHistogram = new OptionValue<>(false); + @Option(help = "Prints out all polymorphic and generic nodes after compilation.") + public static final OptionValue<Boolean> TraceTruffleCompilationPolymorphism = new OptionValue<>(false); @Option(help = "") public static final OptionValue<Boolean> TraceTruffleExpansion = new OptionValue<>(false); @Option(help = "")