changeset 19890:3ac6b576ef70

Truffle: respect truffle inlining option in FastPE and replace Stack with ArrayDeque
author Andreas Woess <andreas.woess@oracle.com>
date Tue, 17 Mar 2015 14:40:35 +0100
parents 1eea5182d102
children aa66d0a6f9dc
files graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java
diffstat 1 files changed, 21 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- 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<TruffleInlining> inlining;
+        private Deque<TruffleInlining> 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);