Mercurial > hg > graal-compiler
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) {