Mercurial > hg > graal-compiler
changeset 19375:3d750310932f
Fix inline decisions in fast partial evaluator.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Sat, 14 Feb 2015 19:45:33 +0100 |
parents | 2412408a4319 |
children | 525d1e6067b7 |
files | graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java |
diffstat | 3 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Sat Feb 14 15:29:49 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Sat Feb 14 19:45:33 2015 +0100 @@ -890,6 +890,7 @@ ResolvedJavaMethod inlinedTargetMethod = inlineInvokePlugin.inlinedMethod(this, targetMethod, args); parseAndInlineCallee(inlinedTargetMethod, args); + inlineInvokePlugin.postInline(inlinedTargetMethod); return; }
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java Sat Feb 14 15:29:49 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java Sat Feb 14 19:45:33 2015 +0100 @@ -59,6 +59,10 @@ } boolean shouldInlineInvoke(ResolvedJavaMethod method, int depth); + + default void postInline(@SuppressWarnings("unused") ResolvedJavaMethod inlinedTargetMethod) { + + } } public interface LoopExplosionPlugin extends GraphBuilderPlugin {
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Sat Feb 14 15:29:49 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Sat Feb 14 19:45:33 2015 +0100 @@ -193,11 +193,12 @@ private class InlineInvokePlugin implements GraphBuilderPlugins.InlineInvokePlugin { - private final TruffleInlining inlining; + private Stack<TruffleInlining> inlining; private OptimizedDirectCallNode lastDirectCallNode; public InlineInvokePlugin(TruffleInlining inlining) { - this.inlining = inlining; + this.inlining = new Stack<>(); + this.inlining.push(inlining); } public ResolvedJavaMethod inlinedMethod(GraphBuilderContext builder, ResolvedJavaMethod original, ValueNode[] arguments) { @@ -213,9 +214,10 @@ lastDirectCallNode = directCallNode; } } else if (original.equals(callDirectMethod)) { - TruffleInliningDecision decision = getDecision(inlining, lastDirectCallNode); + TruffleInliningDecision decision = getDecision(inlining.peek(), lastDirectCallNode); lastDirectCallNode = null; if (decision != null && decision.isInline()) { + inlining.push(decision); builder.getAssumptions().record(new AssumptionValidAssumption((OptimizedAssumption) decision.getTarget().getNodeRewritingAssumption())); return callInlinedMethod; } @@ -227,6 +229,12 @@ return method.getAnnotation(TruffleBoundary.class) == null; } + public void postInline(ResolvedJavaMethod inlinedTargetMethod) { + if (inlinedTargetMethod.equals(callInlinedMethod)) { + inlining.pop(); + } + } + } private class LoopExplosionPlugin implements GraphBuilderPlugins.LoopExplosionPlugin {