changeset 5116:312b18b9cc3a

added output when optimistic optimizations are disabled
author Christian Haeubl <christian.haeubl@oracle.com>
date Mon, 19 Mar 2012 15:08:07 -0700
parents c7d57d0d668a
children b6d1ba51d163
files graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalOptions.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/OptimisticOptimizations.java
diffstat 2 files changed, 19 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalOptions.java	Mon Mar 19 14:54:46 2012 -0700
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalOptions.java	Mon Mar 19 15:08:07 2012 -0700
@@ -82,6 +82,7 @@
 
     // profiling information
     public static int     MaximumDeoptsBeforeDisablingOptimisticOptimization = 25;
+    public static boolean PrintDisabledOptimisticOptimizations = true;
     public static int     MatureExecutionsBranch             = 1;
     public static int     MatureExecutionsPerSwitchCase      = 1;
     public static int     MatureExecutionsTypeProfile        = 1;
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/OptimisticOptimizations.java	Mon Mar 19 14:54:46 2012 -0700
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/OptimisticOptimizations.java	Mon Mar 19 15:08:07 2012 -0700
@@ -22,13 +22,16 @@
  */
 package com.oracle.graal.compiler;
 
+import com.oracle.graal.debug.*;
 import com.oracle.max.cri.ri.*;
+import com.oracle.max.criutils.*;
 
 
 
 public final class OptimisticOptimizations {
     public static OptimisticOptimizations ALL = new OptimisticOptimizations(true, true, true, true);
     public static OptimisticOptimizations NONE = new OptimisticOptimizations(false, false, false, false);
+    private static final DebugMetric disabledOptimisticOptsMetric = Debug.metric("DisabledOptimisticOpts");
 
     private final boolean removeNeverExecutedCode;
     private final boolean useTypeCheckedInlining;
@@ -37,10 +40,21 @@
 
     public OptimisticOptimizations(RiResolvedMethod method) {
         RiProfilingInfo profilingInfo = method.profilingInfo();
-        removeNeverExecutedCode = profilingInfo.getDeoptimizationCount(RiDeoptReason.UnreachedCode) < GraalOptions.MaximumDeoptsBeforeDisablingOptimisticOptimization;
-        useTypeCheckedInlining = profilingInfo.getDeoptimizationCount(RiDeoptReason.TypeCheckedInliningViolated) < GraalOptions.MaximumDeoptsBeforeDisablingOptimisticOptimization;
-        useTypeCheckHints = profilingInfo.getDeoptimizationCount(RiDeoptReason.OptimizedTypeCheckViolated) < GraalOptions.MaximumDeoptsBeforeDisablingOptimisticOptimization;
-        useExceptionProbability = profilingInfo.getDeoptimizationCount(RiDeoptReason.NotCompiledExceptionHandler) < GraalOptions.MaximumDeoptsBeforeDisablingOptimisticOptimization;
+        removeNeverExecutedCode = checkDeoptimization(profilingInfo, RiDeoptReason.UnreachedCode);
+        useTypeCheckedInlining = checkDeoptimization(profilingInfo, RiDeoptReason.TypeCheckedInliningViolated);
+        useTypeCheckHints = checkDeoptimization(profilingInfo, RiDeoptReason.OptimizedTypeCheckViolated);
+        useExceptionProbability = checkDeoptimization(profilingInfo, RiDeoptReason.NotCompiledExceptionHandler);
+    }
+
+    private static boolean checkDeoptimization(RiProfilingInfo profilingInfo, RiDeoptReason reason) {
+        boolean result = profilingInfo.getDeoptimizationCount(reason) < GraalOptions.MaximumDeoptsBeforeDisablingOptimisticOptimization;
+        if (!result) {
+            if (GraalOptions.PrintDisabledOptimisticOptimizations) {
+                TTY.println("WARN: deactivated optimistic optimization because of %s", reason.name());
+            }
+            disabledOptimisticOptsMetric.increment();
+        }
+        return result;
     }
 
     public OptimisticOptimizations(boolean removeNeverExecutedCode, boolean useTypeCheckedInlining, boolean useTypeCheckHints, boolean useExceptionProbability) {