# HG changeset patch # User Christian Haeubl # Date 1332194887 25200 # Node ID 312b18b9cc3a58291e8aa456865576647417bb9e # Parent c7d57d0d668a52ed4fca96b6b7a85c56710f4bbd added output when optimistic optimizations are disabled diff -r c7d57d0d668a -r 312b18b9cc3a graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalOptions.java --- 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; diff -r c7d57d0d668a -r 312b18b9cc3a graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/OptimisticOptimizations.java --- 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) {