# HG changeset patch # User Christian Haeubl # Date 1354183232 -3600 # Node ID 770901ff8f802ab8a446d250e10495319eaa5f53 # Parent af30115c9d0eb02e402280cb8882d6452df1cf20 print a message when optimistic optimizations are disabled diff -r af30115c9d0e -r 770901ff8f80 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java --- 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 diff -r af30115c9d0e -r 770901ff8f80 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java --- 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 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); }