changeset 7111:e0fcf7802786

Merge.
author Christian Haeubl <haeubl@ssw.jku.at>
date Fri, 30 Nov 2012 08:30:22 +0100
parents 9bd688f91d3f (diff) 4983da9d3fc7 (current diff)
children 60bef2672469 38076efb9062
files
diffstat 4 files changed, 23 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java	Thu Nov 29 17:43:48 2012 -0800
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Assumptions.java	Fri Nov 30 08:30:22 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.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Thu Nov 29 17:43:48 2012 -0800
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/bridge/VMToCompilerImpl.java	Fri Nov 30 08:30:22 2012 +0100
@@ -380,11 +380,16 @@
         return compileMethod(method, entryBCI, blocking, priority);
     }
 
+    /**
+     * Compiles a method to machine code.
+     * @return true if the method is in the queue (either added to the queue or already in the queue)
+     */
     public boolean compileMethod(final HotSpotResolvedJavaMethod method, final int entryBCI, boolean blocking, int priority) throws Throwable {
+        CompilationTask current = method.currentTask();
         boolean osrCompilation = entryBCI != StructuredGraph.INVOCATION_ENTRY_BCI;
         if (osrCompilation && bootstrapRunning) {
             // no OSR compilations during bootstrap - the compiler is just too slow at this point, and we know that there are no endless loops
-            return true;
+            return current != null;
         }
 
         if (CompilationTask.withinEnqueue.get()) {
@@ -392,12 +397,11 @@
             // java.util.concurrent.BlockingQueue is used to implement the compilation worker
             // queues. If a compiler thread triggers a compilation, then it may be blocked trying
             // to add something to its own queue.
-            return false;
+            return current != null;
         }
         CompilationTask.withinEnqueue.set(Boolean.TRUE);
 
         try {
-            CompilationTask current = method.currentTask();
             if (!blocking && current != null) {
                 if (current.isInProgress()) {
                     if (current.getEntryBCI() == entryBCI) {
@@ -422,6 +426,7 @@
             CompilationTask task = CompilationTask.create(graalRuntime, createPhasePlan(optimisticOpts, osrCompilation), optimisticOpts, method, entryBCI, id, queuePriority);
             if (blocking) {
                 task.runCompilation();
+                return false;
             } else {
                 try {
                     method.setCurrentTask(task);
@@ -430,12 +435,12 @@
                     } else {
                         compileQueue.execute(task);
                     }
+                    return true;
                 } catch (RejectedExecutionException e) {
                     // The compile queue was already shut down.
                     return false;
                 }
             }
-            return true;
         } finally {
             CompilationTask.withinEnqueue.set(Boolean.FALSE);
         }
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java	Thu Nov 29 17:43:48 2012 -0800
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/GraalOptions.java	Fri Nov 30 08:30:22 2012 +0100
@@ -82,7 +82,6 @@
 
     // profiling information
     public static int     DeoptsToDisableOptimisticOptimization = 40;
-    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.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java	Thu Nov 29 17:43:48 2012 -0800
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/OptimisticOptimizations.java	Fri Nov 30 08:30:22 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.UseTypeCheckHints);
+        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);
     }