changeset 15339:265c47be2308

Truffle: fix inlining recursions
author Christian Humer <christian.humer@gmail.com>
date Wed, 23 Apr 2014 20:49:32 +0200
parents 7f5c9079e24a
children 3994ff31091d
files graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningHandler.java
diffstat 2 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Tue Apr 15 18:31:23 2014 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/OptimizedCallTarget.java	Wed Apr 23 20:49:32 2014 +0200
@@ -241,7 +241,6 @@
         if (inliningPerformed) {
             return;
         }
-        inliningPerformed = true;
         TruffleInliningHandler handler = new TruffleInliningHandler(new DefaultInliningPolicy());
         TruffleInliningResult result = handler.decideInlining(this, 0);
         performInlining(result);
@@ -249,6 +248,10 @@
     }
 
     private static void performInlining(TruffleInliningResult result) {
+        if (result.getCallTarget().inliningPerformed) {
+            return;
+        }
+        result.getCallTarget().inliningPerformed = true;
         for (TruffleInliningProfile profile : result) {
             profile.getCallNode().inline();
             TruffleInliningResult recursiveResult = profile.getRecursiveResult();
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningHandler.java	Tue Apr 15 18:31:23 2014 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleInliningHandler.java	Wed Apr 23 20:49:32 2014 +0200
@@ -94,7 +94,7 @@
         int deepNodeCount;
         TruffleInliningResult recursiveResult;
         boolean recursiveCall = false;
-        if (depth > MAXIMUM_RECURSIVE_DEPTH) {
+        if (target.inliningPerformed || depth > MAXIMUM_RECURSIVE_DEPTH) {
             deepNodeCount = OptimizedCallUtils.countNonTrivialNodes(target, true);
             recursiveResult = null;
         } else {