# HG changeset patch # User Doug Simon # Date 1368464424 -7200 # Node ID 67804a97c1ce43c5c1b3fd901c4af28d50c04cab # Parent 0b3d19e4e2a27c3c369934fbdbb34decad2cfe19 allow inlining of invokes with a null stateAfter diff -r 0b3d19e4e2a2 -r 67804a97c1ce 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 Mon May 13 14:54:30 2013 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/InliningUtil.java Mon May 13 19:00:24 2013 +0200 @@ -1161,7 +1161,7 @@ StructuredGraph graph = invoke.asNode().graph(); FrameState stateAfter = invoke.stateAfter(); - assert stateAfter.isAlive(); + assert stateAfter == null || stateAfter.isAlive(); IdentityHashMap replacements = new IdentityHashMap<>(); ArrayList nodes = new ArrayList<>(); @@ -1234,39 +1234,40 @@ } } - FrameState outerFrameState = null; - int callerLockDepth = stateAfter.nestedLockDepth(); - for (Node node : duplicates.values()) { - if (node instanceof FrameState) { - FrameState frameState = (FrameState) node; - assert frameState.bci != FrameState.BEFORE_BCI : frameState; - if (frameState.bci == FrameState.AFTER_BCI) { - frameState.replaceAndDelete(stateAfter); - } else if (frameState.bci == FrameState.AFTER_EXCEPTION_BCI) { - if (frameState.isAlive()) { - assert stateAtExceptionEdge != null; - frameState.replaceAndDelete(stateAtExceptionEdge); + if (stateAfter != null) { + FrameState outerFrameState = null; + int callerLockDepth = stateAfter.nestedLockDepth(); + for (Node node : duplicates.values()) { + if (node instanceof FrameState) { + FrameState frameState = (FrameState) node; + assert frameState.bci != FrameState.BEFORE_BCI : frameState; + if (frameState.bci == FrameState.AFTER_BCI) { + frameState.replaceAndDelete(stateAfter); + } else if (frameState.bci == FrameState.AFTER_EXCEPTION_BCI) { + if (frameState.isAlive()) { + assert stateAtExceptionEdge != null; + frameState.replaceAndDelete(stateAtExceptionEdge); + } else { + assert stateAtExceptionEdge == null; + } } else { - assert stateAtExceptionEdge == null; - } - } else { - // only handle the outermost frame states - if (frameState.outerFrameState() == null) { - assert frameState.bci == FrameState.INVALID_FRAMESTATE_BCI || frameState.method() == inlineGraph.method(); - if (outerFrameState == null) { - outerFrameState = stateAfter.duplicateModified(invoke.bci(), stateAfter.rethrowException(), invoke.asNode().kind()); - outerFrameState.setDuringCall(true); + // only handle the outermost frame states + if (frameState.outerFrameState() == null) { + assert frameState.bci == FrameState.INVALID_FRAMESTATE_BCI || frameState.method() == inlineGraph.method(); + if (outerFrameState == null) { + outerFrameState = stateAfter.duplicateModified(invoke.bci(), stateAfter.rethrowException(), invoke.asNode().kind()); + outerFrameState.setDuringCall(true); + } + frameState.setOuterFrameState(outerFrameState); } - frameState.setOuterFrameState(outerFrameState); } } - } - if (callerLockDepth != 0 && node instanceof MonitorReference) { - MonitorReference monitor = (MonitorReference) node; - monitor.setLockDepth(monitor.getLockDepth() + callerLockDepth); + if (callerLockDepth != 0 && node instanceof MonitorReference) { + MonitorReference monitor = (MonitorReference) node; + monitor.setLockDepth(monitor.getLockDepth() + callerLockDepth); + } } } - Node returnValue = null; if (returnNode != null) { if (returnNode.result() instanceof LocalNode) {