changeset 6387:d44835610b52

Merge.
author Doug Simon <doug.simon@oracle.com>
date Thu, 13 Sep 2012 17:45:04 +0200
parents abeeb57b655d (current diff) c61ce6bac1df (diff)
children 6b74f44c5059 2ba1f4cdecd0
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java src/share/vm/graal/graalCompilerToVM.cpp
diffstat 4 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/ea/PartialEscapeAnalysisPhase.java	Thu Sep 13 17:43:18 2012 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/ea/PartialEscapeAnalysisPhase.java	Thu Sep 13 17:45:04 2012 +0200
@@ -599,6 +599,9 @@
                         if (index < 0 || index >= arrayObj.fieldState.length) {
                             // out of bounds or not constant
                             replaceWithMaterialized(array, x, state, arrayObj);
+                            if (valueObj != null) {
+                                replaceWithMaterialized(value, x, state, valueObj);
+                            }
                         } else {
                             arrayObj.fieldState[index] = value;
                             if (changeGraph) {
@@ -731,6 +734,11 @@
                                 }
                             }
                         });
+                        for (ObjectState obj : state.states()) {
+                            if (obj.lockCount > 0) {
+                                virtual.add(obj);
+                            }
+                        }
 
                         ArrayDeque<ObjectState> queue = new ArrayDeque<>(virtual);
                         while (!queue.isEmpty()) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java	Thu Sep 13 17:43:18 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java	Thu Sep 13 17:45:04 2012 +0200
@@ -279,7 +279,15 @@
         return canBeInlined;
     }
 
+    /**
+     * Returns the offset of this method into the v-table.
+     * If the holder is not initialized, returns -1
+     * @return the offset of this method into the v-table
+     */
     public int vtableEntryOffset() {
+        if (!holder.isInitialized()) {
+            return -1;
+        }
         return HotSpotGraalRuntime.getInstance().getCompilerToVM().JavaMethod_vtableEntryOffset(this);
     }
 
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java	Thu Sep 13 17:43:18 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java	Thu Sep 13 17:45:04 2012 +0200
@@ -258,7 +258,7 @@
                         // We use LocationNode.ANY_LOCATION for the reads that access the vtable entry and the compiled code entry
                         // as HotSpot does not guarantee they are final values.
                         int vtableEntryOffset = hsMethod.vtableEntryOffset();
-                        assert vtableEntryOffset != 0;
+                        assert vtableEntryOffset > 0;
                         SafeReadNode hub = safeReadHub(graph, receiver, StructuredGraph.INVALID_GRAPH_ID);
                         Kind wordKind = graalRuntime.getTarget().wordKind;
                         Stamp nonNullWordStamp = StampFactory.forWord(wordKind, true);
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Thu Sep 13 17:43:18 2012 +0200
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Thu Sep 13 17:45:04 2012 +0200
@@ -865,6 +865,7 @@
 
   methodOop method = getMethodFromHotSpotMethod(hotspot_method);
   assert(!instanceKlass::cast(method->method_holder())->is_interface(), "vtableEntryOffset cannot be called for interface methods");
+  assert(instanceKlass::cast(method->method_holder())->is_linked(), "vtableEntryOffset cannot be called is holder is not linked");
 
   // get entry offset in words
   int vtable_entry_offset = instanceKlass::vtable_start_offset() + method->vtable_index() * vtableEntry::size();