# HG changeset patch # User Lukas Stadler # Date 1374150912 -7200 # Node ID 438dd12ff25bd12108dfb36161e358e9e236414a # Parent 4278ab23c66fe3b304bf473a0eb3ddd6c542639e reset "permanent" flag on ValueAnchorNodes during inlining diff -r 4278ab23c66f -r 438dd12ff25b graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java Thu Jul 18 14:34:45 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ValueAnchorNode.java Thu Jul 18 14:35:12 2013 +0200 @@ -46,7 +46,7 @@ this.anchored = new NodeInputList<>(this, values); } - private final boolean permanent; + private boolean permanent; @Override public void generate(LIRGeneratorTool gen) { @@ -67,6 +67,10 @@ return anchored; } + public void setPermanent(boolean permanent) { + this.permanent = permanent; + } + public boolean isPermanent() { return permanent; } diff -r 4278ab23c66f -r 438dd12ff25b 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 Thu Jul 18 14:34:45 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java Thu Jul 18 14:35:12 2013 +0200 @@ -1390,6 +1390,12 @@ frameState.setOuterFrameState(outerFrameState); } } + } else if (node instanceof ValueAnchorNode) { + /* + * Synchronized inlinees have a valid point to deopt to after the monitor exit + * at the end, so there's no need for the value anchor to be permanent anymore. + */ + ((ValueAnchorNode) node).setPermanent(false); } if (callerLockDepth != 0 && node instanceof MonitorReference) { MonitorReference monitor = (MonitorReference) node;