Mercurial > hg > graal-compiler
changeset 16267:c04bdca850a9
truffle compiler: small cleanup
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Fri, 27 Jun 2014 16:25:30 +0200 |
parents | a501d56c8656 |
children | 0e092c1ecd64 |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java |
diffstat | 1 files changed, 15 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Fri Jun 27 16:25:02 2014 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java Fri Jun 27 16:25:30 2014 +0200 @@ -64,7 +64,12 @@ private final HashMap<List<Object>, StructuredGraph> cache = new HashMap<>(); private final HashMap<List<Object>, Long> lastUsed = new HashMap<>(); private final StructuredGraph markerGraph = new StructuredGraph(); + private final ResolvedJavaType stringBuilderClass; + private final ResolvedJavaType runtimeExceptionClass; + private final ResolvedJavaType assertionErrorClass; + private final ResolvedJavaType controlFlowExceptionClass; + private final ResolvedJavaMethod callBoundaryMethod; private long counter; @@ -73,7 +78,12 @@ this.config = config; this.configForRootGraph = configForRootGraph; this.optimisticOptimizations = optimisticOptimizations; + this.stringBuilderClass = providers.getMetaAccess().lookupJavaType(StringBuilder.class); + this.runtimeExceptionClass = providers.getMetaAccess().lookupJavaType(RuntimeException.class); + this.assertionErrorClass = providers.getMetaAccess().lookupJavaType(AssertionError.class); + this.controlFlowExceptionClass = providers.getMetaAccess().lookupJavaType(ControlFlowException.class); + try { callBoundaryMethod = providers.getMetaAccess().lookupJavaMethod(OptimizedCallTarget.class.getDeclaredMethod("callRoot", Object[].class)); } catch (NoSuchMethodException ex) { @@ -249,12 +259,12 @@ private boolean tryCutOffRuntimeExceptions(MethodCallTargetNode methodCallTargetNode) { if (methodCallTargetNode.targetMethod().isConstructor()) { - ResolvedJavaType runtimeException = providers.getMetaAccess().lookupJavaType(RuntimeException.class); - ResolvedJavaType assertionError = providers.getMetaAccess().lookupJavaType(AssertionError.class); - ResolvedJavaType controlFlowException = providers.getMetaAccess().lookupJavaType(ControlFlowException.class); + ResolvedJavaType declaringClass = methodCallTargetNode.targetMethod().getDeclaringClass(); ResolvedJavaType exceptionType = Objects.requireNonNull(StampTool.typeOrNull(methodCallTargetNode.receiver().stamp())); - ResolvedJavaType declaringClass = methodCallTargetNode.targetMethod().getDeclaringClass(); - if ((assertionError.isAssignableFrom(declaringClass) || runtimeException.isAssignableFrom(declaringClass)) && !controlFlowException.isAssignableFrom(exceptionType)) { + + boolean removeAllocation = runtimeExceptionClass.isAssignableFrom(declaringClass) || assertionErrorClass.isAssignableFrom(declaringClass); + boolean isCFGException = controlFlowExceptionClass.isAssignableFrom(exceptionType); + if (removeAllocation && !isCFGException) { DeoptimizeNode deoptNode = methodCallTargetNode.graph().add(new DeoptimizeNode(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.UnreachedCode)); FixedNode invokeNode = methodCallTargetNode.invoke().asNode(); invokeNode.replaceAtPredecessor(deoptNode);