Mercurial > hg > graal-jvmci-8
changeset 21477:b1e712f66fe0
Make inlining code more robust in the context of inlining substituted graphs.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Mon, 25 May 2015 01:37:31 +0200 |
parents | 73713483b8ac |
children | 2dad34a3d7b0 |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java |
diffstat | 1 files changed, 5 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Sun May 24 11:02:42 2015 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/InliningUtil.java Mon May 25 01:37:31 2015 +0200 @@ -478,7 +478,7 @@ * pop return kind from invoke's stateAfter and replace with this frameState's return * value (top of stack) */ - if (invokeReturnKind != Kind.Void && (alwaysDuplicateStateAfter || (frameState.stackSize() > 0 && stateAfterReturn.stackAt(0) != frameState.stackAt(0)))) { + if (frameState.stackSize() > 0 && (alwaysDuplicateStateAfter || stateAfterReturn.stackAt(0) != frameState.stackAt(0))) { stateAfterReturn = stateAtReturn.duplicateModified(invokeReturnKind, frameState.stackAt(0)); } @@ -533,8 +533,11 @@ // in the intrinsic code. assert inlinedMethod.getAnnotation(MethodSubstitution.class) != null : "expected an intrinsic when inlinee frame state matches method of call target but does not match the method of the inlinee graph: " + frameState; + } else if (frameState.method().getName().equals(inlinedMethod.getName())) { + // This can happen for method substitutions. } else { - throw new AssertionError(frameState.toString()); + throw new AssertionError(String.format("inlinedMethod=%s frameState.method=%s frameState=%s invoke.method=%s", inlinedMethod, frameState.method(), frameState, + invoke.callTarget().targetMethod())); } } return true;