# HG changeset patch # User Andreas Woess # Date 1378994990 -7200 # Node ID bf7c26dc56e19ab10fb8660366c256082a4e3eb1 # Parent 5f532ea846fbcadd1ddcb40ea9326ff3ff43f19d TruffleCache: use frame state values to check argument stamps; iterating over local nodes is no longer sufficient since e231671f39d0. diff -r 5f532ea846fb -r bf7c26dc56e1 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java --- 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 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; } }