# HG changeset patch # User Thomas Wuerthinger # Date 1423939533 -3600 # Node ID 3d750310932fc1dbcf95079ba51945548184074f # Parent 2412408a431994a681b4b372f53816d20f3d169b Fix inline decisions in fast partial evaluator. diff -r 2412408a4319 -r 3d750310932f graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- 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; } diff -r 2412408a4319 -r 3d750310932f graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPlugins.java --- 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 { diff -r 2412408a4319 -r 3d750310932f graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java --- 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 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 {