Mercurial > hg > graal-compiler
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) {