changeset 3487:b9ed7199f6fb

special handling for VirtualObject(Field) in IdentifyBlocksPhase (don't schedule out of loops), better toString for HotSpotMethod/Field
author Lukas Stadler <lukas.stadler@jku.at>
date Thu, 04 Aug 2011 18:52:50 +0200
parents a5b02018b843
children 66e8bde93b6d
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalCompiler.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ComputeLinearScanOrder.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotField.java graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java src/share/vm/graal/graalVMEntries.cpp
diffstat 9 files changed, 25 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalCompiler.java	Thu Aug 04 11:54:05 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalCompiler.java	Thu Aug 04 18:52:50 2011 +0200
@@ -95,7 +95,7 @@
         }
 
         CiResult result = null;
-        TTY.Filter filter = new TTY.Filter(GraalOptions.PrintFilter, method);
+        TTY.Filter filter = new TTY.Filter(GraalOptions.PrintFilter, CiUtil.format("%H.%n", method, false));
         GraalCompilation compilation = new GraalCompilation(this, method, osrBCI, stats);
         currentCompilation = compilation;
         try {
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ComputeLinearScanOrder.java	Thu Aug 04 11:54:05 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ComputeLinearScanOrder.java	Thu Aug 04 18:52:50 2011 +0200
@@ -29,7 +29,6 @@
 import com.oracle.max.graal.compiler.debug.*;
 import com.oracle.max.graal.compiler.lir.*;
 import com.oracle.max.graal.graph.*;
-import com.oracle.max.graal.graph.collections.*;
 
 public final class ComputeLinearScanOrder {
 
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java	Thu Aug 04 11:54:05 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java	Thu Aug 04 18:52:50 2011 +0200
@@ -22,8 +22,6 @@
  */
 package com.oracle.max.graal.compiler.phases;
 
-import java.util.*;
-
 import com.oracle.max.graal.compiler.*;
 import com.oracle.max.graal.compiler.debug.*;
 import com.oracle.max.graal.compiler.gen.*;
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java	Thu Aug 04 11:54:05 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java	Thu Aug 04 18:52:50 2011 +0200
@@ -974,9 +974,9 @@
             Invoke invoke = new Invoke(bci(), opcode, resultType.stackKind(), args, target, target.signature().returnType(method.holder()), graph);
             Value result = appendWithBCI(invoke);
             invoke.setExceptionEdge(handleException(null, bci()));
-            if (invoke.exceptionEdge() == null) {
-                TTY.println("no exception edge" + unwindHandler);
-            }
+//            if (invoke.exceptionEdge() == null) {
+//                TTY.println("no exception edge" + unwindHandler);
+//            }
             frameState.pushReturn(resultType, result);
         }
     }
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java	Thu Aug 04 11:54:05 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java	Thu Aug 04 18:52:50 2011 +0200
@@ -334,7 +334,7 @@
             Block block;
             if (latestBlock == null) {
                 block = earliestBlock(n);
-            } else if (GraalOptions.ScheduleOutOfLoops) {
+            } else if (GraalOptions.ScheduleOutOfLoops && !(n instanceof VirtualObjectField) && !(n instanceof VirtualObject)) {
                 block = scheduleOutOfLoops(n, latestBlock, earliestBlock(n));
             } else {
                 block = latestBlock;
@@ -626,7 +626,8 @@
     }
 
     private boolean noRematerialization(Node n) {
-        return n instanceof Local || n instanceof LocationNode || n instanceof Constant || n instanceof StateSplit || n instanceof FrameState;
+        return n instanceof Local || n instanceof LocationNode || n instanceof Constant || n instanceof StateSplit || n instanceof FrameState || n instanceof VirtualObject ||
+                        n instanceof VirtualObjectField;
     }
 
     private double liveRange(Block from, Set<Usage> usages) {
--- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotField.java	Thu Aug 04 11:54:05 2011 +0200
+++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotField.java	Thu Aug 04 18:52:50 2011 +0200
@@ -26,8 +26,7 @@
 import java.lang.reflect.*;
 
 import com.oracle.max.graal.compiler.*;
-import com.sun.cri.ci.CiConstant;
-import com.sun.cri.ci.CiKind;
+import com.sun.cri.ci.*;
 import com.sun.cri.ri.RiField;
 import com.sun.cri.ri.RiType;
 
@@ -130,7 +129,7 @@
 
     @Override
     public String toString() {
-        return "HotSpotField<" + holder.name() + "." + name + ":" + offset + ">";
+        return "HotSpotField<" + CiUtil.format("%h.%n", this, false) + ":" + offset + ">";
     }
 
 }
--- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java	Thu Aug 04 11:54:05 2011 +0200
+++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java	Thu Aug 04 18:52:50 2011 +0200
@@ -166,7 +166,7 @@
 
     @Override
     public String toString() {
-        return "HotSpotMethod<" + holder().name() + ". " + name + ">";
+        return "HotSpotMethod<" + CiUtil.format("%h.%n", this, false) + ">";
     }
 
     public boolean hasCompiledCode() {
@@ -218,15 +218,15 @@
         TTY.println("canBeStaticallyBound: " + canBeStaticallyBound());
         TTY.println("invocationCount: " + invocationCount());
         for (int i = 0; i < codeSize(); i++) {
-            if (exceptionProbability(i) > 0) {
-                TTY.println("  exceptionProbability@%d: %d", i, exceptionProbability(i));
-            }
             if (branchProbability(i) != -1) {
                 TTY.println("  branchProbability@%d: %f", i, branchProbability(i));
             }
             RiTypeProfile profile = typeProfile(i);
             if (profile != null && profile.count > 0) {
                 TTY.println("  profile@%d: count: %d, morphism: %d", i, profile.count, profile.morphism);
+                if (exceptionProbability(i) != -1) {
+                    TTY.println("  exceptionProbability@%d: %d", i, exceptionProbability(i));
+                }
             }
         }
     }
--- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java	Thu Aug 04 11:54:05 2011 +0200
+++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java	Thu Aug 04 18:52:50 2011 +0200
@@ -553,7 +553,6 @@
             } else if (holderName.equals("Lsun/misc/Unsafe;")) {
                 if (fullName.equals("getObject(Ljava/lang/Object;J)Ljava/lang/Object;")) {
                     CompilerGraph graph = new CompilerGraph(this);
-                    Local unsafe = new Local(CiKind.Object, 0, graph);
                     Local object = new Local(CiKind.Object, 1, graph);
                     Local offset = new Local(CiKind.Long, 2, graph);
                     UnsafeLoad load = new UnsafeLoad(object, offset, CiKind.Object, graph);
@@ -564,17 +563,12 @@
                     intrinsicGraphs.put(method, graph);
                 } else if (fullName.equals("putObject(Ljava/lang/Object;JLjava/lang/Object;)V")) {
                     CompilerGraph graph = new CompilerGraph(this);
-                    Local unsafe = new Local(CiKind.Object, 0, graph);
                     Local object = new Local(CiKind.Object, 1, graph);
                     Local offset = new Local(CiKind.Long, 2, graph);
                     Local value = new Local(CiKind.Object, 3, graph);
                     UnsafeStore store = new UnsafeStore(object, offset, value, CiKind.Object, graph);
-                    FrameState frameState = new FrameState(method, 0, parameters.size(), 0, 0, false, graph);
+                    FrameState frameState = new FrameState(method, FrameState.AFTER_BCI, 0, 0, 0, false, graph);
                     store.setStateAfter(frameState);
-                    frameState.setValueAt(0, unsafe);
-                    frameState.setValueAt(1, object);
-                    frameState.setValueAt(2, offset);
-                    frameState.setValueAt(3, value);
                     Return ret = new Return(null, graph);
                     store.setNext(ret);
                     graph.start().setNext(store);
--- a/src/share/vm/graal/graalVMEntries.cpp	Thu Aug 04 11:54:05 2011 +0200
+++ b/src/share/vm/graal/graalVMEntries.cpp	Thu Aug 04 18:52:50 2011 +0200
@@ -192,21 +192,19 @@
     methodOop method = getMethodFromHotSpotMethod(hotspot_method);
     cimethod = (ciMethod*)CURRENT_ENV->get_object(method);
   }
+  ciMethodData* method_data = cimethod->method_data();
 
-  ciMethodData* method_data = cimethod->method_data_or_null();
-  if (method_data == NULL) {
-    return -1;
+  if (method_data == NULL || !method_data->is_mature()) return -1;
+
+  ciProfileData* profile = method_data->bci_to_data(bci);
+  if (profile == NULL) {
+    return 0;
+  }
+  uint trap = method_data->trap_recompiled_at(profile);
+  if (trap > 0) {
+    return 100;
   } else {
-    ciProfileData* profile = method_data->bci_to_data(bci);
-    if (profile == NULL) {
-      return 0;
-    }
-    uint trap = method_data->trap_recompiled_at(profile);
-    if (trap > 0) {
-      return 100;
-    } else {
-      return trap;
-    }
+    return trap;
   }
 }