Mercurial > hg > graal-compiler
changeset 22981:f22ae5bade77
When inlining during parsing, mark caller FrameStates properly as duringCall
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Thu, 12 Nov 2015 10:23:01 -0800 |
parents | e47e7efd9ec0 |
children | e8fb2acecb0c |
files | graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java |
diffstat | 2 files changed, 7 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java Thu Nov 12 17:57:09 2015 +0100 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java Thu Nov 12 10:23:01 2015 -0800 @@ -274,10 +274,11 @@ */ public FrameState create(int bci, BytecodeParser parent, boolean duringCall, JavaKind[] pushedSlotKinds, ValueNode[] pushedValues) { if (outerFrameState == null && parent != null) { - outerFrameState = parent.getFrameStateBuilder().create(parent.bci(), null); + assert !parent.parsingIntrinsic() : "must already have the next non-intrinsic ancestor"; + outerFrameState = parent.getFrameStateBuilder().create(parent.bci(), parent.getNonIntrinsicAncestor(), true, null, null); } if (bci == BytecodeFrame.AFTER_EXCEPTION_BCI && parent != null) { - FrameState newFrameState = outerFrameState.duplicateModified(outerFrameState.bci, true, JavaKind.Void, new JavaKind[]{JavaKind.Object}, new ValueNode[]{stack[0]}); + FrameState newFrameState = outerFrameState.duplicateModified(outerFrameState.bci, true, false, JavaKind.Void, new JavaKind[]{JavaKind.Object}, new ValueNode[]{stack[0]}); return newFrameState; } if (bci == BytecodeFrame.INVALID_FRAMESTATE_BCI) {
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Thu Nov 12 17:57:09 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/FrameState.java Thu Nov 12 10:23:01 2015 -0800 @@ -312,6 +312,10 @@ return duplicateModified(graph(), newBci, newRethrowException, duringCall, popKind, pushedSlotKinds, pushedValues); } + public FrameState duplicateModified(int newBci, boolean newRethrowException, boolean newDuringCall, JavaKind popKind, JavaKind[] pushedSlotKinds, ValueNode[] pushedValues) { + return duplicateModified(graph(), newBci, newRethrowException, newDuringCall, popKind, pushedSlotKinds, pushedValues); + } + /** * Creates a copy of this frame state with the top of stack replaced with with * {@code pushedValue} which must be of type {@code popKind}.