changeset 11613:bf7c26dc56e1

TruffleCache: use frame state values to check argument stamps; iterating over local nodes is no longer sufficient since e231671f39d0.
author Andreas Woess <andreas.woess@jku.at>
date Thu, 12 Sep 2013 16:09:50 +0200
parents 5f532ea846fb
children 57674ff0f7e2
files graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java
diffstat 1 files changed, 11 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java	Thu Sep 12 14:43:21 2013 +0200
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java	Thu Sep 12 16:09:50 2013 +0200
@@ -306,14 +306,18 @@
 
     private static boolean checkArgumentStamps(StructuredGraph graph, NodeInputList<ValueNode> arguments) {
         assert graph.getNodes(LocalNode.class).count() <= arguments.count();
-        for (LocalNode localNode : graph.getNodes(LocalNode.class)) {
-            Stamp newStamp = localNode.stamp().meet(arguments.get(localNode.index()).stamp());
-            if (!newStamp.equals(localNode.stamp())) {
-                if (TruffleCompilerOptions.TraceTruffleCacheDetails.getValue()) {
-                    TTY.println(String.format("[truffle] graph cache entry too specific for method %s argument %s previous stamp %s new stamp %s.", graph.method(), localNode, localNode.stamp(),
-                                    newStamp));
+        FrameState startState = graph.start().stateAfter();
+        for (int i = 0; i < arguments.size(); i++) {
+            ValueNode localNode = startState.localAt(i);
+            if (localNode != null) {
+                Stamp newStamp = localNode.stamp().meet(arguments.get(i).stamp());
+                if (!newStamp.equals(localNode.stamp())) {
+                    if (TruffleCompilerOptions.TraceTruffleCacheDetails.getValue()) {
+                        TTY.println(String.format("[truffle] graph cache entry too specific for method %s argument %s previous stamp %s new stamp %s.", graph.method(), localNode, localNode.stamp(),
+                                        newStamp));
+                    }
+                    return false;
                 }
-                return false;
             }
         }