Mercurial > hg > graal-jvmci-8
changeset 4692:9d48ccb39292
Fixed a wrong frame state for the exception edge after a polymorphic inlining. Removed a NPE allocation in a runtime call branch introduced for Graal.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Fri, 24 Feb 2012 22:32:43 +0100 |
parents | fc42b5b6941a |
children | 07bcee8b70a4 |
files | graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/DebugInfoBuilder.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/InliningUtil.java graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/GraphBuilderPhase.java src/share/vm/c1/c1_Runtime1.cpp |
diffstat | 4 files changed, 5 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/DebugInfoBuilder.java Fri Feb 24 20:39:12 2012 +0100 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/DebugInfoBuilder.java Fri Feb 24 22:32:43 2012 +0100 @@ -135,6 +135,7 @@ throw new CiBailout("unbalanced monitors: found monitor for unknown frame"); } } + assert state.bci >= 0 || state.bci == FrameState.BEFORE_BCI; CiFrame frame = new CiFrame(caller, state.method(), state.bci, state.rethrowException(), state.duringCall(), values, state.localsSize(), state.stackSize(), numLocks); return frame; }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/InliningUtil.java Fri Feb 24 20:39:12 2012 +0100 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/util/InliningUtil.java Fri Feb 24 22:32:43 2012 +0100 @@ -29,11 +29,13 @@ import com.oracle.max.cri.ci.*; import com.oracle.max.cri.ri.*; import com.oracle.max.cri.ri.RiType.Representation; +import com.oracle.max.criutils.*; import com.oracle.max.graal.compiler.*; import com.oracle.max.graal.compiler.phases.*; import com.oracle.max.graal.cri.*; import com.oracle.max.graal.debug.*; import com.oracle.max.graal.graph.*; +import com.oracle.max.graal.graph.Node.Verbosity; import com.oracle.max.graal.nodes.*; import com.oracle.max.graal.nodes.DeoptimizeNode.DeoptAction; import com.oracle.max.graal.nodes.PhiNode.PhiType; @@ -281,11 +283,11 @@ exceptionMerge = graph.add(new MergeNode()); exceptionMerge.setProbability(exceptionEdge.probability()); - exceptionMerge.setStateAfter(exceptionEdge.stateAfter().duplicate(invoke.stateAfter().bci)); FixedNode exceptionSux = exceptionObject.next(); graph.addBeforeFixed(exceptionSux, exceptionMerge); exceptionObjectPhi = graph.unique(new PhiNode(CiKind.Object, exceptionMerge, PhiType.Value)); + exceptionMerge.setStateAfter(exceptionEdge.stateAfter().duplicateModified(invoke.stateAfter().bci, true, CiKind.Void, exceptionObjectPhi)); } // create one separate block for each invoked method
--- a/graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/GraphBuilderPhase.java Fri Feb 24 20:39:12 2012 +0100 +++ b/graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/GraphBuilderPhase.java Fri Feb 24 22:32:43 2012 +0100 @@ -359,6 +359,7 @@ } } + // TODO(tw): Merge BeginNode with ExceptionObject node to get a correct and uniform FrameState. BeginNode p = currentGraph.add(new BeginNode()); p.setStateAfter(frameState.duplicateWithoutStack(bci));
--- a/src/share/vm/c1/c1_Runtime1.cpp Fri Feb 24 20:39:12 2012 +0100 +++ b/src/share/vm/c1/c1_Runtime1.cpp Fri Feb 24 22:32:43 2012 +0100 @@ -462,11 +462,6 @@ thread->set_is_method_handle_return(false); Handle exception(thread, ex); -#ifdef GRAAL - if (exception.is_null()) { - exception = Exceptions::new_exception(thread, vmSymbols::java_lang_NullPointerException(), NULL); - } -#endif nm = CodeCache::find_nmethod(pc); assert(nm != NULL, "this is not an nmethod"); // Adjust the pc as needed/