# HG changeset patch # User Doug Simon # Date 1364587551 -3600 # Node ID 480c564d90ef493a7737d1ec6c2e1e56da3280f6 # Parent ec06c7e6769833add538112b4b9065d89ed36744 fixed bug in computation of nested lock depth diff -r ec06c7e67698 -r 480c564d90ef graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotDebugInfoBuilder.java --- 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); diff -r ec06c7e67698 -r 480c564d90ef graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java --- 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 diff -r ec06c7e67698 -r 480c564d90ef graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java --- 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) {