changeset 8590:480c564d90ef

fixed bug in computation of nested lock depth
author Doug Simon <doug.simon@oracle.com>
date Fri, 29 Mar 2013 21:05:51 +0100
parents ec06c7e67698
children 5c58da5b8233
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java
diffstat 3 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java	Fri Mar 29 14:19:04 2013 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java	Fri Mar 29 21:05:51 2013 +0100
@@ -50,8 +50,8 @@
     @Override
     protected Value computeLockValue(FrameState state, int i) {
         int lockDepth = i;
-        for (FrameState outer = state.outerFrameState(); outer != null; outer = outer.outerFrameState()) {
-            lockDepth += outer.locksSize();
+        if (state.outerFrameState() != null) {
+            lockDepth = state.outerFrameState().nestedLockDepth();
         }
         StackSlot slot = lockStack.makeLockSlot(lockDepth);
         ValueNode lock = state.lockAt(i);
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java	Fri Mar 29 14:19:04 2013 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java	Fri Mar 29 21:05:51 2013 +0100
@@ -273,6 +273,18 @@
     }
 
     /**
+     * Gets the number of locked monitors in this frame state and all
+     * {@linkplain #outerFrameState() outer} frame states.
+     */
+    public int nestedLockDepth() {
+        int depth = locksSize();
+        for (FrameState outer = outerFrameState(); outer != null; outer = outer.outerFrameState()) {
+            depth += outer.locksSize();
+        }
+        return depth;
+    }
+
+    /**
      * Gets the value in the local variables at the specified index.
      * 
      * @param i the index into the locals
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Fri Mar 29 14:19:04 2013 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java	Fri Mar 29 21:05:51 2013 +0100
@@ -1095,7 +1095,7 @@
 
         FrameState outerFrameState = null;
         double invokeProbability = invoke.node().probability();
-        int callerLockDepth = stateAfter.locksSize();
+        int callerLockDepth = stateAfter.nestedLockDepth();
         for (Node node : duplicates.values()) {
             if (GraalOptions.ProbabilityAnalysis) {
                 if (node instanceof FixedNode) {