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);