changeset 7107:770901ff8f80

print a message when optimistic optimizations are disabled
author Christian Haeubl <haeubl@ssw.jku.at>
date Thu, 29 Nov 2012 11:00:32 +0100
parents af30115c9d0e
children fa99bf3837ec
files graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java
diffstat 2 files changed, 14 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java	Wed Nov 28 20:39:43 2012 +0100
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java	Thu Nov 29 11:00:32 2012 +0100
@@ -64,6 +64,7 @@
         public ConcreteSubtype(ResolvedJavaType context, ResolvedJavaType subtype) {
             this.context = context;
             this.subtype = subtype;
+            assert !subtype.isInterface();
         }
 
         @Override
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java	Wed Nov 28 20:39:43 2012 +0100
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java	Thu Nov 29 11:00:32 2012 +0100
@@ -46,40 +46,26 @@
     public OptimisticOptimizations(ResolvedJavaMethod method) {
         this.enabledOpts = EnumSet.noneOf(Optimization.class);
 
-        ProfilingInfo profilingInfo = method.getProfilingInfo();
-        if (checkDeoptimizations(profilingInfo, DeoptimizationReason.UnreachedCode)) {
-            enabledOpts.add(Optimization.RemoveNeverExecutedCode);
-        }
-        if (checkDeoptimizations(profilingInfo, DeoptimizationReason.TypeCheckedInliningViolated)) {
-            enabledOpts.add(Optimization.UseTypeCheckedInlining);
+        addOptimization(method, DeoptimizationReason.UnreachedCode, Optimization.RemoveNeverExecutedCode);
+        addOptimization(method, DeoptimizationReason.TypeCheckedInliningViolated, Optimization.UseTypeCheckedInlining);
+        addOptimization(method, DeoptimizationReason.OptimizedTypeCheckViolated, Optimization.RemoveNeverExecutedCode);
+        addOptimization(method, DeoptimizationReason.NotCompiledExceptionHandler, Optimization.UseExceptionProbability);
+    }
+
+    private void addOptimization(ResolvedJavaMethod method, DeoptimizationReason deoptReason, Optimization optimization) {
+        if (checkDeoptimizations(method.getProfilingInfo(), deoptReason)) {
+            enabledOpts.add(optimization);
+        } else {
+            // TODO (chaeubl): change to Debug.log when we are sure that optimistic optimizations are not disabled unnecessarily
+            TTY.println("WARN: deactivated optimistic optimization %s for %s", optimization.name(), MetaUtil.format("%H.%n(%p)", method));
+            disabledOptimisticOptsMetric.increment();
         }
-        if (checkDeoptimizations(profilingInfo, DeoptimizationReason.OptimizedTypeCheckViolated)) {
-            enabledOpts.add(Optimization.UseTypeCheckHints);
-        }
-        if (checkDeoptimizations(profilingInfo, DeoptimizationReason.NotCompiledExceptionHandler)) {
-            enabledOpts.add(Optimization.UseExceptionProbability);
-        }
-
-        log(method);
     }
 
     private OptimisticOptimizations(Set<Optimization> enabledOpts) {
         this.enabledOpts = enabledOpts;
     }
 
-    private void log(ResolvedJavaMethod method) {
-        if (Debug.isLogEnabled()) {
-            for (Optimization opt: Optimization.values()) {
-                if (!enabledOpts.contains(opt)) {
-                    if (GraalOptions.PrintDisabledOptimisticOptimizations) {
-                        Debug.log("WARN: deactivated optimistic optimization %s for %s", opt.name(), MetaUtil.format("%H.%n(%p)", method));
-                    }
-                    disabledOptimisticOptsMetric.increment();
-                }
-            }
-        }
-    }
-
     public boolean removeNeverExecutedCode() {
         return GraalOptions.RemoveNeverExecutedCode && enabledOpts.contains(Optimization.RemoveNeverExecutedCode);
     }