# HG changeset patch # User Bernhard Urban # Date 1404891081 -7200 # Node ID 78cbe3d93bc17b5a312cb134858dfe76625bd3cc # Parent 99fa6bd5d27bf2d372540cbc7716d64a421c31b9 truffle compiler: be a bit more aggressive on cutting exceptions/errors diff -r 99fa6bd5d27b -r 78cbe3d93bc1 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Wed Jul 09 09:28:08 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Wed Jul 09 09:31:21 2014 +0200 @@ -67,7 +67,7 @@ private final ResolvedJavaType stringBuilderClass; private final ResolvedJavaType runtimeExceptionClass; - private final ResolvedJavaType assertionErrorClass; + private final ResolvedJavaType errorClass; private final ResolvedJavaType controlFlowExceptionClass; private final ResolvedJavaMethod callBoundaryMethod; @@ -81,7 +81,7 @@ this.stringBuilderClass = providers.getMetaAccess().lookupJavaType(StringBuilder.class); this.runtimeExceptionClass = providers.getMetaAccess().lookupJavaType(RuntimeException.class); - this.assertionErrorClass = providers.getMetaAccess().lookupJavaType(AssertionError.class); + this.errorClass = providers.getMetaAccess().lookupJavaType(Error.class); this.controlFlowExceptionClass = providers.getMetaAccess().lookupJavaType(ControlFlowException.class); try { @@ -192,7 +192,7 @@ if (macroSubstitution != null) { InliningUtil.inlineMacroNode(methodCallTargetNode.invoke(), methodCallTargetNode.targetMethod(), macroSubstitution); } else { - tryCutOffRuntimeExceptions(methodCallTargetNode); + tryCutOffRuntimeExceptionsAndErrors(methodCallTargetNode); } } } @@ -257,12 +257,12 @@ InliningUtil.inline(invoke, inlineGraph, true, null); } - private boolean tryCutOffRuntimeExceptions(MethodCallTargetNode methodCallTargetNode) { + private boolean tryCutOffRuntimeExceptionsAndErrors(MethodCallTargetNode methodCallTargetNode) { if (methodCallTargetNode.targetMethod().isConstructor()) { ResolvedJavaType declaringClass = methodCallTargetNode.targetMethod().getDeclaringClass(); ResolvedJavaType exceptionType = Objects.requireNonNull(StampTool.typeOrNull(methodCallTargetNode.receiver().stamp())); - boolean removeAllocation = runtimeExceptionClass.isAssignableFrom(declaringClass) || assertionErrorClass.isAssignableFrom(declaringClass); + boolean removeAllocation = runtimeExceptionClass.isAssignableFrom(declaringClass) || errorClass.isAssignableFrom(declaringClass); boolean isControlFlowException = controlFlowExceptionClass.isAssignableFrom(exceptionType); if (removeAllocation && !isControlFlowException) { DeoptimizeNode deoptNode = methodCallTargetNode.graph().add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.UnreachedCode));