Mercurial > hg > graal-compiler
changeset 11801:63ee8dea4b80
TruffleCache: do not cut off ControlFlowException constructors.
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Thu, 26 Sep 2013 03:04:38 +0200 |
parents | a28f24553ffa |
children | 82c4106741f7 |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java |
diffstat | 2 files changed, 5 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Wed Sep 25 17:40:58 2013 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/PartialEvaluator.java Thu Sep 26 03:04:38 2013 +0200 @@ -223,11 +223,11 @@ int nodeCountBefore = graph.getNodeCount(); int mark = graph.getMark(); InliningUtil.inline(methodCallTargetNode.invoke(), inlineGraph, false); - canonicalizer.applyIncremental(graph, context, mark); if (Debug.isDumpEnabled()) { int nodeCountAfter = graph.getNodeCount(); Debug.dump(graph, "After inlining %s %+d (%d)", methodCallTargetNode.targetMethod().toString(), nodeCountAfter - nodeCountBefore, nodeCountAfter); } + canonicalizer.applyIncremental(graph, context, mark); changed = true; } }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java Wed Sep 25 17:40:58 2013 -0700 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java Thu Sep 26 03:04:38 2013 +0200 @@ -38,6 +38,7 @@ import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.java.MethodCallTargetNode.InvokeKind; import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.nodes.type.*; import com.oracle.graal.nodes.util.*; import com.oracle.graal.phases.*; import com.oracle.graal.phases.common.*; @@ -200,7 +201,9 @@ private boolean tryCutOffRuntimeExceptions(MethodCallTargetNode methodCallTargetNode) { if (methodCallTargetNode.targetMethod().isConstructor()) { ResolvedJavaType runtimeException = metaAccessProvider.lookupJavaType(RuntimeException.class); - if (runtimeException.isAssignableFrom(methodCallTargetNode.targetMethod().getDeclaringClass())) { + ResolvedJavaType controlFlowException = metaAccessProvider.lookupJavaType(ControlFlowException.class); + ResolvedJavaType exceptionType = Objects.requireNonNull(ObjectStamp.typeOrNull(methodCallTargetNode.receiver().stamp())); + if (runtimeException.isAssignableFrom(methodCallTargetNode.targetMethod().getDeclaringClass()) && !controlFlowException.isAssignableFrom(exceptionType)) { DeoptimizeNode deoptNode = methodCallTargetNode.graph().add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.UnreachedCode)); FixedNode invokeNode = methodCallTargetNode.invoke().asNode(); invokeNode.replaceAtPredecessor(deoptNode);