Mercurial > hg > graal-compiler
changeset 6395:69e94aa204b7
Merge.
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Thu, 13 Sep 2012 18:12:54 +0200 |
parents | 466e6ceebfed (current diff) c61ce6bac1df (diff) |
children | 2ba1f4cdecd0 |
files | |
diffstat | 3 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Thu Sep 13 18:12:27 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Thu Sep 13 18:12:54 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 18:12:27 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Thu Sep 13 18:12:54 2012 +0200 @@ -254,7 +254,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 18:12:27 2012 +0200 +++ b/src/share/vm/graal/graalCompilerToVM.cpp Thu Sep 13 18:12:54 2012 +0200 @@ -857,6 +857,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();