# HG changeset patch # User Andreas Woess # Date 1426599635 -3600 # Node ID 3ac6b576ef70efc5fb54f142137c14a905b6b352 # Parent 1eea5182d1024f5130632a7277c4da6e7ba1feac Truffle: respect truffle inlining option in FastPE and replace Stack with ArrayDeque diff -r 1eea5182d102 -r 3ac6b576ef70 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 Tue Mar 17 13:57:33 2015 +0100 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Tue Mar 17 14:40:35 2015 +0100 @@ -185,12 +185,12 @@ private class PEInlineInvokePlugin implements InlineInvokePlugin { - private Stack inlining; + private Deque inlining; private OptimizedDirectCallNode lastDirectCallNode; private final Replacements replacements; public PEInlineInvokePlugin(TruffleInlining inlining, Replacements replacements) { - this.inlining = new Stack<>(); + this.inlining = new ArrayDeque<>(); this.inlining.push(inlining); this.replacements = replacements; } @@ -203,24 +203,26 @@ return null; } assert !builder.parsingReplacement(); - if (original.equals(callSiteProxyMethod)) { - ValueNode arg1 = arguments[0]; - if (!arg1.isConstant()) { - GraalInternalError.shouldNotReachHere("The direct call node does not resolve to a constant!"); - } + if (TruffleCompilerOptions.TruffleFunctionInlining.getValue()) { + if (original.equals(callSiteProxyMethod)) { + ValueNode arg1 = arguments[0]; + if (!arg1.isConstant()) { + GraalInternalError.shouldNotReachHere("The direct call node does not resolve to a constant!"); + } - Object callNode = builder.getSnippetReflection().asObject(Object.class, (JavaConstant) arg1.asConstant()); - if (callNode instanceof OptimizedDirectCallNode) { - OptimizedDirectCallNode directCallNode = (OptimizedDirectCallNode) callNode; - lastDirectCallNode = directCallNode; - } - } else if (original.equals(callDirectMethod)) { - 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 new InlineInfo(callInlinedMethod, false, false); + Object callNode = builder.getSnippetReflection().asObject(Object.class, (JavaConstant) arg1.asConstant()); + if (callNode instanceof OptimizedDirectCallNode) { + OptimizedDirectCallNode directCallNode = (OptimizedDirectCallNode) callNode; + lastDirectCallNode = directCallNode; + } + } else if (original.equals(callDirectMethod)) { + 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 new InlineInfo(callInlinedMethod, false, false); + } } } return new InlineInfo(original, false, false);